MQL ile yazılmış kullanıcı arayüzleri galerisi - sayfa 61

 
hini #:
Çünkü test cihazında OnChartEvent'i çağırmıyor

Oldukça doğru. Ancak MT4'te aynı durumda olası varyantlar vardı. Bunlardan birini başarıyla uyguladım. Arayüz, normal modda çalışan bir Uzman Danışman için çalıştı, ancak test cihazında çalışan kopyasını kontrol edebiliyordu. Bağlantı kaynaklar aracılığıyla gerçekleştirildi. Grafikteki EA, test işlemi sırasında tüm verileri aldı. MT5 ile belki de durum daha karmaşıktır. İki kopya arasında kaynaklar üzerinden "iletişim" kurmanın mümkün olacağından emin değilim. Bu konu ayrı bir çalışma gerektiriyor.

 
Bir sonraki konuya geçelim:

4. Tek tek öğe özelliklerinin listelerinde gezinme.

//-----------------------------------------------------------------------------------------

Size dikkate almanız gereken konuların listesini hatırlatmama izin verin:

1. Intellisense listesinde yönlendirme ve doğru pencerenin işlevini seçme.

2. Pencereleri programlı olarak açma ve kapatma.

3. Intellisense listesinde yönlendirme ve doğru pencerede doğru öğeyi seçme.

4. Bireysel eleman özelliklerinin listelerinde gezinme.

5. Bir öğenin ve pencere sarmalayıcı işlevinin adını ayrıştırma.

6. Seçilen bir öğenin parametre değerini kendi türündeki bir değişkenedöndürme. Birkaç farklı öğenin üç türünü düşünün.

7. Farklı tipteki elemanların parametrelerinde değerlerin ayarlanması. Değerlerin bu elemanların arayüz pencerelerinde nasıl görüneceğini görelim.

8. Bir elemanın parametre değerlerini döndürmek, bu değeri değiştirmek ve başka bir elemanailetmek. Farklı tipte elemanlar ve değerler düşünün ve farklı tipteki elemanlar arasındaki iletimi farklı pencerelerde 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 türleri için ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK durumlarının ayarını test edin.

11. Farklı türlerdeki öğelerin değer değişikliklerini birbirine bağlamayı ve senkronize etmeyi deneyelim: örneğin, düğmeler ve kaydırıcı ile giriş alanı. Bir elemanın (manuel veya yazılım) değeri değiştiğinde, ikinci elemandaki değerin de buna uygun olarak değiştiğini varsayalım.

12. Kaydırıcının ve düğmeli giriş alanının aralık sınırlarını sarmalayıcı işlevler aracılığıyla programlı olarak sıfırlamayı deneyelim. Bunu test edecek zamanım olmadı ama içimden bir ses çalışacağını söylüyor. Yine de bir bakalım.

13. Sarmalayıcı fonksiyonlar aracılığıyla eleman durumlarını döndürmeyi deneyelim. İşlevselliğe dahil edildi, ancak test etmek için zamanım olmadı. Göreceğiz bakalım... Sonuç bilinmiyor.

14. Metin ve eleman tabanları için renkleri alalım ve ayarlayalım. Bu renkleri bazı basit olaylar veya değer sınırları ile ilişkilendirmeyi deneyebiliriz.

15. Yeni API dosyası çıktısında nasıl gezineceğiniz ve okuyacağınız hakkında daha fazla bilgi vereceğim.

//------------------------------------------

Sarı renk, daha önce işlenmiş olan konuları gösterir.

 
Konuyu madde madde inceleyelim:

  • Unsurların "ilişkisine" dayalı olarak özellikleri listelere ayırma konsepti başarıyla uygulanmıştır.
  • Uygulama sonucunda, tüm eleman türleri için 7 benzersiz özellik listesi oluşturulmuştur.
  • Her listeye özel bir tanımlayıcı atanır. Bu, p ön eki (mülkün kısaltması) ve bir seri numarasıdır.
  • Sonuç olarak, her liste intellisense'de yedi önekle bulunabilir: p1, p2, p3, p4, p5, p6 ve p7.
  • Kolaylık sağlamak ve karışıklığı önlemek için, özellik listelerinin önekleri sarmalayıcı işlevlerin adlarına basılmıştır:

  • Önek girildiğinde, tek tek özelliklerin bir listesi görünür. "Bireysel" kelimesini bilerek vurguladım, çünkü bu nokta kilit öneme sahiptir.
  • Özellik değerlerini döndürmek ve ayarlamak için, sarmalayıcı işlevler özellik adlarını SADECE kendi adlarında yazılı önek ile kabul eder:


//--------------------------------------------------------------------------------------------------------------


  • Listedeki SADECE bu özellikler onay kutusu için kullanılabilir. Ancak, listenin kendisi sadece onay kutusuna değil, aynı zamanda diğer bazı öğelere de aittir.

//--------------------------------------------------------------------------------------------------------------


  • C_LIST elemanının listesinde henüz özel bir özellik yoktur. Yalnızca sarmalayıcı tarafından gerçekleştirilebilecek eylemler (V_LAST - son değeri döndürmek dışında).

//--------------------------------------------------------------------------------------------------------------


  • C_LIST'in aksine, kaydırıcı geniş bir kullanılabilir özellikler ve eylemler listesine sahiptir.

//--------------------------------------------------------------------------------------------------------------


  • S_EDIT öğesine ait çok çeşitli kullanılabilir özellikler ve eylemler vardır:


Vurgular eklenmiştir:

Her sarmalayıcı işlev, yalnızca adında belirtilen ön eke sahip özellikleri kabul eder.


Listelerle çalışmak pratikte bu şekilde görünür(sonuna parantez koyun, çünkü intellisense sarmalayıcı işlevlerin parantezleri içinde çalışmaz):

Gif biraz hızlandırılmıştır.


Gif'te gösterilen çağrıların sonucunda, sarmalayıcı işlevler belirtilen özelliklerin değerlerini döndürür.

Çağırmadan önce, özelliğin değerini veya fonksiyonun yürütülmesinin sonucunu saklamak için bir değişken bildirmeniz gerekir. Bu konuda daha fazla bilgi için aşağıdaki konularabakın.

 

5.
Eleman ve pencere sarmalayıcı işlevinin adını ayrıştırma:


1. Öğe sarmalayıcı işlev adı:

EDIT metin giriş alanı öğesi işlev örneğine bakalım: w7_s_p4_EDIT_Comment_1();

//-------------------------------------------------------------

  • w7 - 7 numaralı pencere

//-------------------------------------------------------------
  • s - Bu sarmalayıcı fonksiyonun dönüş değeri tipi string.

//-------------------------------------------------------------
  • p4 - Bu eleman tipinin özellik listesinin ön eki.

/ / - ------------------------------------------------------------
  • EDIT - Eleman türü.

//-------------------------------------------------------------

  • Comment_1 - Belirli bir öğenin adı .

//-------------------------------------------------------------


2. Pencere sarmalayıcı işlevinin adı:

Örnek olarak başka bir fonksiyona bakalım: w_15_Processing_the_data();

//-------------------------------------------------------------

  • w_15 - 15 numaralı pencere
Numaranın w'den hemen sonra gelmediğine, _ tire işaretinden geçtiğine dikkat edin . Bu önemlidir.

) // - ------------------------------------------------------------
  • Processing_the_data - Bu pencerenin adı (uyarı pencereleri için ad, pencere başlığındaki metin olan Caption ile çakışmayabilir).

//-------------------------------------------------------------

Pencere işlevinin henüz özellik listesini açmak için bir ön eke sahip olmadığına dikkat edilmelidir. Bu özellik kesinlikle görünecektir. Döndürülecek/ayarlanacak pencere özelliklerinin özel bir listesi oluşturulacak ve bir önek atanacaktır. Ayrıca pencere fonksiyonu henüz bir dönüş tipi harfi içermemektedir.

Şimdilik, işlev yalnızca bir pencereyi açabilir veya kapatabilir.


Bu kusurlar bir sonraki sürümde düzeltilecektir.


 
Bu öğretici bilgilerin bir kez özel olarak ve ayrı ayrı özetlenmesi tavsiye edilir, aksi takdirde gelecekte yorumlara taşacaktır
 
hini #:
Bu eğitim bilgilerinin bir kez özel olarak ve ayrı ayrı özetlenmesi tavsiye edilir, aksi takdirde gelecekte yorumlara taşacaktır
Elbette bu bilgiler olması gerektiği gibi özetlenecek ve sıralanacaktır.
 
Mevcut zaman diliminde, talimatların, açıklamaların ve yorumların sırası henüz oluşturulmaktadır. Gelecekteki dokümantasyonun içeriği, geliştirme ve kullanıcılarla iletişim sürecinde uyumlu bir şekilde birikmektedir. Sonuç olarak, arka plan bilgileri bölümler halinde sunulmaktadır. Geri bildirim almak gereklidir ve teknik çözümlerin kalitesini artıran önemli bir aşamadır. Yazılım biçimlendirici bir aşamadan geçmektedir ve halkın aktif katılımı sayesinde tam işlevselliğe ulaşabilecektir. Sonuç, detaylı dokümantasyona sahip eksiksiz bir program olacaktır.
 

6.Parametre veya özelliğindeğerinigerekli tipteki bir değişkenedöndürür:


Eleman parametresinin türü(int, double veya string) eleman fonksiyonunun türünü belirler.

Eleman fonksiyonlarının parametrenin değerini üç türden biriyle döndürdüğü bilinmektedir: int, double veya string.

