Comment déterminer si le bouton de défilement est enfoncé ou non et, le cas échéant, l'enfoncer ! - page 6

 
LEOK:

Si c'est la fonction, j'ai encore besoin de l'intérieur de celle-ci...

// La fonction renvoie l'état de défilement automatique du graphique spécifié. En cas de succès, la fonction renvoie VRAI, sinon elle renvoie FAUX.
bool ServiceGetAutoScroll(int hwndChart) ; // Le descripteur système de la fenêtre graphique à partir duquel l'état de défilement automatique est renvoyé.

Vous ne serez pas satisfait de l'aspect interne de la fonction. Et j'aurais trop de choses à copier de différents endroits. J'ai une classe pour travailler avec les fenêtres MT4. Tout y est centralisé. Il y a trop de choses à copier.

Cette fonction, par exemple :

// 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);
 }

Cela vous conviendra-t-il ? Il y a toute une classe derrière la méthode GetAutoScroll() .

Utilisez ce qui a déjà été fait afin de ne pas perdre votre temps. Sinon, vous pouvez commencer à programmer en développant votre propre processeur, ou mieux encore, en extrayant et en traitant du silicium.

 

Quoi qu'il en soit, la première version du script semble fonctionner d'une manière ou d'une autre !

Bien sûr, il existe des versions plus simples et plus fiables, mais je ne les ai jamais eues...

Le script est joint ...

Dossiers :
getpixel.ex4  5 kb
 
Si tu veux me montrer le code, montre-moi le code. Si tu ne veux pas me montrer le code, ne dis rien.
 
FAQ:
Si tu veux le montrer, montre le code. Si tu ne veux pas montrer le code, tais-toi.


Donc, il a été discuté et montré ...

Il n'y a rien de caché dans ce code, s'il vous plaît :

#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);
}

 
Personnellement, je n'en ai rien à faire. Si je dois le faire, je lirai l'Ex4. Je m'inquiète pour les autres participants qui pourraient alors avoir une question similaire.
 

Faiblesses du code :

1. il n'y a pas de lien avec le graphique. Ce code récupère la position du bouton de tout graphique actif.

2) Ce code ne prévoit pas de position autonome du panneau. C'est-à-dire que ce code ne fonctionnera pas toujours.

3. ce code ne fonctionne qu'avec la localisation russe.

4. C'est intéressant, mais pas très gentleman :-)).

Il est effrayant de regarder le code WinAPI dans MLQ4 après C++.

 

Je suis désolé, je l'ai juste inventé avec ce qui me venait à l'esprit, je suis un débutant, pas un ACC comme vous !

C'est pourquoi j'ai demandé à ce que le code soit affiché afin qu'il n'y ait pas ces 3 inconvénients !

Je ne comprends pas la couleur (4ème point) !

 
LEOK:

Concernant la couleur (4ème point), je ne comprends pas !

Je suis également choqué par la couleur.
Quel est le problème avec TB_ISBUTTONCHECKED ?
 
LEOK:

Je suis désolé, je l'ai juste inventé avec ce qui me venait à l'esprit, je suis un débutant, pas un ACC comme vous !

C'est pourquoi j'ai demandé à ce que le code soit affiché afin qu'il n'y ait pas ces 3 inconvénients !

Je ne comprends pas la couleur (4ème article) !

C'est une culture technique comme ça. Il n'est pas culturel de dévisser les boulons et les écrous avec des pinces. Il existe une clé pour cela.

Comment se passer de ces 3 inconvénients, a déjà écrit plusieurs fois.

 
jartmailru:
Je suis aussi choqué par la couleur.
Pourquoi TB_ISBUTTONCHECKED est-il si ennuyeux ?


Vous ne pouvez pas dire : j'aime ou je n'aime pas si je ne l'ai pas vu, si je ne sais pas et si je n'ai pas essayé !

C'est pourquoi je demande de l'aide et je demande une fois de plus un exemple de code avec TB_ISBUTTONCHECKED sur mql4 ...