English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
Özel Grafik Kontrolleri. Kısım 2. Kontrol Kitaplığı

Özel Grafik Kontrolleri. Kısım 2. Kontrol Kitaplığı

MetaTrader 5Örnekler | 9 Aralık 2021, 12:37
47 0
Dmitry Fedoseev
Dmitry Fedoseev

Giriş

"Özel Grafik Kontrolleri" makalesi. Kısım 1. Basit Bir Kontrol Oluşturma", bir program (Uzman Danışman (EA), komut dosyası, gösterge) ve bir kullanıcı arasındaki etkileşimde ortaya çıkan temel sorunları ele almak için kontrol setinin oluşturulduğu grafik kontroller oluşturma ilkelerini belirler.

Bazı kontroller neredeyse tamamen iyi bilinen standart kontrollere karşılık gelirken, diğerleri Terminal özellikleri ve kapasiteleri dikkate alınarak geliştirilmiştir. Tüm kontroller ayrı sınıflar olarak tasarlanmış ve önceki makalede kullanılan IncGUI.mqh dosyasına eklenmiştir (yeni dosya adı IncGUI_v2.mqh’dir).

Eklenen yeni kontrol sınıflarının yanı sıra dosyada başka değişiklikler de vardır: CGraphicObjectShell sınıfı, SetXYDistance(), SetXYSize() koordinatlarının ve boyutlarının aynı anda ayarlanması için yöntemler eklenerek ve bazı yöntem adlarındaki Distance kelimesindeki bir yazım hatası (Distanse olarak yazılmıştır) düzeltilerek değiştirildi.

CInputBox sınıfında, SetValueString() yönteminin adındaki bir yazım hatası düzeltildi (SetValueStrind olarak yazılmıştı) ve SetReadOnly() ve ReadOnly() yöntemleri eklendi. SetReadOnly() yöntemi, metin kutusuna klavye girişini etkinleştirir/devre dışı bırakırken ReadOnly() yöntemi ise klavye girişine izin verilip verilmediğini bulmayı mümkün kılar.

Show() yöntemi kullanılarak görüntülenen renk örneklerinin sırası, CColorSchemes sınıfında değiştirilmiştir; renk şemaları artık beklenenden biraz daha fazla renge sahiptir, bu nedenle şemalar dikey ve renkler yatay olarak düzenlenmiştir. Ayrıca, CColorSchemes sınıfına bazı yeni renk şemaları eklenmiştir.

Bu makale, aşağıdaki kontrolleri içeren bir kitaplık sağlar:

  1. CInputBox (Giriş Kutusu),
  2. CSpinInputBox (Döndür Düğmesi Giriş Kutusu),
  3. CCheckBox (Onay Kutusu),
  4. CRadioGroup (Radyo Düğme Grubu),
  5. CVSсrollBar (Dikey Kaydırma Çubuğu),
  6. CHSсrollBar (Yatay Kaydırma Çubuğu),
  7. CList (Liste),
  8. CListMS (Çoklu Seçim Listesi),
  9. CComBox (Açılır Liste),
  10. CHMenu (Yatay Menü),
  11. CVMenu (Dikey Menü),
  12. CHProgress (Yatay İlerleme Çubuğu),
  13. CDialer (Çevirici),
  14. CDialerInputBox (Giriş Kutulu Çevirici),
  15. CTable (Tablo).

Her kontrole kullanım örnekleri ile bir göz atalım (CInputBox hariç, oldukça detaylı bir incelemesi şu makalede verilmiştir: "Özel Grafik Kontrolleri. Kısım 1. Basit Kontrol Oluşturma").


1. CSpinInputBox Sınıfı

Döndür Düğmesi Giriş Kutusu (Şekil 1).

Şekil 1. CSpinInputBox Sınıfı (Döndür Düğmesi Giriş Kutusu)

Şekil 1. CSpinInputBox Sınıfı (Döndür Düğmesi Giriş Kutusu)

"+" düğmesine tıklandığında metin kutusundaki değer ayar değeri kadar artırılır, benzer şekilde "-" düğmesine tıklandığında da aynı değer azaltılır.

