Come faccio a determinare se il pulsante di scorrimento è premuto o depresso e, in tal caso, premerlo! - pagina 6

 
LEOK:

Se questa è la funzione, ho ancora bisogno del suo interno...

// 3.2.1. La funzione restituisce lo stato di scorrimento automatico del grafico specificato. Se ha successo, la funzione restituisce TRUE, altrimenti restituisce FALSE.
bool ServiceGetAutoScroll(int hwndChart); // Il descrittore di sistema della finestra del grafico da cui viene restituito lo stato di scorrimento automatico.

Non sarete soddisfatti degli interni della funzione. E avrei troppe cose da copiare da posti diversi. Ho una classe per lavorare con MT4 windows. Lì si fa tutto in modo centralizzato. Troppe cose devono essere copiate.

Questa funzione, per esempio:

// 3.2.1. Функция возвращает состояние автопрокрутки на указанном графике. В случае успеха функция возвращает TRUE, иначе - FALSE.
EXPFUNC(BOOL) ServiceGetAutoScroll(const HWND hwndChart) // Системный дескриптор окна графика, с которого возвращается состояние автопрокрутки.
 {
  try
   {
    Init(); // Инициализация библиотеки.
    return(MT4_WINDOWS->GetAutoScroll(hwndChart));
   }
  catch(TCHAR* szExclusion)
   {
    Utils::Debugging::MessageBoxStop(_T("ServiceGetAutoScroll()"), szExclusion);
   }
  catch(tstring &sExclusion)
   {
    Utils::Debugging::MessageBoxStop(_T("ServiceGetAutoScroll()"), sExclusion);
   }
  catch(...)
   {
    Utils::Debugging::MessageBoxStop(_T("ServiceGetAutoScroll()"), _T("Системная ошибка!") + LAST_ERROR);
   }
  return(FALSE);
 }

Ti va bene? C'è un'intera classe dietro il metodo GetAutoScroll() .

Usate ciò che è già stato fatto per non perdere tempo. Altrimenti, si può iniziare a programmare sviluppando il proprio processore, o meglio ancora, estraendo e lavorando il silicio.

 

Comunque, la prima versione dello script sembra funzionare in qualche modo!

Certo, ci sono versioni più semplici e affidabili, ma non le ho mai avute...

La sceneggiatura è allegata ...

File:
getpixel.ex4  5 kb
 
Se vuoi mostrarmi il codice, mostrami il codice. Se non vuoi mostrarmi il codice, non dire nulla.
 
FAQ:
Se vuoi mostrarlo, mostra il codice, se non vuoi mostrarlo, stai zitto.


Così è stato discusso e dimostrato ...

Non c'è niente di nascosto in questo codice, per favore:

#property copyright "Copyright © 2012 ЛЕО"
#import "user32.dll" 
      int      GetWindow            (int, int);
      int      GetAncestor          (int hWnd, int gaFlags);
      int      GetWindowTextLengthA (int);
      int      GetWindowTextA       (int, string, int);
      int      GetWindowDC          (int hWnd);
#import
#import "gdi32.dll" int GetPixel (int hDC, int x, int y);

int         hwnd, hg, h;
string      Name = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
string      pr[2];

int deinit() {ObjectsDeleteAll();Comment ("");}

int start() {
      ObjectsDeleteAll(); Comment ("");
      int hwnd  = GetAncestor (WindowHandle(Symbol(),Period()),2); //дескриптор основного окна терминала
      
      // Первое дочернее окно
      int temp  = GetWindow (hwnd, 5);              
      GetWindowTextA (temp, Name, GetWindowTextLengthA(temp)+1);
      
      // Поиск первого дочернего окна по имени
      if (Name != "Стандартная" || Name == "Графики" || Name == "Графические инструменты") {
            for (int i=0;i<10;i++) {
                  temp  = GetWindow (temp, 2);  if (temp == 0) break;
                  GetWindowTextA (temp, Name, GetWindowTextLengthA(temp)+1);
                  if (Name == "Стандартная" || Name == "Графики" || Name == "Графические инструменты") {hg = temp; break;}
            }
      } else hg = temp;
      
      // Поиск второго дочернего окна "Графики"
      int h  = GetWindow (hg, 5);              
      GetWindowTextA (h, Name, GetWindowTextLengthA(h)+1);
      if (Name != "Графики") {
            for (i=0;i<10;i++) {
                  h  = GetWindow (h, 2);  if (h == 0) break;
                  GetWindowTextA (h, Name, GetWindowTextLengthA(h)+1);
                  if (Name == "Графики") break;
            }
      }
      
      // если цвет пикселя кнопки =10526880, значит кнопка нажата, в противном случае нет
      while (!IsStopped()) {
            if (GetPixel (GetWindowDC(h),166,3) == 10526880) pr[0] = "ПРОКРУТКА"; else pr[0] = "прокрутка";
            if (GetPixel (GetWindowDC(h),200,3) == 10526880) pr[1] = " СМЕЩЕНИЕ"; else pr[1] = " смещение";
            Comment ("\n ",pr[0],pr[1]); Sleep(500);
      }
      return(0);
}

 
Personalmente non me ne frega niente. Se devo, leggerò l'Ex4. Mi preoccupo per gli altri partecipanti che potrebbero poi avere una domanda simile.
 

Debolezze nel codice:

1. non c'è alcun collegamento con il grafico. Questo codice recupera la posizione del pulsante di qualsiasi grafico attivo.

2. Questo codice non prevede la posizione autonoma del pannello. Cioè, questo codice non funzionerà sempre.

3. Questo codice funziona solo con la localizzazione russa.

4. È interessante, ma non è molto gentile :-)).

Fa paura guardare il codice WinAPI in MLQ4 dopo C++.

 

Mi dispiace, l'ho solo inventato con quello che mi è venuto in mente, sono un principiante, non un ACC come te!

Ecco perché ho chiesto di pubblicare il codice in modo che non ci siano questi 3 svantaggi!

Non capisco il colore (4° punto) !?

 
LEOK:

Per quanto riguarda il colore (4° punto) non capisco!?

Sono scioccato anche dal colore.
Cosa c'è di sbagliato in TB_ISBUTTONCHECKED?
 
LEOK:

Mi dispiace, l'ho solo inventato con quello che mi è venuto in mente, sono un principiante, non un ACC come te!

Ecco perché ho chiesto di pubblicare il codice in modo che non ci siano questi 3 svantaggi!

Non capisco il colore (4° elemento)!

È una cultura tecnica come questa. Non è culturale svitare bulloni e dadi con le pinze. C'è una chiave per questo.

Come fare a meno di questi 3 svantaggi, ha già scritto diverse volte.

 
jartmailru:
Anch'io sono scioccato dal colore.
Perché TB_ISBUTTONCHECKED è così fastidioso?


Non si può dire: mi piace o non mi piace se non l'ho visto, non lo so e non l'ho provato!

Ecco perché sto chiedendo aiuto e ancora una volta chiedo un esempio di codice con TB_ISBUTTONCHECKED su mql4 ...

Motivazione: