Nasıl belirlenir: otomatik kaydırma düğmesine basılır veya basılır ve basılırsa bırakın!? - sayfa 6

 
LEOK :

Eğer işlev buysa, o zaman hala iç kısmına ihtiyacım var ...

// 3.2.1. İşlev, belirtilen grafikte otomatik kaydırma durumunu döndürür. İşlev başarılıysa TRUE, değilse FALSE döndürür.
bool ServiceGetAutoScroll(int hwndChart); // Otomatik kaydırma durumunun döndürüldüğü grafik penceresinin sistem tanıtıcısı.

Fonksiyonun içi sizi tatmin etmeyecek. Ve farklı yerlerden kopyalayacak çok şeyim var. MT4 pencereleriyle çalışmak için bir sınıfım var. Her şey merkezi olarak yapılır. Kopyalamak için çok fazla.

Örneğin, bu işlev:

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

Bu sana uyacak mı? GetAutoScroll() yönteminin arkasında bütün bir sınıf vardır.

Kendinizi zaman kaybetmemek için daha önce yapılmış olanı kullanın. Ardından kendi işlemcinizi geliştirerek veya daha iyisi silikonun çıkarılması ve işlenmesiyle programlamaya başlayabilirsiniz.

 

Genel olarak, betiğin ilk sürümü bir şekilde çalışıyor gibi görünüyor!

Elbette daha basit ve daha güvenilir versiyonları var ama bana hiç göstermediler...

Senaryoyu ekliyorum...

Dosyalar:
getpixel.ex4  5 kb
 
Şimdi bu sadece saçmalık. Göstermek istiyorsanız - kodu gösterin. Kodu göstermek istemiyorsanız, sessiz olun.
 
FAQ :
Şimdi bu sadece saçmalık. Göstermek istiyorsanız - kodu gösterin. Kodu göstermek istemiyorsanız, sessiz olun.


Bu yüzden hala tartıştılar ve gösterdiler ...

Bu kodda gizli bir şey yok, lütfen:

 #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 (5 00 );
      }
       return ( 0 );
}

 
Evet, kişisel olarak gerçekten umurumda değil. Gerekirse, ex4 okurum. Daha sonra benzer bir sorusu olabilecek diğer katılımcılar için endişeleniyorum.
 

Kod kusurları:

1. Grafiğe bağlantı yok. Bu kod, herhangi bir aktif grafiğin düğme konumunu alacaktır.

2. Bu kod, bağımsız panel konumunu içermez. Onlar. bu kod her zaman çalışmayacaktır.

3. Bu kod yalnızca Rusça yerelleştirme ile çalışır.

4. Renk ilginç ama centilmence değil :-))

C++'dan sonra MLQ4'te WinAPI koduna bakmak korkutucu.

 

Üzgünüm, yeterince beynim vardı, onu uydurdum, ama ben acemiyim, ACC değil, SİZİN gibi!

Bu nedenle, bu 3 eksiklik olmaması için kodu göndermemi istedim!

Rengi anlamadım (4. nokta) !?

 
LEOK :

Rengi anlamadım (4. nokta) !?

Ben de rengine bayıldım.
TB_ISBUTTONCHECKED'i neden bu kadar beğenmediniz?
 
LEOK :

Üzgünüm, yeterince beynim vardı, onu uydurdum, ama ben acemiyim, ACC değil, SİZİN gibi!

Bu nedenle, bu 3 eksiklik olmaması için kodu göndermemi istedim!

Rengi anlamadım (4. nokta) !?

Bu teknik bir kültürdür. Cıvatalar ve somunlar kültürel olarak pense ile sökülmez. Bunun için bir anahtar var.

Bu 3 eksiklik olmadan nasıl yapılır, zaten birkaç kez yazdım.

 
jartmailru :
Ben de rengine bayıldım.
TB_ISBUTTONCHECKED'i neden bu kadar beğenmediniz?


Diyemezsiniz: Beğen ya da beğenme, görmediysem, bilmiyorum ve ne olduğunu denemedim!

Bu yüzden yardım rica ediyorum ve bir kez daha mql4 üzerinde TB_ISBUTTONCHECKED ile kod örneği vermenizi rica ediyorum...