Profesyoneller ne diyecek: MQL'de fare kaydırma değerleri nasıl alınır? [beşinci forumdan yeniden yayınla]

 
Vida DLL'sinden bahsediyoruz. Kendinizinkini yazmak henüz düşünülmedi.


İnterneti inceledikten sonra üç olasılığa karar verdim:

1. WM_MOUSEWHEEL'i Kullanma
2. WM_INPUT'u İşlemek
3. DirectInput'tan fare verilerinin alınması.

İlk seçenek, bu olayın işlendiği bir pencere olduğunu varsayar. Ne yazık ki, MQL'den terminal penceresinin mesaj kuyruğuna nasıl ulaşacağımı bilmiyorum, bu yüzden bu seçenek ortadan kalktı. http://www.rsdn.ru/article/baseserv/hookdll.xml

İkinci seçenek de bir pencere olduğunu varsayar, ancak GetRawInputBuffer işlevine başvurarak verileri terminali atlayarak alabileceğime dair bir umut vardı.

Kayıt ve bilgi almanın tüm fonksiyonlarını kullanmayı başardım. Yani:
GetRawInputDeviceInfo

GetRawInputDeviceList

GetRegisteredRawInputCihazları

RegisterRawInputDevices

Ancak gerekli olan GetRawInputBuffer işlevi çalışmadı. Tampon boş, içine hiçbir veri alınmadı.


LPDIRECTINPUTDEVICE8 / LPDIRECTINPUT8 arayüzünün bir örneğini nasıl alacağımı bilmediğim için maalesef üçüncü seçenekte de işe yaramadı.


Uzmanlar, ne önerirsiniz?


sorusuna katılıyorum.
 

İlk olarak, bir olayın meydana geldiği hakkında bilgi edinmenin hangi biçimde gerekli olduğuna karar vermek güzel olurdu: doğrudan mı yoksa dolaylı olarak mı?

Kendi DLL'nizi yazmanın dikkate alınmadığı gerçeğinden yola çıkarsak, API'yi reddedebilir miyiz? Dolaylı yöntem uygunsa, o zaman:

Penceredeki ilk görünür çubuğun - WindowFirstVisibleBar (penceredeki çubuk sayısıyla birlikte mümkündür - WindowBarsPerChart) dizinini kontrol eden grafiğe döngülü bir komut dosyası asarız. Önceki değerden farklılarsa, grafikle eylemler gerçekleştirildi. Doğru, bu durumda, neden sadece fare tekerleği olmayabilir (zaman ölçeğini değiştirmek - "+", "-", Ana Sayfa veya Son'a basmak, istenen tarihe doğrudan geçiş).

Her durumda, bir fare tekerleği dönüşü olayının tanımından tam olarak ne istendiğini anlamak için henüz yeterli bilgi yok. Daha sonra yöntemler önerebilirsiniz.

Not: Pencere işleme işlevine erişmeniz gerekiyorsa, bu SetWindowLongPtr'dir (bkz. msdn). Ama DLL olmadan yapamazsınız, çünkü. MQL kodunda bulunan yeni bir mesaj işleme prosedürü atayamazsınız.

 

Fikir, grafiğin kaydırılmasını kontrol etmekti. Ama faut değil....

Hayır, bir tekerlek dönüşü olayı tanımlamanız gerekiyor.

 
Scriptong :

Her durumda, bir fare tekerleği dönüşü olayının tanımından tam olarak ne istendiğini anlamak için henüz yeterli bilgi yok. Daha sonra yöntemler önerebilirsiniz.


tam olarak ne gerekli?

tabii ki listeyi bükün. başka? :)

 

hayır. orada kanca. MQL'de bir fonksiyonun adresinin nasıl alınacağı bilinmiyor.
 
Terminal penceresine müdahale ile özel bir olay işleme prosedürü asın ve hepsi bu.
Bunu kendim yaptım:
- kullanıcı MT penceresini kapatmak için tıklar
- Soruyorum: göstergeyi değiştirdin mi - kaydet? Evet Hayır İptal
İptal edildiğinde kimse bir yere gitmiyor.
Evet, kaydet ve çık, hayır, kaydetme ve çıkma.
İlkel.

Kancaların bununla hiçbir ilgisi yok, gerçekten.

> Bu bir vida DLL'si meselesidir. Kendinizinkini yazmak henüz düşünülmedi.

İyi şanlar...
 
jartmailru :
Terminal penceresine müdahale ile özel bir olay işleme prosedürü asın ve hepsi bu.

bu SetWindowLong hakkında konuşma mı?
 
sergeev :
bu SetWindowLong hakkında konuşma mı?
Evet.
 
sergeev :

tam olarak ne gerekli?

tabii ki listeyi bükün. başka? :)


Liste (CListCtrl) kendi nesnesiyse, sorun nedir? Meta Trader penceresi değil, fare olaylarını alan listedir.

Yoksa MT4 grafik nesnelerine dayalı bir liste mi?

 
Scriptong :


Liste (CListCtrl) kendi nesnesiyse, sorun nedir? Meta Trader penceresi değil, fare olaylarını alan listedir.

Yoksa MT4 grafik nesnelerine dayalı bir liste mi?


Herhangi bir sorun yoksa, lütfen fare üzerinde tekerlek yer değiştirmesinin GERÇEK'inin nasıl belirleneceğini belirtin. Fare işaretçisi MT4 penceresindeyken. Ve çok ilginç :)

Kendi başına, - Windows aracılığıyla.