Ancak, fonksiyonlar aynı zamanda özellik değerleri de döndürür...

Parametre değerinin türü , her zaman int olan özelliklerin türüyle çakışmadığında bir durum ortaya çıkar . Fonksiyonların int yerine double veya string gibi yanlış türde özellik değerleri döndürdüğü ortaya çıkar . Bu zorunlu rahatsızlık, fonksiyonların evrenselliğinin bedelidir .

Kullanıcının görevi alınan değeri kendi başına gerekli türe dönüştürmek için..


Şunu vurgulamama izin verin: tüm eleman özelliklerinin ana türü int 'tir .


Soru-cevap örneklerine daha yakından bakalım:

  • - S: İşlev türü string ise işlev int türündeki bir özelliğin değerini nasıl döndürür?
  • - Yanıt: İşlev, string türünde int değerini döndürecektir.
  • - Soru: Fonksiyon tipi double ise fonksiyonint değerini nasıl döndürecektir?
  • - Cevap: Fonksiyon double tipinde int değerini döndürecektir.
  • - Soru: İşlev türü int ise işlev double değerini nasıl döndürecektir?
  • - Cevap: Double tipindeki elemanların özellikleri mevcut değildir. Elemanın parametresinin özellikleri double tipinde olabilir. Bu durumda, fonksiyonun kendisi double tipinde olacaktır.


Parametre değerinin türü, elemanın işlevinin türünü belirler.

Double tipinde bir elemanın hiçbir özelliği yoktur . Sadece int. Ancak double, string veya int türlerini kabul eden parametre özellikleri vardır. Örneğin , V_CURRENT, V_LAST, V_MAX, V_MIN, V_STEP int ya da double olabilir. Her iki durumda da eleman fonksiyonu int veya double olur. Ancak parametrenin özellikleri veya parametrenin kendisi int değilse fonksiyon int olamaz.

Kaydırıcı işlevi int türünde döndürüyorsa, bu, öğe oluşturma aşamasında kullanıcının parametresine veya özelliklerine tamsayılar atadığı anlamına gelir - örneğin, kaydırıcı aralığını veya düğmeli giriş alanlarını tamsayı değerlerinin içine yerleştirmiştir.



Sonuç: Kullanıcının görevi, alınan değerleri gerekli türe dönüştürmektir.

Bazı pratik örnekleri ele alalım:

1.

   //------------------------------------------------
   //Текстовое поле ввода EDIT. Тип функции - string.
   //Получение и установка цвета текста и основания:
   //------------------------------------------------
   
   //1. Устанавливаем любой текст в пустое поле ввода:
   w7_s_p4_EDIT_Comment_1("Some random text");
   //------------------------------------------------

//------------------------------------------------------------------------------------------------------------

2.

   //------------------------------------------------
   //2. Получаем цвет основания поля ввода:
   uint Comment_1_base_color =  (uint)w7_s_p4_EDIT_Comment_1(get_s,p4_COLOR_base); 
   //------------------------------------------------
   //Выводим результат в журнал:
   Print("Comment_1_base_color  ",Comment_1_base_color);
   //------------------------------------------------

//------------------------------------------------------------------------------------------------------------

3.

   //------------------------------------------------
   //3. Назначаем основанию новый цвет:
   w7_s_p4_EDIT_Comment_1((uint)clrWheat,p4_COLOR_base); 
   //------------------------------------------------

Sonucu görün:


//------------------------------------------------------------------------------------------------------------

4.

   //------------------------------------------------
   //4. Получаем цвет текста поля ввода: 
   uint Comment_1_text_color =  (uint)w7_s_p4_EDIT_Comment_1(get_s,p4_COLOR_text); 
   //------------------------------------------------
   //Выводим результат в журнал:
   Print("Comment_1_text_color  ",Comment_1_text_color); 
   //------------------------------------------------


//------------------------------------------------------------------------------------------------------------

5.

   //------------------------------------------------
   //5. Устанавливаем другой цвет тексту:
   w7_s_p4_EDIT_Comment_1((uint)clrRed,p4_COLOR_text); 
   //------------------------------------------------

Sonucu görün:




Daha sonra, diğer öğe ve parametre özelliklerini almayı ve ayarlamayı test edelim. Ayrıca double tipi ile çalışmayı deneyelim.

Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается...
 

Kodu takip ettim ve test ettim ve rastgele dizenin uzunluğu çok uzun olduğunda otomatik olarak gizlenmeyen beklenmedik bir şey buldum

w7_s_p4_EDIT_Comment_1("Some random text AAAAAAAA");


 
Bunlar küçük sorunlar, lütfen bunları sonraya bırakın ve ne olacağını görün, zamanınız varsa kontrol edin, yoksa şimdilik düzeltmeyin!