¿Cómo puedo determinar si el botón de desplazamiento está pulsado o presionado y, en ese caso, presionarlo? - página 6

 
LEOK:

Si esta es la función, todavía necesito el interior de la misma ...

// 3.2.1. La función devuelve el estado de autodesplazamiento del gráfico especificado. Si tiene éxito, la función devuelve TRUE, en caso contrario devuelve FALSE.
bool ServiceGetAutoScroll(int hwndChart); // El descriptor del sistema de la ventana del gráfico del que se devuelve el estado de desplazamiento automático.

No te conformarás con los internos de la función. Y tendría mucho que copiar de diferentes lugares. Tengo una clase para trabajar con ventanas MT4. Todo se hace de forma centralizada allí. Hay que copiar demasiado.

Esta función, por ejemplo:

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

¿Le conviene? Hay toda una clase detrás del método GetAutoScroll() .

Utilice lo que ya se ha hecho para no perder el tiempo. Si no, puedes empezar a programar desarrollando tu propio procesador, o mejor aún, extrayendo y procesando silicio.

 

¡De todos modos, la primera versión del script parece funcionar de alguna manera !

Por supuesto, hay versiones más sencillas y fiables, pero nunca las tuve...

El guión se adjunta ...

Archivos adjuntos:
getpixel.ex4  5 kb
 
Si quieres mostrarme el código, muéstrame el código. Si no quieres mostrarme el código, no digas nada.
 
FAQ:
Si quieres mostrarlo, muestra el código. Si no quieres mostrar el código, cállate.


Así que se ha discutido y demostrado ...

No hay nada oculto en este código, por favor:

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

 
A mí, personalmente, me importa un bledo. Si tengo que hacerlo, leeré el Ex4. Me preocupan otros participantes que luego puedan tener una pregunta similar.
 

Debilidades en el código:

1. No hay relación con el gráfico. Este código recuperará la posición del botón de cualquier gráfico activo.

2. Este código no prevé la posición autónoma del panel. Es decir, este código no siempre funcionará.

3. Este código sólo funciona con la localización rusa.

4. Es interesante, pero no muy caballeroso :-)).

Da miedo ver el código WinAPI en MLQ4 después de C++.

 

Lo siento, me lo he inventado con lo que se me ha ocurrido, soy un principiante, ¡no un ACC como tú!

¡Por eso pedí que se publicara el código para que no hubiera estos 3 inconvenientes !

No entiendo lo del color (4º punto).

 
LEOK:

En cuanto al color (4º punto), no lo entiendo.

A mí también me choca el color.
¿Qué pasa con TB_ISBUTTONCHECKED ?
 
LEOK:

Lo siento, me lo he inventado con lo que se me ha ocurrido, soy un principiante, ¡no un ACC como tú!

¡Por eso pedí que se publicara el código para que no hubiera estos 3 inconvenientes !

No entiendo lo del color (4º punto).

Es una cultura técnica así. No es cultural desenroscar tornillos y tuercas con unos alicates. Hay una llave inglesa para eso.

Cómo prescindir de estas 3 desventajas, ya ha escrito varias veces.

 
jartmailru:
A mí también me choca el color.
¿Por qué TB_ISBUTTONCHECKED es tan molesto?


No se puede decir: me gusta o no me gusta si no lo he visto, no lo conozco y no lo he probado.

Por eso pido ayuda y una vez más pido un ejemplo de código con TB_ISBUTTONCHECKED en mql4 ...