Değerleri döndür düğmeleriyle değiştirmeye ek olarak, metin kutusuna klavye girişini etkinleştirebilirsiniz (SetReadOnly() yöntemi). Bu kontrol, nümerik modda çalışan CInputBox'a dayalıdır ve değer sınırlarını ayarlamak için benzer yöntemlere sahiptir: SetMaxValue(), SetMinValue().

CInputBox'tan farklı olarak, CSpinInputBox sınıfında Init() yöntemi çağrılırken, Digits parametresi yerine, değerdeki değişikliği döndür düğmeleriyle gösteren Change parametresi iletilir. Change parametresinin değeri, metin kutusundaki değerin biçimlendirildiği ondalık basamak sayısını tanımlar. SetValue() ve Value() yöntemlerini kullanarak ayarları programlı olarak yapabilir ve değeri alabilirsiniz. Değerin biçimlendirildiği ondalık basamak sayısı, Digits() yöntemi kullanılarak alınabilir.

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CSpinInputBox.mq5 dosyasında verilmiştir.


2. CCheckBox Sınıfı

Onay Kutusu veya Açma-Kapama Anahtarı (Şekil 2).

Şekil 2. CCheckBox Sınıfı (Onay Kutusu veya Açma-Kapama Anahtarı)

Şekil 2. CCheckBox Sınıfı (Onay Kutusu veya Açma-Kapama Anahtarı)

İki değerden birini alabilen oldukça basit bir kontroldür: açık veya kapalı. "Kapalı" durumda bir kareyi temsil eder. "Açık" durumda, karede bir onay işareti görünür. SetValue() ve Value() yöntemlerini kullanarak ayarları programlı olarak değiştirebilir ve değeri alabilirsiniz.

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CCheckBox.mq5 dosyasında verilmiştir.


3. CRadioGroup Sınıfı

Radyo Düğme Grubu (Şekil 3).

Şekil 3. CRadioGroup Sınıfı (Radyo Düğme Grubu)

Şekil 3. CRadioGroup Sınıfı (Radyo Düğme Grubu)

Radyo Düğme Grubu, çeşitli seçeneklerden birinin seçilmesi için tasarlanmıştır (örneğin, emir türü seçimi). Bu kontrol, diğer kontrollerle aynı şekilde kullanılır - ilk olarak, parametrelerde grup adının belirtilmesiyle Init() yöntemi çağrılır ve ardından düğmeler oluşturulur. Düğmelerin oluşturulması, AddButton() yöntemi kullanılarak gerçekleştirilir.

AddButton() yönteminin ilk parametresi, düğmenin sağında bulunan resim yazısını ve ardından tüm kontrolün koordinatlarına göre X ve Y koordinatlarını tanımlar.

Böylece gruptaki düğmeler herhangi bir sırada düzenlenebilir (sadece yatay veya dikey değil) ve ayrı düğme koordinatlarını yeniden hesaplamadan grup koordinatları değiştirilerek tüm düğme grubu hareket ettirilebilir. AddButton() yöntemi, oluşturmak istediğiniz bir gruptaki düğmelerin sayısı kadar çok çağrılmalıdır.

Düğmeleri oluşturduktan sonra, seçilen düğmenin dizinini gösteren yalnızca bir parametreye sahip olan SetValue() yöntemiyle seçili bir düğme belirtilmelidir; düğmeler, AddButton() yöntemiyle oluşturuldukları sıraya göre sıfırdan itibaren numaralandırılır. Seçilen bir düğmenin dizinini almak için Value() metodu kullanılır.

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CRadioGroup.mq5 dosyasında verilmiştir.


4. CVSсrollBar Sınıfı

Dikey Kaydırma Çubuğu (Şekil 4).

Şekil 4. CVSсrollBar Sınıfı (Dikey Kaydırma Çubuğu)

Şekil 4. CVSсrollBar Sınıfı (Dikey Kaydırma Çubuğu)

Bu iyi bilinen ve yaygın olarak kullanılan bir kontroldür. Dikey kaydırma çubuğunun kendi özellikleri vardır: minimum değer, maksimum değer (kontrol değerlerinin geçerli aralığını tanımlar), küçük değişiklik (yukarı veya aşağı kaydırma düğmesine tıklandığında değer değişikliği), büyük değişiklik (kaydırma düğmesi ve kaydırma kutusu arasındaki alana tıklandığında değer değişikliği).

