Como posso determinar se o botão de rolagem é pressionado ou deprimido e, em caso afirmativo, pressioná-lo! - página 6

 
LEOK:

Se esta é a função, ainda preciso do seu interior.

// 3.2.1. a função retorna o estado de rolagem automática do gráfico especificado. Se bem sucedida, a função retorna VERDADEIRA, caso contrário, retorna FALSA.
bool ServiceGetAutoScroll(int hwndChart); // O descritor de sistema da janela de gráficos a partir da qual o estado de rolagem automática é retornado.

Você não ficará satisfeito com os internos da função. E eu teria muito a copiar de diferentes lugares. Eu tenho uma classe para trabalhar com janelas MT4. Lá tudo é feito de forma centralizada. Muito tem que ser copiado.

Esta função, por exemplo:

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

Será que lhe convém? Há uma classe inteira por trás do método GetAutoScroll() .

Use o que já foi feito para que você não perca seu tempo. Caso contrário, você pode começar a programar desenvolvendo seu próprio processador, ou melhor ainda, minerando e processando silício.

 

De qualquer forma, a primeira versão do roteiro parece funcionar de alguma forma !

É claro que existem versões mais simples e confiáveis, mas nunca as consegui ...

O roteiro está anexado ...

Arquivos anexados:
getpixel.ex4  5 kb
 
Se você quiser me mostrar o código, mostre-me o código. Se você não quiser me mostrar o código, não diga nada.
 
FAQ:
Se você quiser mostrá-lo, mostre o código. Se você não quiser mostrar o código, fique quieto.


Assim, foi discutido e demonstrado ...

Não há nada escondido neste 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);
}

 
Eu pessoalmente não ligo a mínima. Se for preciso, vou ler o Ex4. Estou preocupado com outros participantes que possam ter uma pergunta semelhante.
 

Pontos fracos no código:

1. não há nenhuma ligação com o gráfico. Este código recuperará a posição do botão de qualquer gráfico ativo.

2. este código não prevê a posição autônoma do painel. Ou seja, este código nem sempre funcionará.

3. este código funciona apenas com a localização russa.

4. É interessante, mas não muito cavalheiresco :-))).

É assustador olhar o código WinAPI no MLQ4 depois do C++.

 

Desculpe, eu só inventei com o que pude pensar, sou um principiante, não um ACC como você!

Por isso pedi que o código fosse publicado para que não houvesse estas 3 desvantagens!

Eu não entendo a cor (4º ponto) !?

 
LEOK:

Sobre a cor (4º ponto) Eu não entendo !?

Também estou chocado com a cor.
O que há de errado com TB_ISBUTTONCHECKED ?
 
LEOK:

Desculpe, eu só inventei com o que pude pensar, sou um principiante, não um ACC como você!

Por isso pedi que o código fosse publicado para que não houvesse estas 3 desvantagens!

Eu não entendo a cor (4º item)!

É uma cultura técnica como essa. Não é cultural desenroscar parafusos e porcas com alicate. Há uma chave de fenda para isso.

Como passar sem essas 3 desvantagens, já escreveu várias vezes.

 
jartmailru:
Estou chocado com a cor, também.
Por que a TB_ISBUTTONCHECKED é tão irritante?


Você não pode dizer: goste ou não goste se eu não o vi, não sei e não experimentei!

É por isso que estou pedindo ajuda e mais uma vez pedindo um exemplo de código com TB_ISBUTTONCHECKED no mql4 ...

Razão: