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

 
hini #:
B urada zorunlu tür dönüşümü, kullanıcının işlevin dışına (string) yazmak zorunda kalmaması için bir işlevin içine yerleştirilebilir mi

Soruyu tam olarak anlayamadım, bu yüzden cevabım konu dışı olabilir.

Bunu şu şekilde yapabilirsiniz:


double işlevi, değer dönüşü adımında zorunlu bir dönüştürme kullanarak string türünde bir değişkene dönüş yapar.
string Spin_edit_value = (string)w6_d_p5_S_EDIT_Spin_the_value();

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 

Daha da basitleştirebilirim:

w7_s_p4_EDIT_Comment_2((string)w6_d_p5_S_EDIT_Spin_the_value());
 

Teorik olarak, bunu bu şekilde yapabilirsiniz:

w7_s_p4_EDIT_Comment_2(w6_d_p5_S_EDIT_Spin_the_value());

Derleyicinin kendisi double'ı string'e dönüştürür, ancak bunu tavsiye etmek istemem.

 
Реter Konow #:

Soruyu gerçekten anlamadım, bu yüzden cevabım konu dışı olabilir.

Bunu şu şekilde yapabilirsiniz:


double fonksiyonu, değer döndürme adımında zorunlu dönüştürme ile string tipinde bir değişken döndürür.
w7_s_p4_EDIT_Comment_2 işlevinin içinde daha sonra türü dönüştürün
double Spin_edit_value = 22.5;

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 
Реter Konow #:

Teorik olarak bu yapılabilir:

Derleyicinin kendisi double'ı string'e dönüştürecektir, ancak bunu tavsiye etmiyorum.

w7_s_p4_EDIT_Comment_2 işlevi, double türünü alan karşılık gelen bir aşırı yüklenmiş sürüm oluşturamaz mı?

 

Özellikleri ayarlama ve öğeler arasında değer döndürme ve iletme konusuna devam ediyoruz.


Birkaç seçeneğe baktık:

1. Bir metin giriş alanındaki metni ayarlama.

w7_s_p4_EDIT_Comment_1("Some random text");

2. Kaydırıcıya yeni bir değer atandı.

w6_i_p3_H_SLIDER_Roll_the_value(33);

3. Düğmelerle giriş alanı için rastgele bir sayı seçin.

w6_d_p5_S_EDIT_Spin_the_value(423.11);

4. Hesap Bilgisi tablosundaki hücrelere birden fazla metin dizesi gönderdi.

w8_s_p4_CELL_Account_name__Value("MyRealAccount");  

w8_s_p4_CELL_Account_number__Value("A001234647843B1");

w8_s_p4_CELL_Account_server__Value("MyServer");

w8_s_p4_CELL_Account_currency__Value("US Dollar");

w8_s_p4_CELL_Leverage__Value("1:1");

w8_s_p4_CELL_Account_balance__Value("1234567.23 $");


5. Son olarak, S_EDIT öğesinin yeni değerini döndürdük ve iki farklı pencereye gönderdik: Hesap Bilgisi tablosundaki hücre ve Ayarlar penceresindeki metin giriş alanı örnek 2.

 double Spin_edit_value = w6_d_p5_S_EDIT_Spin_the_value();//Делаем возврат значения параметра (тип double).
w8_s_p4_CELL_Account_profit__Value((string)Spin_edit_value);//При пересылке значение double приводим к типу string. Функция ячейки имеет тип string.
w7_s_p4_EDIT_Comment_2((string)Spin_edit_value);

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


Bu konuyu tamamlamak ve bir sonrakine geçmek için birkaç şey yapmamız gerekiyor:

1. Kaydırma çubuğunun rengini değiştirin.

2. S_EDIT tabanının ve metnin rengini değiştirin.

3. Düğmenin basılı ve basılı olmayan durumlarındaki renklerini değiştirin.

4. Zamanlayıcı olayında elemanlara değer göndermeyi kontrol edin.

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


1. Kaydırma çubuğunun rengini değiştirin:

   //To get slider's bar color:
   uint Sliders_bar_color = (uint)w6_i_p3_H_SLIDER_Roll_the_value(get_i, p3_COLOR_bar);
   
   //Print the returned value:
   Print("Sliders_bar_color =  ",Sliders_bar_color);

Sonuç:



Kaydırma çubuğuna farklı bir renk atayın:

   //To set slider's bar color:
   w6_i_p3_H_SLIDER_Roll_the_value((uint)clrRed, p3_COLOR_bar);


Sonuç:

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


2 Metnin rengini ve S_EDIT öğesinin tabanını değiştirin:

Düğmelerle giriş alanının tabanının orijinal rengini alalım:

   //To get spin edit's base color:
   uint Spin_edit_base_color = (uint)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_COLOR_base);

Günlüğe çıktı verin:

   //Print the returned value:
   Print("Spin_edit_base_color = ",Spin_edit_base_color);


Alanın tabanına farklı bir renk atayın:

   //To set spin edit's base color:
   w6_d_p5_S_EDIT_Spin_the_value((uint)clrLightGreen, p5_COLOR_base);

Sonuç:


S_EDIT alanının metin renginin ayarlanması (p5 yerine p4 özellik öneki kullanılmıştır, çünkü S_EDIT için metin rengi özelliğini eklemeyi unuttum. hata bir sonraki sürümde düzeltilecektir).

   //To set spin edit's text color:
   w6_d_p5_S_EDIT_Spin_the_value((uint)clrBrown, p4_COLOR_text);  


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


3. Düğmenin basılı ve basılı olmayan durumlardaki renklerini değiştirin:

Düğmenin nötr durumdaki rengini değiştirin:

w6_i_p1_BUTTON_Start((uint)C'255,166,0',p1_N_COLOR_base);


Düğmenin etkinleştirilmiş durumu için farklı bir renk ayarlayın:

w6_i_p1_BUTTON_Start((uint)C'166,255,0',p1_A_COLOR_base);


Düğmenin metin rengini nötr ve basılı durumları için de değiştirebilirsiniz, ancak küçük bir yazı tipinde bu fark edilmez. Bu nedenle farklı bir pencere seçelim:

   //Set text color for button's neutral state:

   //Button 1:
   w14_i_p1_BUTTON_BUY_OFF((uint)C'240,70,10',p1_N_COLOR_text);

   //Button 2:
   w14_i_p1_BUTTON_SELL_OFF((uint)C'240,70,10',p1_N_COLOR_text); 

Sonuç:


   //Set text color for button's active state:
   
  //Button 1
   w14_i_p1_BUTTON_BUY_OFF((uint)C'105,240,50',p1_A_COLOR_text);

  //Button 2
   w14_i_p1_BUTTON_SELL_OFF((uint)C'105,240,50',p1_A_COLOR_text);

Sonuç:


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


4. Zamanlayıcı olayında elemanlara değer göndermeyi kontrol edin:

void _OnTimer()
  {
   string Microseconds = (string)GetMicrosecondCount();
     
   //Send Microseconds to each cell-----------------
   w8_s_p4_CELL_Account_name__Value(Microseconds);
   w8_s_p4_CELL_Account_number__Value(Microseconds);
   w8_s_p4_CELL_Account_server__Value(Microseconds);
   w8_s_p4_CELL_Account_currency__Value(Microseconds);
   w8_s_p4_CELL_Leverage__Value(Microseconds);
   w8_s_p4_CELL_Account_balance__Value(Microseconds);
   w8_s_p4_CELL_Account_profit__Value(Microseconds);
   w8_s_p4_CELL_Account_equity__Value(Microseconds);
   w8_s_p4_CELL_Account_free_margin__Value(Microseconds);
   w8_s_p4_CELL_Account_margin__Value(Microseconds);
   w8_s_p4_CELL_Account_stop_out_level__Value(Microseconds);

Sonuç:


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

Bu, bu konuyu tamamlamaktadır.


Daha sonra, konulara geçiyoruz:

9. Önceki değerin geri döndürülmesi (_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.

 
hini #:

w 7_s_p4_EDIT_Comment_2 işlevinin içinde, ardından türü

Yapabilirsiniz. Ancak, örtük bir tür dönüşümü olduğu için ek bir uyarı olacaktır. Teknik olarak, sadece bir sayı gönderebilirsiniz. Değişken olmadan. Bunu herkesin takdirine bırakıyorum.

 
hini #:

w 7_s_p4_EDIT_Comment_2 işlevinin içinde, ardından türü

w7_s_p4_EDIT_Comment_2 işlevinin içinde hiçbir şey yoktur. Bu, merkezi fonksiyonu çağıran bir sarmalayıcıdır. Ve sarmalayıcı işlev yalnızca kendi türünde bir değer döndürebilir.



h ini #: w7_s_p4_EDIT_Comment_2 işlevi, double türünü alan karşılık gelen bir aşırı yüklenmiş sürüm oluşturamaz mı?

Ne yazık ki yapamaz, çünkü bu bir sarmalayıcıdır. Bunu karmaşıklaştırmanın bir anlamı yok. Tüm iş merkezi fonksiyonlar tarafından yapılır.
 
Реter Konow #:

w7_s_p4_EDIT_Comment_2 işlevinin içinde hiçbir şey yoktur. Bu sadece merkezi bir fonksiyonu çağıran bir sarmalayıcıdır. Sarmalayıcı işlevler yalnızca kendi türlerinde değerler döndürebilir.


Yapamaz, çünkü bu bir sarmalayıcı. Bunu karmaşıklaştırmaya gerek yoktur. Tüm iş merkezi fonksiyon tarafından yapılır.

Doğru.

 

Bugün dört konuya göz atalım:

9. Önceki _V_LAST değerini döndürme .

10. Farklı eleman türleri için ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK durumlarının ayarlanması.

11. Parametre değişikliklerinin senkronizasyonu: örneğin düğmeler ve kaydırıcı ile giriş alanı. Amaç, ilk değer değiştiğinde ikinci değerin de buna uygun olarak değişmesidir. Önce bir pencerede, sonra pencereler arasında iletişim kuralım.

12. Kaydırıcının ve düğmeli alanın aralık sınırlarını programlı olarak sıfırlayın.

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

Şimdiye kadar aşağıdaki konuları ele aldık:

1. Intellisense listesinde yönlendirme ve istenen pencerenin işlevini seçme.

2. Pencerelerin yazılımla açılması ve kapatılması.

3. Intellisense listesinde yönlendirme ve gerekli pencerede gerekli öğenin seçilmesi.

4. Bireysel eleman özelliklerinin listelerinde gezinme.

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

6. Seçilen bir elemanın parametre değerinin kendi türündeki bir değişkene döndürülmesi. Birkaç farklı elemanın üç tipini 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 elemana iletmek. 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. Size yeni API dosyası çıktısında nasıl gezineceğiniz ve okuyacağınız hakkında daha fazla bilgi vereceğim.