Kaydırma düğmeleri tıklandığında küçük bir değişiklikle ve kaydırma kutusu ile kaydırma düğmeleri arasındaki alana tıklandığında büyük bir değişiklikle değer değişikliklerine ek olarak, kaydırma kutusunu belirli bir konuma taşımak da mümkündür. Kaydırma kutusunu belirli bir konuma taşımak için, kaydırma kutusunun seçilmesi (renk değişecek) adına buna tıklanması ve ardından gerekli yere tıklanması gerekir - kaydırma kutusu belirtilen yere atlar ve seçimi kaldırılır.

Kaydırma kutusu yanlışlıkla seçilmişse, seçimini kaldırmak için üzerine tekrar tıklamanız gerekir. Kaydırma kutusu seçiliyken kaydırma düğmelerinden birine tıklarsanız, önceki sırasıyla başlangıca veya sona atlayacak ve kontrol maksimum veya minimum değer alacaktır.

Kontrol uygulaması, parametrelerde ad, yükseklik ve koşullu boyut (1'den 4'e kadar) belirlendikten sonra Init() yönteminin çağrılmasıyla başlar.

Değer aralığı daha sonra SetMin(), SetMax() yöntemleri tarafından tanımlanır ve küçük bir değişiklik değeri ve büyük bir değişiklik değeri sırasıyla SetSmallChange() ve SetLargeChange() yöntemleri tarafından ayarlanır. Kontrol değeri (kaydırma kutusu konumu), Value() yöntemi kullanılarak alınır.

Kaydırma kutusu konumu, SetValue() yöntemi kullanılarak programlı olarak değiştirilebilir.

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CVSсrollBar.mq5 dosyasında verilmiştir.


5. CHSсrollBar Sınıfı

Yatay Kaydırma Çubuğu (Şekil 5).

Şekil 5. CHSсrollBar Sınıfı (Yatay Kaydırma Çubuğu)

Şekil 5. CHSсrollBar Sınıfı (Yatay Kaydırma Çubuğu)

Bu kontrol dikey kaydırma çubuğuna mutlak şekilde benzerdir, ancak Init() yöntemini çağırırken belirtilecek ikinci parametre çubuk yüksekliği yerine çubuk genişliğidir.

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CHSсrollBar.mq5 dosyasında verilmiştir.


6. CList Sınıfı

Liste (Şekil 6).

Şekil 6. CList Sınıfı (Liste)

Şekil 6. CList Sınıfı (Liste)

Bu kontrol, liste öğelerini görüntüleyen birkaç metin kutusunu temsil eder. Görünür kutuların sayısı, kontrol başlatma sırasında tanımlanır. Liste öğelerinin sayısı, görünen kutuların sayısını aşarsa, dikey kaydırma çubuğu görünür.

