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

 

int max = SendMessage ( hwndTaskbar, TB_BUTTONCOUNT, 0, 0);

Por favor me diga onde ver todos os valores de constantes como: TB_BUTTONCOUNT, TB_ISBUTTONPRESSED ?!

Eu quero determinar o botão e seu estado!

 
Você pode pesquisar no MSDN.
 

Que comando de barra de ferramentas pode ser usado para percorrer os botões e encontrar o correto?

Alguém já fez isso?

Foi encontrado o descritor da janela gráfica:

#property copyright "Copyright © 2012 ЛЕО"
#import "user32.dll" 
      int      GetWindow            (int, int);
      int      FindWindowExA        (int, int, string, string);
      int      GetParent            (int hWnd); 
      bool     GetCursorPos         (int& Pos[2]);
      bool     GetWindowRect        (int hWnd,int& Pos[4]);
      int      GetKeyState          (int button); 
      void     mouse_event          (int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
      int      GetAncestor          (int hWnd, int gaFlags);
      int      GetWindowTextLengthA (int);
      int      GetWindowTextA       (int, string, int);
#import
#import "gdi32.dll" int GetPixel (int hDC, int x, int y);
int         Pos[2];
int         rect[4];
int         hwnd, hg, h;
int         X, Y;
string      Name       = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234";
int deinit() {ObjectsDeleteAll();Comment ("");}
int start() {
      ObjectsDeleteAll(); Comment ("");

      int hwnd  = GetAncestor (WindowHandle(Symbol(),Period()),2); //дескриптор основного окна терминала
      
      int temp  = GetWindow (hwnd, 5);              
      int Count = GetWindowTextLengthA (temp); GetWindowTextA (temp, Name, Count+1);
      if (Name != "Стандартная" || Name == "Графики" || Name == "Графические инструменты") {
            for (int i=0;i<10;i++) {
                  temp  = GetWindow (temp, 2);  if (temp == 0) break;
                  Count = GetWindowTextLengthA (temp); GetWindowTextA (temp, Name, Count+1);
                  if (Name == "Стандартная" || Name == "Графики" || Name == "Графические инструменты") {hg = temp; break;}
            }
      } else hg = temp;
      
      int h  = GetWindow (hg, 5);              
      Count = GetWindowTextLengthA (h); GetWindowTextA (h, Name, Count+1);
      if (Name != "Графики") {
            for (i=0;i<10;i++) {
                  h  = GetWindow (h, 2);  if (h == 0) break;
                  Count = GetWindowTextLengthA (h); GetWindowTextA (h, Name, Count+1);
                  if (Name == "Графики") break;
            }
      }
      Print (DecToHex(h,8));

      while (!IsStopped()) {
            GetWindowRect (h,rect);
            GetCursorPos  (Pos);
            X                       = Pos[0] - rect[0];
            Y                       = Pos[1] - rect[1];
            Comment ("X= ",X,"\n","Y= ",Y); Sleep(100);
      }
      return(0);
}
string DecToHex (int n, int dig) {
      string s[], r="";
      string Sym[16] = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
      ArrayResize (s,dig);
      for (int i=0; i<dig; i++) s[i]="0";
      i = dig-1;
      while (n != 0) {s[i] = Sym[n%16]; n = n>>4; i--; }
      for (i=0; i<dig; i++) r=r+s[i];
      return (r);
}
 

Eu não entendo... Para quê?! Estou muito surpreso. Você já olhou meu cabeçalho? Não de acordo com o código.

Qualquer comando de um gráfico é uma função, uma linha de código.

 
Zhunko:

Eu não entendo... Para quê?! Estou muito surpreso. Você já olhou meu cabeçalho? Não de acordo com o código.

Qualquer comando de um gráfico é uma função, uma linha de código.


OK, vou procurar uma solução para esta questão em outro lugar.

Desculpe pelo inconveniente.

 
LEOK:


OK, vou procurar uma solução para este problema em outro lugar.

Desculpe pelo inconveniente...

Ali, no cabeçalho, o código e o exemplo. Não há necessidade de se ofender. O que você está fazendo já foi resolvido muitas vezes neste fórum em diferentes versões. Basta olhar o arquivo de cabeçalho WinUser32.mqh, que minha biblioteca possui. Todos os códigos de controle estão lá. Já escrevi sobre isso várias vezes.
 
Zhunko:
Ali, no cabeçalho, há um código e um exemplo.


Copie aqui o que você acha que é um exemplo para esta pergunta ?!

Eu só encontrei isto:

// 3.1.1 Função habilita/desabilita a rolagem automática da tabela especificada.
Serviço nuloEutoScroll(int hwndChart); // Descritor de sistema da janela do gráfico, na qual o autoscroll está desativado.
//=====================================================================================================================================================================
// 3.1.2 A função permite/desativa o deslocamento do gráfico especificado. Se bem-sucedido, o método retorna VERDADEIRO, caso contrário - FALSO.
bool ServiceShift(int hwndChart); // Descritor do sistema da janela do gráfico, na qual o turno está habilitado/desabilitado.

Mas você não precisa disso!

 
LEOK:

Copie aqui o que você acha que é um exemplo sobre o assunto ?!
E procure você mesmo?
 

Se esta função aqui, eu ainda preciso de seus internos ...

// 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 FALSA.
bool ServiceGetAutoScroll(int hwndChart); // Descritor de sistema da janela do gráfico, a partir da qual o estado de rolagem automática é retornado.

 
LEOK:


Copie aqui o que você acha que é um exemplo sobre o assunto ?!

Eu só encontrei isto:

// 3.1.1 A função habilita/desabilita a rolagem automática da tabela especificada.
O descritor de sistema da janela do gráfico, na qual o autoscroll está desativado.

// 3.1.2. função habilita/desabilita o deslocamento do gráfico especificado. O método retorna VERDADEIRO se for bem sucedido, caso contrário FALSO.
bool ServiceShift(int hwndChart); // Descritor do sistema da janela do gráfico, na qual o turno está habilitado/desabilitado.

Mas você não precisa disso!

Eu não estava falando sobre a biblioteca. Mas se se trata de uma biblioteca, há uma função:

 // 3.2.1. Функция возвращает состояние автопрокрутки на указанном графике. В случае успеха функция возвращает TRUE, иначе - FALSE.
 bool ServiceGetAutoScroll(int hwndChart); // Системный дескриптор окна графика, с которого возвращается состояние автопрокрутки.
Eu escrevi acima sobre WinUser32.mqh. Os códigos de controle estão lá.