Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
12.Kaydırıcının ve düğmeli alanındeğer sınırlarını programlı olarak elde etme/ayarlama(_V_MIN, _V_MAX, _V_STEP, _DIGITS).
1. Yukarıdaki parametrelere sahip elemanları içeren bir pencere açalım:
2. V_MIN, _V_MAX, _V_STEP, _DIGITS değerlerini yazalım ve günlüğe çıktı olarak verelim:
Sonuç: kaydırıcı parametre özelliklerinin değerleri günlüğe kaydedilir.
//---------------------------------------------------------------------------------------------------------------------------------------
3. İşlemi düğmeli alan ile tekrarlayalım. Kaydırıcıdan farklı olarak, alanın başka sayı sınırları vardır ve değer türü çifttir.
Sonuç:Düğmeli alanın parametre özelliklerinin değerleri günlükte görüntülenir.
//---------------------------------------------------------------------------------------------------------------------------------------
4. Kaydırıcı aralığının diğer sınırlarını ayarlayın (ilk kez test edildi, sonuç bilinmiyor).
Sonuç: *Negatif sayılarda aralıkla ilgili birsorun bulundu(sonraki sürümde düzeltilecek).
Pozitif aralık sınırları ile kontrol edelim:
Sonuç: aralık sınırları başarıyla değiştirildi.
Ana nokta: Kaydırıcının aralığı işlevi kullanılarak değiştirilebilir.
**Önemli:Parametre değer türünü geriye dönük olarak int'ten double'a veya tam tersine değiştiremezsiniz.
//-------------------------------------------------------------------------------------------------
Benzer bir deneyi giriş alanı ile gerçekleştirelim:
Sonuç: İstenildiği gibi çalışıyor. Düğmeli alan belirtilen aralığı ve adımı kabul eder. Aralık aşılırsa, günlüğe bir hata bildirir.
//--------------------------------------------------------------------------------------------------
5. Son olarak, value_DIGITS değerini düğmelerin bulunduğu alana ayarlayalım (parametre türü int olduğu için kaydırıcı çalışmayacaktır):
Sonuç:
Sonuçlar:
Bu konu burada sona ermektedir.
13. Elemanların durumunu sorgulama _GET_STATE.
Genellikle, arayüzün bir veya başka bir elemanının durumunu programlı olarak almanın gerekli olduğu durumlar vardır. Bu sorunu çözmek için _GET_STATE tanımlayıcısı oluşturulur.
//--------------------------------------------------------------------------------------------------------------------
*Önemli: İstek_GET_STATE olduğunda, fonksiyon elemanın mevcut durumunun indeksini döndürür.
//--------------------------------------------------------------------------------------------------------------------
Aşağıdaki resim eleman durumlarının listesini göstermektedir.
1. durum tanımlayıcıları :
(*birsonraki sürümde v_öneki s_ öneki ile değiştirilecektir )
İndeksler günlüğe çıktı verir:
Eleman durumlarını sorgulamayı ve almayı test edelim:
1. Pencereyi açın ve "Başlat" düğmesinin ilk durumunu alın:
Sonuç:v_NEUTRAL_STATE durumuna karşılık gelen 15 değeri elde edilir.
2. Düğmenin basma ve bırakma durumlarını kaydedelim:
Bunu yapmak için:
Sonuç: basıldı/bırakıldı olayında, mevcut durum indeksi günlüğe yazdırılır.
Hatırlatma:
//----------------------------------------------------------------------------------------------------------------
3. Sorguyu onay kutusu ile tekrarlayalım.
1. Pencerenin açılması durumunda onay kutusunun durumunu alalım:
Sonuç: v_NEUTRAL_STATE nötr durumuna (onay kutusunun olduğu yer) karşılık gelen 15 değeri elde edilir.
2. Ardından, basma ve bırakma olayında onay kutusunun durumlarını sorgulayalım.
Bunu yapmak için:
Sonuç: 66 (v_NEUTRAL_HIGHLIGHTED) ve 67 (v_ACTIVATED_HIGHLIGHTED)değerlerini alırız , bu da vurgulanmış nötr ve vurgulanmış basılı durum anlamına gelir.
//-----------------------------------------------------------------------------------------------
Bu, konunun ilk bölümünü tamamlamaktadır.
İkinci bölümde, D_LIST açılır listesinin, H_SLIDER kaydırıcısının ve S_EDIT ve EDIT giriş alanlarının durumlarını döndüreceğiz.
13. Durum isteği _GET_STATE.
Bölüm 2: D_LIST, H_SLIDER, EDIT, S_EDIT öğelerinin durumlarını alma .
Son bölümde, BUTTON düğmesinin ve CHECKBOX onay kutusunun durumlarını programatik olarak döndürmeyi inceledik. _GET_STATE sorgusu kullanıldı ve fonksiyonlar tarafından döndürülen durum adlarının listesi gösterildi. Her biri v_ önekiyle başlayan toplam altı ad vardır. ( Değerin kısaltması olup, s_ ile değiştirilecektir - durumun kısaltması ).
Durum endekslerini hatırlayın:
Bu durumda, belirli indeks numaraları önemli değildir. Kullanıcı belirli bir durumu bir koşula koyması gerektiğinde, bir tanımlayıcı kullanır.
Örnek 1:
Örnek 2:
//-----------------------------------------------------------------------------------------------------------------
*Çok önemli:
v_NEUTRAL_STATE ile v_NEUTRAL_HIGHLIGHTED durumları arasındaki ve v_ACTIVATED_STATE ile v_ACTIVATED_HIGHLIGHTED arasındaki temel farkı açıklayayım:
v_NEUTRAL_STATE - это нейтральное состояние в котором элемент находится неопределенное время. v_NEUTRAL_HIGHLIGHTED - это нейтральное состояние в которое элемент перешел ТОЛЬКО ЧТО, после отжатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED.aynı durum etkinleştirilmiş durum için de geçerlidir:
v_ACTIVATED_STATE - это активированное состояние в котором элемент находится неопределенное время. v_ACTIVATED_HIGHLIGHTED - это активированное состояние в которое элемент перешел ТОЛЬКО ЧТО, после нажатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED.Bu fark büyük bir fark yaratır.
Şu anda, düğme ve diğer bazı öğeler, yalnızca v_NEUTRAL_STATE ve v_ACTIVATED_STATE döndürmekte ve bir onay kutusu gibi HIGHLIGHTED durumlarını döndürmemektedir. Bu, kullanıcının öğelerin şu anda mı yoksa belirsiz bir süre önce mi tıklandığını/işaretinin kaldırıldığını bilmesinin mümkün olmadığı anlamına gelir. Ancak, kullanıcı API dosyasında basıldıkları anı yakalayabilir. Evet, ancak bu özellik henüz programın geri kalanında mevcut değil. Bir sonraki sürümde, tüm interaktif öğelere VURGULU durum dönüşü eklenecektir. Bu şekilde, kullanıcı programın herhangi bir yerinden, bir öğeye yeni basılıp basılmadığını veya uzun süredir o durumda olup olmadığını bilebilecek.
//----------------------------------------------------------------------------------------------------------
Şimdi pratik kısma geçelim:
1. Pencereleri açın:
2. Elemanların durumlarını alalım:
Sonuç: D_LISTcnome'unun tüm elemanları durum indeksi 15 'e sahiptir (nötr durum v_NEUTRAL_STATE). D_LIST bir hata döndürdü (-1).
Sebep: Bu elemanın durumlarının geri dönüşü merkezi fonksiyonda belirtilmemiştir. Teknik kusur.Bir sonraki sürümde düzeltilecektir.
D_LIST fonksiyonu henüz durum indeksini döndürmediğinden, durumları başarıyla alınan üç öğeye odaklanalım: EDIT , S_EDIT ve H_SLIDER.
Ne kontrol edilmeli:
EDIT, S_EDIT ve H_SLIDER eleman fonksiyonlarının pencere açıldığında nötr durumun bir indeksini döndürdüğünü doğruladık. Geriye diğer durumları kontrol etmek kalıyor. Bu tür elemanlar teorik olarak sadece nötr, kilitli ve vurgulu durumda olabileceğinden (daha fazla duruma sahip olan düğmeler ve onay kutularının aksine), şu iki olası durumu kontrol etmemiz gerekir: kilitli ve vurgulu. Ayrıca, karışıklığı önlemek için henüz eklemek istemediğim bir grup"imleç altında" durumu da var. Sonraki sürümlerde, her bir öğe türünün olası durumlarının ayrı bir listesini açan özel bir önek oluşturacağım. Bu programatik çalışmayı kolaylaştıracaktır.
Engellenen ve vurgulananEDIT, S_EDIT ve H_SLIDER durumlarının geri dönüşünü nasıl kontrol edeceğiz:
1. API dosyasında "Bir seçenek belirle" onay kutusunu bulun veEDIT, S_EDIT ve H_SLIDER öğelerininkilitlenmesini/kilidinin açılmasını kutunun içine yazın.Ardından, Print() ile durumların çıktısını alın.
Sonuç:
//--------------------------------------------------------------------------------------------------
2. İkinci görev:
Başlarken:
Sonuç
//-----------------------------------------------------------------------------------------------------
Sonuçlar:
Genel olarak sonuçlar tatmin edici olarak değerlendirilebilir. Elemanlar amaçlandığı gibi nötr ve kilitli durumların endekslerini döndürmektedir. Ancak bazı eksiklikler bulunmaktadır:
Sonuçlar:
Potansiyel olarak, yeni eleman durumları eklemek mümkündür. Örneğin, Nötrsivri ve Aktif sivri ( imleç altında nötr ve imleç altındaaktif), ancak pratiklik ve kullanıcının bu özelliklere sahip olması için gerçek ihtiyaç sorunu vardır. Bu tür gereksinimler alınmayana kadar yeni durumlar eklemeyeceğim.
Bu konu buradasona eriyor.
Ayrıca, aşağıdaki konulara.
Geçen haftayı WinForm kullanarak nasıl bir arayüz yazacağımı ve bunu MT5 grafiklerine nasıl yerleştireceğimi araştırarak geçirdim. Bugün sonunda bunu gerçekleştirdim.
Dikkate alınması gereken konuların genel bir listesi:
1. Intellisense listesinde yönlendirme ve doğru pencerenin işlevini seçme.
2. Pencereleri programlı olarak açma ve kapatma.
3. Programlı olarak kullanılabilen pencere öğelerinin bir listesini açma.
4. Bireysel eleman özelliklerinin bir listesini açma.
5. Eleman ve pencere sarmalayıcı fonksiyonunun adını ayrıştırma.
6. Bir eleman parametresinin değerini kendi türündeki bir değişkene döndürme.
7. Farklı türlerdeki eleman parametrelerine değer ayarlama.
8. Farklı elemanların parametreleri arasında değer döndürme, değiştirme ve iletme. Farklı eleman ve değer türlerini göz önünde bulundurun ve farklı pencerelerdeki farklı eleman türleri arasında iletimi test edin.
9. Önceki değeri döndürme (_V_LAST). Son değerin ne zaman ve hangi durumlar için gerekli olduğu (mevcut değerle karıştırılmamalıdır).
10. Farklı eleman tipleri için ON, OFF, LOCK_ON, LOCK_OFF, LOCK, UNLOCK durumlarının ayarlanması için test.
11. Elemanların değişen değerlerinin bağlanması ve senkronizasyonunun test edilmesi: örneğin düğmeler ve kaydırıcı ile giriş alanı. Böylece bir elemanın (manuel veya yazılım) değeri değiştiğinde, ikinci elemandaki değer de buna göre değişir.
12. Kaydırıcının ve düğmeli alanın aralık sınırlarının yazılım tarafından elde edilmesi/ayarlanmasının test edilmesi ( _V_MIN, _V_MAX, _V_STEP, _DIGITS özellikleri).
13. Öğe durum sorgusunun (_GET_STATE) çalışmasının test edilmesi.
14. Metin ve kenarlık renklerinin aralıklı değer sınırlarına bağlanması.
15. API dosyasında yönlendirme.
16.Mesaj ve uyarı pencerelerinin görünümünün basit program mantığının uygulanması.
//------------------------------------------
Dikkate alınan konular sarı renkle vurgulanmıştır.
Şu an için değerlendirilecek bazı konular kalmıştır:
14. Metin ve çerçeve renklerinin aralıklı değer sınırlarına bağlanması.
15. API dosyasında yönlendirme.
16.Mesaj ve uyarı pencerelerinin görünümüne ilişkin basit program mantığının uygulanması.
//------------------------------------------
Konu 14 ile konu 16 arasında bağlantı kurulmasını öneriyorum. Parametre değerlerinin ayarlanan sınırlarının dışına çıkılması, önce elemanların parçalarının renginin değişmesi (metin, taban, çerçeve, şerit vb.), ardından bir diyalog penceresi ve ardından bir uyarı penceresi açılması şeklinde sinyallere neden olacaktır. Aynı zamanda, uyarı penceresi, kullanıcı tarafından manuel olarak kapatılana kadar öğelerdeki değer değişikliklerini engelleyecektir.
Ayrıca, listeye bir tema eklemek istiyorum:
17. Kullanıcı "İptal" düğmesine tıkladığında girilen ayarların iptal edilmesi.
Uzun zaman önce, "İptal" düğmesine tıklayarak kullanıcı ayarlarını iptal etme teknolojisi geliştirildi ve bir dereceye kadar test edildi. Şu anda, eski işlevselliğin ne kadar çalıştığı bilinmemektedir. Bu nedenle, bir test gereklidir.
Konuların çakışmasının bir sonucu olarak, inceleme sırası aşağıdaki gibi olacaktır:
14. Kademeli parametre sınırı korumasının uygulanması:
15. Yeni API dosyası çıktısını ayrıntılı olarak ele alalım.
//----------------------------------------------------------------------------------------------------
Daha sonra, bulunan tüm hataları veya kusurları toplayacağım ve bir sonraki sürüm için bir görev listesi yapacağım.
Düzeltmeler ve eklemeler içeren bir sonraki sürümden sonra, motorun daha da geliştirilmesinin ana yönlerinden birini gördüğüm tablolara odaklanacağım.
Geçen haftayı WinForm kullanarak bir arayüz yazmayı ve bunu MT5 grafiklerine nasıl yerleştireceğimi öğrenerek geçirdim. Bugün nihayet nasıl yapacağımı buldum.
Peki arayüzün programlama kodunuzla iletişim kurmasını nasıl sağlayacaksınız?