Liste öğelerinden biri seçilebilir (Şekil 6'daki renkli öğe). Öğe seçimiyle ilgili olarak, kontrol iki modda çalışabilir: öğe seçiminin kaldırılmasına izin veren veya izin vermeyen, böylece bu tür modlar SetAllowDeselect() yöntemiyle ayarlanır.

Init() yöntemi çağrılırken kontrol adı, piksel cinsinden genişliği ve öğe sayısındaki yükseklik iletilir.

Init() yönteminin ardından, listeye yeni bir öğe eklemek için AddItem() yöntemi kullanılır. Ardından, gerekirse, seçilen bir öğe SetSelectedIndex() yöntemiyle ayarlanır. Bir öğenin seçimi, SetSelectedIndex() yöntemine -1 değeri iletilerek her zaman programlı olarak kaldırılabilir.

Seçilen bir öğe SelectedIndex() yöntemiyle tanımlanabilir; yöntem -1 değeri verirse, listede seçili öğe yoktur. Ayrıca, seçilen bir öğenin metni SelectedText() yöntemi kullanılarak alınabilir.

Herhangi bir liste öğesinin metnini almak için, öğe dizininin belirtilmesiyle Text() yöntemi kullanılır. Herhangi bir öğe metni SetText() yöntemi kullanılarak değiştirilebilir; DeleteItem() yöntemi öğeyi siler, Clear() yöntemi tüm listeyi temizler.

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CList.mq5 dosyasında verilmiştir.


7. CListMS Sınıfı

Çoklu Seçim Listesi (Şekil 7).

Şekil 7. CListMS Sınıfı (Çoklu Seçim Listesi)

Şekil 7. CListMS Sınıfı (Çoklu Seçim Listesi)

Bu kontrol, bir istisna dışında "Liste" kontrolü ile aynıdır - birden fazla seçili öğenin aynı anda bulunmasına izin verilir. Sonuç olarak, seçilen öğelere erişmenin biraz farklı bir yolu kullanılır.

Basit listeyle uğraşırken, SetSelected() yöntemi, seçilen öğenin dizinini gösteren bir parametre alır (yeni öğe seçilirken, önceki öğenin seçimi kaldırılır); çoklu seçim listesinde, SetSelected() yöntemine iki parametre iletilir: dizin ve öğe durumu (doğru/yanlış - seçili/seçili değil). Öğenin seçili olup olmadığını kontrol etmek için, kontrol edilen öğenin iletilen dizinini alan Selected() yöntemi kullanılır.

FirstSelected() ve NextSelected() yöntemleri, seçili tüm öğeleri işlemek için kullanılır. FirstSelected() yöntemi, ilk seçilen liste öğesinin dizinini verir; NextSelected() yöntemi, FirstSelected() veya NextSelected() yöntemlerinin son çağrısında alınan öğenin dizinini izleyen sonraki seçili öğenin dizinini verir.

Seçilen tüm öğeler arasında yineleme yapmak için aşağıdaki yapı kullanılabilir:

// All selected items iteration
 
int Selected=lstm.FirstSelected();
    while(Selected!=-1){
        //=======================================
        // An action with the selected item        
        // ======================================
       Selected=lstm.NextSelected();
   } 

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CListMS.mq5 dosyasında verilmiştir.


8. CComBox Sınıfı

Açılır Liste (Şekil 8.1).

Şekil 8.1. CComBox Sınıfı (Açılır Liste)

Şekil 8.1. CComBox Sınıfı (Açılır Liste)

Bu kontrol, listenin açılması için tıklanması gereken küçük bir düğmesi olan bir metin kutusunu temsil eder (Şekil 8.2). Listeyi görüntülemek için "Liste" kontrolü kullanılır. Listede seçilen öğenin metni, görünür metin kutusunda görüntülenir.

Bu kontrol iki modda kullanılabilir: birincisi yalnızca listeden seçime izin verir, ikincisi klavye girişine izin verir (mod SetReadOnly() yöntemiyle ayarlanır). Bu nedenle, bu kontrol ve liste arasında bazı farklılıklar vardır.

Klavye kullanılarak girilen değer listedeyse, ilgili liste öğesi seçilecek ve SelectedIndex() yöntemi bu öğenin dizinini verecektir.

Girilen değer listede bulunamazsa, SelectedIndex() yöntemi -1 değerini verir, bu nedenle bu kontrolün değerini almak için görünür metin kutusunun içeriğini veren Value() yöntemi kullanılır, böylece değeri programlı olarak ayarlamak için SetSelectedIndex() yöntemi (öğeye tıklamakla aynı) veya SetValue() yöntemi (klavyeyi kullanarak bir değer girmekle aynı) kullanılabilir.

Şekil 8.2. Genişletilmiş Açılır Liste

Şekil 8.2. Genişletilmiş Açılır Liste

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CComBox.mq5 dosyasında verilmiştir.


9. CHMenu Sınıfı

Yatay Menü (Şekil 9.1).

Şekil 9.1. CHMenu (Yatay Menü)

Şekil 9.1. CHMenu (Yatay Menü)

Bu kontrol, yatay bir sıra halinde düzenlenmiş menü öğeleri olan birkaç metin kutusunu ve yanlardaki düğmeleri temsil eder. Dikey bir çizgiye sahip yan düğmeler, menüyü başına veya sonuna kadar kaydırmak için kullanılır ve ok düğmeleri bir "ekran" (görünür öğe sayısına göre) kaydırmak için kullanılır. Menünün temel amacı, programdaki eylemlerin yürütülmesidir.

Menü öğesine tıklandığında, bir komutun yürütülmesi gereken bir etkinlik oluşturulur. Komutların doğrudan yürütülmesine ek olarak, menü herhangi bir enstrümanı etkinleştirmek/devre dışı bırakmak için kullanılabilir.

Örneğin, Uzman Danışman (EA) bir pozisyonu kapatmak için birkaç seçeneğe sahiptir: 1, 2 ve 3 göstergelerinin kullanılması. Bir kullanıcı, ilk kapanış sinyalini veren göstergeyi kullanarak pozisyonu kapatmak için bir veya tüm seçenekleri veya iki enstrümanın herhangi bir kombinasyonunu etkinleştirebilir.

Aşağıdaki şema önerilir: bir menüye tıklandığında, enstrüman parametrelerini ayarlamak ve enstrümanı etkinleştirmek için bir pencere görüntülenir, böylece kullanıcı parametreleri ayarlar, enstrümanı etkinleştirir ve "Tamam" düğmesine tıklar ve enstrüman çalışmaya başlar.

Şu anda hangi enstrümanların çalıştığını açıkça görmek için öğeyi işaretlemek için bir yöntem (onay işareti) vardır - SetChecked() yöntemi. Menü seçilen öğeleri içeriyorsa, etkinleştirilen etkin öğe gözden kaybolsa bile menüde etkinleştirilmiş enstrümanlar olduğunu netleştirmek için rengi değiştirir. CheckedExist() yöntemi kullanılarak herhangi bir işaretli öğe programlı olarak tanımlanabilir ve Checked() yöntemi kullanılarak belirli bir menü öğesinin işaretlenip işaretlenmediği görülebilir.

Şekil 9.2. İşaretli Öğeli Yatay Menü

Şekil 9.2. İşaretli Öğeli Yatay Menü

Bu kontrolün ve diğer tüm kontrollerin uygulanması, kontrol adının, piksel cinsinden genişliğinin ve görünür öğe sayısının iletildiği Init() yöntemiyle başlar. Öğe eklemek için Init() yönteminin ardından AddItem() yöntemi kullanılır.

Bu kontrol, komutlarına yanıt olarak diğer kontrollerin görüntülenmesini gerektirdiği için, tıklanan menü öğesinin koordinatlarını alma yöntemlerine, öğenin bulunduğu ekran çeyreğini alma yöntemine ve görüntülenen kontrolü uygun bir ekran çeyreğine yerleştirmek için öğe genişliğini alma yöntemine sahiptir.

Koordinatları almak için LastClickedX() ve LastClickedY() yöntemleri kullanılır, çeyreği almak için LastClickedQuarter() yöntemi kullanılır (değer 1 - sol üst köşe, 2 - sağ üst köşe, 3 - sol alt köşe, 4 - sağ alt köşe), LastClickedW() yöntemi, öğe genişliğini alır.

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CHMenu.mq5 dosyasında verilmiştir.


10. CVMenu Sınıfı

Dikey Menü (Şekil 10).

Şekil 10. CVMenu Sınıfı (Dikey Menü)

Şekil 10. CVMenu Sınıfı (Dikey Menü)

Bu kontrol, öğelerinin dikey olarak düzenlenmesi ve kaydırmak için dikey bir kaydırma çubuğu kullanılması dışında amacı, fonksiyonları ve kullanımı açısından yatay menü ile tamamen aynıdır. Ancak bir fark vardır - öğe genişliğini elde etmek için yatay menüde kullanılan LastClickedW() yöntemi yerine, burada öğe yüksekliğini tanımlamak için ItemHeight() yöntemi kullanılır.

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CVMenu.mq5 dosyasında verilmiştir.


11. CHProgress Sınıfı

Yatay İlerleme Çubuğu (Şekil 11).

Şekil 11. CHProgress Sınıfı (Yatay İlerleme Çubuğu)

Şekil 11. CHProgress (Yatay İlerleme Çubuğu)

Bu kontrol, bir görevin ilerlemesini yüzde biçiminde kontrol etmek için tasarlanmıştır. Örneğin, araştırma için grafikteki her çubuk için karmaşık, zaman alıcı bir hesaplama yapmak gerekir. Görevin ne ölçüde gerçekleştirildiğini, zamanınızı önceden planlamak için performansın sonuna kadar kalan süreyi veya en azından programın hala çalıştığını ve donmadığını bilmek ilginç olacaktır. İlerleme çubuğunun sol kısmı performans yüzdesini, sağ kısım ise tahmini tamamlanma süresini gösterir.

Init() yöntemi çağrılırken, buna iki parametre iletilir: ad ve piksel cinsinde genişlik. Kontrollü döngüye girmeden hemen önce, döngü parametrelerini alan Begin() yönteminin çağrılması gerekir: minimum değer ve maksimum değer. Döngünün içinde SetValue() yöntemi, ilerleme çubuğu tarafından görüntülenen değeri ayarlar. Döngüden çıkıldığında Reset() yöntemi, ilerleme çubuğunu orijinal biçimine sıfırlar.

SetValue() yönteminin her çağrısı, grafik nesnelerin yeniden çizilmesini gerektirir, bu nedenle ilerleme çubuğunun kullanımı, bilgisayar kaynaklarının ana tüketicisi haline gelebilir ve döngü çalışma süresini ilerleme çubuğunun kullanımının verimsiz hale geldiği noktaya kadar önemli ölçüde artırabilir. Ve bu durumda kontrol, saniye cinsinden yenileme aralığı değerinin iletildiği SetRefreshInterval() yöntemine sahiptir.

Yenileme aralığı ayarlandığında, her çağrıda SetValue() yöntemi ilk olarak kontrolün son yenileme zamanını kontrol edecek ve ancak bu sürenin ayarlanan aralığı aşması durumunda hesaplama yapılacak ve ilerleme çubuğu yeniden çizilecektir.

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CHProgress.mq5 dosyasında verilmiştir.


12. CDialer Sınıfı

Çevirici (Şekil 12).

Şekil 12. CDialer Sınıfı (Çevirici)

Şekil 12. CDialer Sınıfı (Çevirici)

Bu kontrol, CDialerInputBox sınıfı içinde kullanılmak üzere tasarlanmıştır, ancak bağımsız olarak da kullanılabilir.

Örneğin, herhangi bir düğmeye basıldığında kontrol görünür hale gelir; kullanıcı bir değeri çevirir, "Tamam" düğmesine basar ve ardından program Value() yöntemi tarafından alınan değeri kullanır; bu, temel olarak, Giriş Kutulu Çevirici kontrolünde yapılan şeydir, burada son girilen değerin her zaman yanında çeviriciyi genişleten düğmenin bulunduğu metin kutusunda görüntülenir.

Bir parametre - ad - Init() yöntemine iletilir.

Düğmeler: "X" - değer değiştirmeden çeviriciyi kapatır, “C” - girilen değeri sıfırlar, "Tamam" - girilen değeri kullanır, sayı düğmelerinin kullanımı açıktır, ondalık nokta - bir sayının ondalık kısmını girer, "-" düğmesi - bir sayının işaretini değiştirir (pozitif / negatif). Girilen numaralar, çeviricinin altındaki metin kutusunda görüntülenir.

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CDialer.mq5 dosyasında verilmiştir.


13. CDialerInputBox Sınıfı

Giriş Kutulu Çevirici (Şekil 13).

Şekil 13. CDialerInputBox Sınıfı (Giriş Kutulu Çevirici)

Şekil 13. CDialerInputBox Sınıfı (Giriş Kutulu Çevirici)

Bu kontrol, Giriş Kutusu ve Çevirici kontrollerini temel alır ve yanında bulunan çeviriciyi genişletmek için bir düğmeye sahip bir metin kutusunu temsil eder. Kontrol iki modda çalışabilir: sadece çevirici yoluyla giriş ve buna ek olarak klavye girişi.

SetReadOnly() yöntemi, klavye girişini etkinleştirir/devre dışı bırakır.

Init() yöntemine dört parametre iletilir: ad, piksel cinsinden genişlik, değerin görüntülenmek üzere biçimlendirileceği ondalık basamak sayısı ve kontrolün yanında görüntülenen resim yazısı.

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CDialerInputBox.mq5 dosyasında verilmiştir.


14. CTable Sınıfı

Tablo (Şekil 14).

Şekil 14. CTable Sınıfı (Tablo)

Şekil 14. CTable Sınıfı (Tablo)

Kontrol adı her şeyi söylemektedir - bu, veri tablolarını görüntülemek için tasarlanmıştır.

Init() yöntemine üç parametre iletilir: ad, piksel cinsinden genişlik ve yükseklik. Gerçek tablo boyutu, satırların, sütunların ve bunların boyutlarının sayısıyla tanımlanır, ancak Init() çağrısında belirtilen boyut değerlerini aşamaz. Gerçek tablo boyutu, Init() çağrısında belirtilen boyut değerlerini aşarsa, kaydırma çubukları görüntülenir.

Kullanım. Init() yöntemiyle tablonun başlatılmasının ardından, tablo sütunlarının sayısı SetCollsCount() yöntemiyle ve satır sayısı SetRowsCount() yöntemiyle tanımlanır. SetRowsCount() yöntemi yerine AddRow() yöntemi kullanılabilir; her çağrıldığında tabloya bir satır eklenir. Tablo boyutu (sütun ve satır sayısı) tanımlandıktan sonra hücreler değerlerle doldurulabilir.

Hücre değerlerini doldurmak için SetCellText() yöntemi kullanılır. Hücre metnine ek olarak, diğer tüm hücre özellikleri de değiştirilebilir: arka plan rengi, metin rengi, yazı tipi boyutu, yazı tipi (SetCellBGColor(), SetCellTxtColor(), SetCellFontSize(), SetCellFont() yöntemleri). Satır yüksekliği SetRowHeight() yöntemi kullanılarak değiştirilebilir, sütun genişliği SetCollWidth() yöntemi ile değiştirilebilir.

SetCellsMerge() yöntemi, birden çok hücreyi bir hücrede birleştirmek için kullanılır ve dört parametreye sahiptir: satır dizini, sütun dizini, RowSpan ve CollSpan parametreleri (HTML'deki RowSpan ve CollSpan özelliklerine benzer).

RowSpan parametresi dikey olarak birleştirilen hücre sayısını, CollSpan parametresi ise yatay olarak birleştirilen hücre sayısını tanımlar. Birleştirilmiş hücreler, RowSpan ve CollSpan değerlerinin 1'e eşit olarak ayarlanması yoluyla geri yüklenebilir.

Görüntüleme kolaylığı açısından tablonun artı işareti fonksiyonu vardır. Bir hücreye tıklandığında, bu hücrenin sütunu ve satırı farklı bir renkle vurgulanır. Aynı satıra başka bir tıklama ile standart bir tablo rengi (ve ayrıca standart kaydırma çubuğu rengi) geri döner. Artı işareti fonksiyonu, SetAllowSelection() yöntemiyle etkinleştirilir/devre dışı bırakılır. LastClickedRow() ve LastClickedColl() yöntemleri, tıklanan hücrenin tanımlanmasına yardımcı olur.

HTML() yöntemi, tarayıcıda daha fazla görüntülenmek üzere html dosyasına kaydedilecek tablonun HTML kodunu almak için kullanılır. Ancak bu yöntem ayrıca kontrolü görüntülemek zorunda kalmadan sadece tablonun html kodunu almak için de kullanılabilir.

Bu kontrolü kullanmanın bir örneği, eklenen eIncGUI_v2_Test_CTable.mq5 dosyasında verilmiştir.


Sonuç

Bu makalede incelenen kontrol seti, muhtemelen bir program ile kullanıcı arasındaki etkileşimde ortaya çıkan tüm sorunlara çözüm getirmeyecektir, ancak yine de bunların en yaygın olanlarını tamamen kapsayacaktır:

  • Onay kutusunu kullanarak etkinleştirme/devre dışı bırakma;
  • Radyo düğmelerini ve listeleri kullanarak farklı seçeneklerin seçilmesi;
  • Hızlı ve kolay değer girişi için birkaç seçenek (klavye girişi, döndür düğmesi girişi, çevirici girişi);
  • Verilerin görsel temsil araçları - yine listeler ve tablo.

Bu kontrollerin yetersiz olabileceği durumlarda, bunlardan bazıları, eldeki soruna daha uygun olacak diğer kontrolleri geliştirmek için bileşenler olarak kullanılabilir. Her neyse, sağlanan kontrollerin çok faydalı olacağını umuyorum.


Ek

Eklenen Dosyaların Listesi:

  1. IncGUI_v2.mqh, CGraphicObjectShell, CWorkPiece, CColorSchemes, CInputBox sınıfları ve bu makalede belirtilen tüm kontrol sınıfları ile bir içerme dosyasıdır. Dosya, Terminal Veri Klasörünün MQL5/Include klasörüne yerleştirilmelidir.
  2. eIncGUI_v2_Test_CSpinInputBox.mq5 - CSpinInputBox sınıfı kullanımının bir örneği. Bu ve sonraki tüm dosyalar (2'den 16'ya kadar) MQL5/Experts klasörüne yerleştirilmelidir.
  3. eIncGUI_v2_Test_CCheckBox.mq5 - CCheckBox sınıfı kullanımının bir örneği.
  4. eIncGUI_v2_Test_CRadioGroup.mq5 - CRadioGroup sınıfı kullanımının bir örneği.
  5. eIncGUI_v2_Test_CVSсrollBar.mq5 - CVSсrollBar sınıfı kullanımının bir örneği.
  6. eIncGUI_v2_Test_CHSсrollBar.mq5 - CHSсrollBar sınıfı kullanımının bir örneği.
  7. eIncGUI_v2_Test_CList.mq5 - CList sınıfı kullanımının bir örneği.
  8. eIncGUI_v2_Test_CListMS.mq5 - CListMS sınıfı kullanımının bir örneği.
  9. eIncGUI_v2_Test_CComBox.mq5 - CComBox sınıfı kullanımının bir örneği.
  10. eIncGUI_v2_Test_CHMenu.mq5 - CHMenu sınıfı kullanımının bir örneği.
  11. eIncGUI_v2_Test_CVMenu.mq5 - CVMenu sınıfı kullanımının bir örneği.
  12. eIncGUI_v2_Test_CHProgress.mq5 - CHProgress sınıfı kullanımının bir örneği.
  13. eIncGUI_v2_Test_CDialer.mq5 - CDialer sınıfı kullanımının bir örneği.
  14. eIncGUI_v2_Test_CDialerInputBox.mq5 - CDialerInputBox sınıfı kullanımının bir örneği.
  15. eIncGUI_v2_Test_CTable.mq5 - CTable sınıfı kullanımının bir örneği.
  16. eIncGUI_v2_Test_All, tüm kontrollerin tek bir Uzman Danışmanda (EA) oluşturulmasını sağlar.

MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/313

Özel Grafik Kontrolleri. Kısım 3. Formlar Özel Grafik Kontrolleri. Kısım 3. Formlar
Bu, grafik kontrollere ayrılmış üç makalenin sonuncusudur. Ana grafik arayüz bileşeninin - form - oluşturulmasını ve diğer kontrollerle birlikte kullanımını kapsar. Kontrol kitaplığına form sınıflarının yanı sıra CFrame, CButton, CLabel sınıfları eklenmiştir.
Özel Grafik Kontrolleri. Kısım 1: Basit Kontrol Oluşturma Özel Grafik Kontrolleri. Kısım 1: Basit Kontrol Oluşturma
Bu makalede grafik kontrollerinin geliştirilmesine ilişkin genel ilkeler ele alınacaktır. Grafik nesnelerle hızlı ve kullanışlı bir çalışma için araçlar hazırlayacağız, metin veya nümerik verilerin girilmesi için basit bir kontrol oluşturma örneğini ve bunu kullanma yollarını analiz edeceğiz.
MQL5 Cloud Network ile Hesaplamaları Hızlandırın MQL5 Cloud Network ile Hesaplamaları Hızlandırın
Ana bilgisayarınızda kaç çekirdek var? Bir alım satım stratejisini optimize etmek için kaç bilgisayar kullanabilirsiniz? Burada, bir fare tıklamasıyla dünya çapında bilgi işlem gücünü alarak hesaplamaları hızlandırmak için MQL5 Cloud Network’ün nasıl kullanılacağını gösteriyoruz. "Vakit nakittir" ifadesi her geçen yıl daha da güncel hale geliyor ve önemli hesaplamalar için onlarca saat hatta günlerce beklemeyi göze alamayız.
MQL5 Sihirbazı: Yeni Sürüm MQL5 Sihirbazı: Yeni Sürüm
Bu makale, güncellenmiş MQL5 Sihirbazı'nda bulunan yeni özelliklerin açıklamalarını içerir. Değiştirilmiş sinyal mimarisi, çeşitli piyasa modellerinin kombinasyonuna dayalı alım satım robotları oluşturmayı mümkün kılar. Makalede yer alan örnek, bir Uzman Danışmanın etkileşimli şekilde oluşturulma prosedürünü açıklamaktadır.