Как определить: отжата или нажата кнопка автопрокрутки и в случае, если она нажата - отжать !? - страница 6

 
LEOK:

Если вот эта функция, то мне всё равно нужно её внутренность ...

// 3.2.1. Функция возвращает состояние автопрокрутки на указанном графике. В случае успеха функция возвращает TRUE, иначе - FALSE.
bool ServiceGetAutoScroll(int hwndChart); // Системный дескриптор окна графика, с которого возвращается состояние автопрокрутки.

Вас внутренность функции не устроит. И мне слишком много придётся копировать из разных мест. У меня есть класс для работы с окнами МТ4. Там всё делается централизовано. Слишком много надо копировать.

Вот, например, эта функция:

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

Вас разве это устроит? За методом GetAutoScroll() стоит целый класс.

Пользуйтесь тем, что уже сделано, чтобы самому время не терять. А то программировать можно начать и с разработки своего процессора, а лучше с добычи и обработки кремния.

 

Вообщем, первая версия скрипта вроде, как-то работает !

Конечно, есть более простые и надёжные варианты исполнения, но мне их так и не выложили ...

Скрипт прикладываю ...

Файлы:
getpixel.ex4  5 kb
 
А вот это уже просто свинство. хотите показать - показывайте код. не хотите показывать код - молчите себе.
 
FAQ:
А вот это уже просто свинство. хотите показать - показывайте код. не хотите показывать код - молчите себе.


Так всё же обсудили и показали ...

Ничего скрытного в этом коде нет, пожалуйста:

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

 
Да лично мне реально по барабану. если будет надо я ех4 прочитаю. я об остальных участниках у которых потом может возникнуть подобный вопрос беспокоюсь.
 

Недостатки кода:

1. Отсутствует привязка к графику. Этот код будет получать положение кнопки любого активного графика.

2. Этот код не предусматривает автономное положение панели. Т.е. этот код работать будет не всегда.

3. Этот код работает только с русской локализацией.

4. С цветом интересно, но не по джентельменски :-))

Страшно смотреть на код WinAPI в MLQ4 после С++.

 

Извините, на что мозгов хватило, то и состряпал, я же начинающий, а не АСС, как ВЫ !

Поэтому и просил выложить код, чтобы не было этих 3-х недостатков !

Про цвет (4-й пункт) не понял !?

 
LEOK:

Про цвет (4-й пункт) не понял !?

Про цвет я тоже в шоке.
Чем так не понравился TB_ISBUTTONCHECKED ?
 
LEOK:

Извините, на что мозгов хватило, то и состряпал, я же начинающий, а не АСС, как ВЫ !

Поэтому и просил выложить код, чтобы не было этих 3-х недостатков !

Про цвет (4-й пункт) не понял !?

Это культура техническая такая. Болты и гайки не культурно откручивать пассатижами. Для этого есть гаечный ключ.

Как сделать без этих 3-х недостатков, написал уже несколько раз.

 
jartmailru:
Про цвет я тоже в шоке.
Чем так не понравился TB_ISBUTTONCHECKED ?


Нельзя сказать: нравится или не нравится, если я это не видел, не знаю и не пробовал, что это такое !

Поэтому-то прошу помощи и в очередной раз прошу привести пример кода с TB_ISBUTTONCHECKED на mql4 ...

Причина обращения: