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

 
Yeni bir sayfa ile devam edelim.
 

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:

int _OnInit()
  {
   //------------------------------------------------
   //Open the window "Settings example 1".
   //------------------------------------------------
   w_6_Settings_example_1();
   //------------------------------------------------


2. V_MIN, _V_MAX, _V_STEP, _DIGITS değerlerini yazalım ve günlüğe çıktı olarak verelim:

   //------------------------------------------------
   //Get parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP, _DIGITS
   //------------------------------------------------
   int Min_value = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_V_MIN);
   int Max_value = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_V_MAX);
   int Step      = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_V_STEP);
   int digits    = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_DIGITS);
   //------------------------------------------------
   //Print the results:
   //------------------------------------------------
   Print("Min_value:  ",Min_value,"  Max_value:  ",Max_value,"  Step:  ",Step,"  digits:  ",digits);
   //------------------------------------------------

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.

   //------------------------------------------------
   //Get parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP, _DIGITS
   //------------------------------------------------
   double _Min_value  =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_V_MIN);
   double _Max_value  =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_V_MAX);
   double _Step       =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_V_STEP);
   double _digits     =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_DIGITS);
   //------------------------------------------------
   Print("Min_value:  ",_Min_value,"  Max_value:  ",_Max_value,"  Step:  ",_Step,"  digits:  ",_digits);
   //------------------------------------------------ 

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).

   //------------------------------------------------
   //Set parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP.
   //------------------------------------------------
   Min_value = -100;
   Max_value = 100;
   Step      = 1;
   //-----------------
   w6_i_p3_H_SLIDER_Roll_the_value(Min_value, p3_V_MIN);
   w6_i_p3_H_SLIDER_Roll_the_value(Max_value, p3_V_MAX);
   w6_i_p3_H_SLIDER_Roll_the_value(Step,      p3_V_STEP);
   //------------------------------------------------

Sonuç: *Negatif sayılarda aralıkla ilgili birsorun bulundu(sonraki sürümde düzeltilecek).




Pozitif aralık sınırları ile kontrol edelim:

   //------------------------------------------------
   //Set parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP.
   //------------------------------------------------
   Min_value = 0;
   Max_value = 1000;
   Step      = 1;
   //-----------------
   w6_i_p3_H_SLIDER_Roll_the_value(Min_value, p3_V_MIN);
   w6_i_p3_H_SLIDER_Roll_the_value(Max_value, p3_V_MAX);
   w6_i_p3_H_SLIDER_Roll_the_value(Step,      p3_V_STEP);
   //------------------------------------------------


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:

   //------------------------------------------------
   //Set NEW parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP, _DIGITS
   //------------------------------------------------
   double _Min_value  = -100.0;
   double _Max_value  =  100.0;
   double _Step       =  2.5;
   //-----------------
   //Set another default value---
   w6_d_p5_S_EDIT_Spin_the_value(50.5);
   //-----------------
   w6_d_p5_S_EDIT_Spin_the_value(_Min_value,p5_V_MIN);
   w6_d_p5_S_EDIT_Spin_the_value(_Max_value,p5_V_MAX);
   w6_d_p5_S_EDIT_Spin_the_value(_Step     ,p5_V_STEP);
   //------------------------------------------------

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):

  • Adım değerini noktadan sonra dört basamaklı olarak ayarlayalım.
  • digits değişkeni 4 (dört ondalık basamak) olarak ayarlanır.

       //------------------------------------------------
       //Set parameter properties, such as: 
       //_V_MIN, _V_MAX, _V_STEP, _DIGITS
       //------------------------------------------------
       double _Min_value  = -100.0;
       double _Max_value  =  100.0;
       double _Step       =  2.5567;
              digits      =  4;
       //-----------------
       //Set another default value---
       w6_d_p5_S_EDIT_Spin_the_value(50.5);
       //-----------------
       w6_d_p5_S_EDIT_Spin_the_value(_Min_value,p5_V_MIN);
       w6_d_p5_S_EDIT_Spin_the_value(_Max_value,p5_V_MAX);
       w6_d_p5_S_EDIT_Spin_the_value(_Step     ,p5_V_STEP);
     
       //Set the new number of digits:
       w6_d_p5_S_EDIT_Spin_the_value(digits    ,p5_DIGITS);
       //------------------------------------------------


    Sonuç:

    • İlk başta, ondalık noktadan sonra üç basamak vardı (yazılım değişikliğinden önceki orijinal sayı).


    • Ardından, yazılım çağrısı hassasiyeti dört basamağa yükseltti:


    • Daha sonra, 7 basamağa:
    //Setting 7 digits after the decimal point:
    
    w6_d_p5_S_EDIT_Spin_the_value(7,p5_DIGITS);



    Sonuçlar:

    • Kaydırıcının yanı sıra düğme alanının orijinal sayı aralığı sınırlarını programlı olarak sıfırlama özelliği mevcuttur.
    • Farklı sayıda ondalık basamak ayarlayarak çift değerin ilk hassasiyetini programlı olarak değiştirmek mümkündür.
    • Kaydırıcının negatif sayı sınırları içindeki değerleri hesaplamasında bir sorun vardır (düzeltilecektir).
    • Eleman parametresinin orijinal türü sıfırlanamaz.

    Bu konu burada sona ermektedir.

    Графические интерфейсы VI: Элементы "Слайдер" и "Двухсторонний слайдер" (Глава 2)
    Графические интерфейсы VI: Элементы "Слайдер" и "Двухсторонний слайдер" (Глава 2)
    • www.mql5.com
    В предыдущей статье разрабатываемая библиотека была пополнена сразу четырьмя довольно часто используемыми в графических интерфейсах элементами управления: «чекбокс», «поле ввода», «поле ввода с чекбоксом» и «комбобокс с чекбоксом». Вторая глава шестой части серии будет посвящена таким элементам управления, как слайдер и двухсторонний слайдер.
     

    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:

      v_NEUTRAL_STATE           15
      //-----------------------------
      v_ACTIVATED_STATE         62
      //-----------------------------
      v_NEUTRAL_BLOCKED         64
      //-----------------------------
      v_ACTIVATED_BLOCKED       65   
      //----------------------------- 
      v_NEUTRAL_HIGHLIGHTED     66  
      //-----------------------------
      v_ACTIVATED_HIGHLIGHTED   67


    Eleman durumlarını sorgulamayı ve almayı test edelim:

    1. Pencereyi açın ve "Başlat" düğmesinin ilk durumunu alın:


    int _OnInit()
      {
       //------------------------------------------------
       //Open the window "Settings example 1".
       //------------------------------------------------
       w_6_Settings_example_1();
       //------------------------------------------------
       //Get state of button "Start":
       //------------------------------------------------
       int Button_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
       //------------------------------------------------
       //Print out:
       //------------------------------------------------
       Print("Button state:  ",Button_state);
       //------------------------------------------------


    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:

    • API dosyasında düğmeyi bulalım.
    • Her iki durum için de _GET_STATE isteği yazalım - basıldı ve bırakıldı.
    case Settings_example_1___Start:
    
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the button is pressed or released?
                   //------------------------------------------------------------------------------------------------------
                   switch((int)action)
                   {
                    //------------------------------------------------------------------------
                    case pressed: 
                                   {
                                    //Get button's state when it pressed:
                                    int Button_state =  w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
                                    
                                    //Print out the result:
                                    Print("Button state:  ",Button_state);
                                   }
                    break;
                    //------------------------------------------------------------------------
                    case released: 
                                   {
                                    //Get button's state when it released:
                                    int Button_state =  w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
                                    
                                    //Print out the result:
                                    Print("Button state:  ",Button_state);
                                   }
                    break;
                    //------------------------------------------------------------------------
                   }
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;
    


    Sonuç: basıldı/bırakıldı olayında, mevcut durum indeksi günlüğe yazdırılır.

    Hatırlatma:

    15 = v_NEUTRAL_STATE
    
    62 = v_ACTIVATED_STATE

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


    3. Sorguyu onay kutusu ile tekrarlayalım.



    1. Pencerenin açılması durumunda onay kutusunun durumunu alalım:

       //------------------------------------------------
       //Open the window "Settings example 1".
       //------------------------------------------------
       w_6_Settings_example_1();
       //------------------------------------------------
       
       //Get the state of the checkbox when it checked:
       int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
       
       //Print out the result:
       Print("Checkbox state:  ",Checkbox_state);
       //------------------------------------------------

    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:

    • API dosyasında"Set an option" onay kutusunu bulalım.
    • Her iki durum için _GET_STATE sorgusunu yazalım - işaretli ve işaretsiz.
    case Settings_example_1___Set_an_option:
      
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the checkbox is checked or unchecked? 
                   //------------------------------------------------------------------------------------------------------
                    case checked: 
                                   {
                                    //Get checkbox state when it checked:
                                    int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
                                    
                                    //Print out the result:
                                    Print("Checkbox state:  ",Checkbox_state);
                                   }
                    break;
                    //------------------------------------------------------------------------
                    case unchecked: 
                                   {
                                    //Get checkbox state when it unchecked:
                                    int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
                                    
                                    //Print out the result:
                                    Print("Checkbox state:  ",Checkbox_state);
                                   }
                    break;
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;


    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.

    [Silindi]  
    Coinsbitfx.com adlı bir kripto varlık borsasını kullanmaya başladım. Coins Bit FX, kullanıcıları meşruiyetine ikna etmek için Ulusal Vadeli İşlemler Birliği'ne kayıtlı olduğunu iddia etti. Bir noktada, hesabımın değerinin 135.134 $'a yükseldiğine inandım. Ancak hesabımdan para çekmeye çalıştığımda, borsa tarafından işlemin "inceleme altında" olduğu söylendi. Sakin o zamandan beri web sitesinde kimseyle iletişime geçemedi ve yatırılan fonlara erişemedi. Bu aklıma yattı, bu yüzden bir blogda RECOVERYCOINGROUP AT GMAIL DOT COM'u okudum, araştırmamı yaptım ve hizmetlerini kullanmaya karar verdim; 72 saatten kısa bir süre içinde fonlarımın tamamı kurtarıldı, bu yeterli değilmiş gibi arkadaşlarımın BTC'sini de kurtardılar. Bu yüzden dünyaya bu adamlar hakkında bilgi verecek kadar cesurum. Bugün Recovery Coin Group ile iletişime geçmekten çekinmeyin ve bana daha sonra teşekkür edin !
     

    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:

      v_NEUTRAL_STATE           15
      //-----------------------------
      v_ACTIVATED_STATE         62
      //-----------------------------
      v_NEUTRAL_BLOCKED         64
      //-----------------------------
      v_ACTIVATED_BLOCKED       65   
      //----------------------------- 
      v_NEUTRAL_HIGHLIGHTED     66  
      //-----------------------------
      v_ACTIVATED_HIGHLIGHTED   67

    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:

    //Getting state of the first element:
    int Button_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
    
    //Getting state of the second element:
    int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
    
    
    //Setting conditions for both elements when they're simultaneously ON:
    if(Button_state == v_ACTIVATED_STATE)
      { 
       //Is the checkbox was already on:
        if(Checkbox_state == v_ACTIVATED_STATE)
          {
           Function_1();
          }
        //If the checkbox was the last pressed element and still highlighted:
        if(Checkbox_state == v_ACTIVATED_HIGHLIGHTED)
          {
           Function_2();
          }
      }


    Örnek 2:

    //Getting state of the first element:
    int Button_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
    
    //Getting state of the second element:
    int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
    
    
    //Setting conditions for one element being ON, while the other is OFF:
    if(Button_state == v_ACTIVATED_STATE)
      { 
       //If the checkbox was already off:
        if(Checkbox_state == v_NEUTRAL_STATE)
          {
           Function_A();
          }
        //If the checkbox was just turned off and still highlighted:
        if(Checkbox_state == v_NEUTRAL_HIGHLIGHTED)
          {
           Function_B();
          }
      }

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

    *Ç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:

    • D_LIST, H_SLIDER, EDIT ve S_EDIT elemanları ile iki pencere açalım.
    • Açtıktan hemen sonra elemanların durumlarını döndürelim.

    1. Pencereleri açın:

    int _OnInit()
      {
       //------------------------------------------------
       //Open the windows "Settings example 1" and "Settings example 2".
       //------------------------------------------------
       w_6_Settings_example_1();
       w_7_Settings_example_2();
       //------------------------------------------------


    2. Elemanların durumlarını alalım:

       //------------------------------------------------
       //Get the states of the elements S_EDIT, H_SLIDER, EDIT and D_LIST
       //------------------------------------------------
       //1. State index is type int, S_EDIT's function is double. Convert the types.
       int S_edit_state   = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_GET_STATE); 
       
       //2. Getting the slider's state. 
       int H_slider_state =      w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE);
       
       //3.State index is type int, EDIT's function is string. Convert the types. 
       int Edit_state     = (int)w7_s_p4_EDIT_Comment_3(get_s,p4_GET_STATE);
       
       //State index is type int, D_LIST's function is string. Convert the types.
       int D_list_state   = (int)w7_s_p6_D_LIST_D_LIST_1(get_s,p6_GET_STATE);
       //------------------------------------------------
       
       //Print out the results:
       Print("S_edit_state   = ",S_edit_state);
       Print("H_slider_state = ",H_slider_state);
       Print("Edit_state     = ",Edit_state);
       Print("D_list_state   = ",D_list_state);
       //------------------------------------------------


    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:

    • Öğeler kilitlendiğinde ve tıklandığında fonksiyonun hangi indeksleri döndürdüğü.
    • Verilen öğelerinHIGHLIGHTED ( vurgulanmış) bir duruma sahip olup olmadığı. Başka bir deyişle, elemanın henüz tıklanıp tıklanmadığını bilmenin mümkün olup olmadığı.

    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:

    • API dosyasında "Bir seçenek belirle" onay kutusunu bulalım.
    • EDIT, S_EDIT ve H_SLIDER elemanlarının kilitlenme/açılma durumlarını kutunun içine yazalım ve oradaki elemanların durumlarını print() edelim.
    • API dosyasında EDIT, S_EDIT ve H_SLIDER elemanlarını bulalım .
    • Bu elemanlara bir değer girilmesi durumunda bir durum dönüşü yazalım.
    • Elde edilen sonucu Print() ile yazdıralım.
    //-------------------------------------------------------------------------------------------------

    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.

    case Settings_example_1___Set_an_option:
      
                switch((int)action)
                   {
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the checkbox is checked or unchecked? 
                   //------------------------------------------------------------------------------------------------------
                    case checked: 
                                   {
                                    //-----------------------------------------------
                                    //Locking EDIT:
                                    w7_s_p4_EDIT_Comment_1(p4_LOCK);
                                    
                                    //Locking H_SLIDER:
                                    w6_i_p3_H_SLIDER_Roll_the_value(p3_LOCK);
                                    
                                    //Locking S_EDIT:
                                    w6_d_p5_S_EDIT_Spin_the_value(p5_LOCK); 
                                    
                                    //-----------------------------------------------
                                    //Getting state of EDIT:
                                    int EDIT_state =  (int)w7_s_p4_EDIT_Comment_1(get_s, p4_GET_STATE);
    
                                    //Getting state of H_SLIDER:
                                    int H_SLIDER_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE); 
    
                                    //Getting state of S_EDIT:
                                    int S_EDIT_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_GET_STATE); 
                                    //-----------------------------------------------
                                    
                                    //Printing results:
                                    Print("EDIT_state      = ",EDIT_state);
                                    Print("H_SLIDER_state  = ",H_SLIDER_state);
                                    Print("S_EDIT_state    = ",S_EDIT_state);
                                    //-----------------------------------------------
                                   }
                    break;
                    //------------------------------------------------------------------------
                    case unchecked: 
                                   {
                                    //-----------------------------------------------
                                    //Unlocking the element EDIT:
                                    w7_s_p4_EDIT_Comment_1(p4_UNLOCK);
                                    
                                    //Unlocking H_SLIDER:
                                    w6_i_p3_H_SLIDER_Roll_the_value(p3_UNLOCK);
                                    
                                    //Unlocking S_EDIT:
                                    w6_d_p5_S_EDIT_Spin_the_value(p5_UNLOCK);
                                    
                                    //-----------------------------------------------
                                    //Getting state of EDIT:
                                    int EDIT_state =  (int)w7_s_p4_EDIT_Comment_1(get_s, p4_GET_STATE);
    
                                    //Getting state of H_SLIDER:
                                    int H_SLIDER_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE); 
    
                                    //Getting state of S_EDIT:
                                    int S_EDIT_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_GET_STATE); 
                                    //-----------------------------------------------
                                    
                                    //Printing results:
                                    Print("EDIT_state      = ",EDIT_state);
                                    Print("H_SLIDER_state  = ",H_SLIDER_state);
                                    Print("S_EDIT_state    = ",S_EDIT_state);
                                    //-----------------------------------------------
                                   }
                    break;
                   } 
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;


    Sonuç:

    • Onay kutusuna tıklandığında, eleman fonksiyonları v_NEUTRAL_BLOCKED (nötr kilitli) durumuna karşılık gelen 64 indeksini döndürür.
    • Onay kutusunun işaretinin kaldırılması durumunda, eleman fonksiyonları v_NEUTRAL_STATE (nötr durum) durumuna karşılık gelen 15 indisini döndürür.

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

     

    2. İkinci görev:

    • API dosyasında EDIT, S_EDIT, H_SLIDER öğelerini bulun ve işlevlerinin HIGHLIGHTED ( vurgulanmış) bir dizin döndürüp döndürmediğini görmek için bir değer girildiğinde durumu almayı öngörün.

    Başlarken:

    case Settings_example_2___Comment_1:
      
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the text is entered?
                   //------------------------------------------------------------------------------------------------------
                   {
                    //Getting state of EDIT:
                    int EDIT_state =  (int)w7_s_p4_EDIT_Comment_1(get_s, p4_GET_STATE);
                                    
                    //Printing the results:
                    Print("EDIT_state      = ",EDIT_state);
                   } 
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;
    case Settings_example_1___Roll_the_value:
      
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the slider's handle is moved?
                   //------------------------------------------------------------------------------------------------------
                   //Min value:  0  |   Max value:  100  |   V_step:  1  |   Default value:  75  |  Digits: Integer value
                   //------------------------------------------------------------------------------------------------------
                   {
                    //Getting state of H_SLIDER:
                    int H_SLIDER_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE); 
                                    
                    //Printing results:
                    Print("H_SLIDER_state  = ",H_SLIDER_state);
                   }           
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;
    case Settings_example_1___Spin_the_value:
      
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the value is set?
                   //------------------------------------------------------------------------------------------------------
                   //Min value:  NOT SET  |   Max value:  NOT SET  |   V_step:  1.7  |   Default value:  468.99  |  Digits: 3
                   //------------------------------------------------------------------------------------------------------
                   {
                    //Getting state of S_EDIT:
                    int S_EDIT_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_GET_STATE); 
                                    
                    //Printing results:
                    Print("S_EDIT_state    = ",S_EDIT_state); 
                   }
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;

    Sonuç

    • EDIT: Bir kullanıcı etkileşimi olayında,v_ACTIVATED_HIGHLIGHTED ( etkinleştirildi, vurgulandı) anlamına gelen 67 değerinde bir durum dizini döndürür.

    • S_EDIT: Bir kullanıcı etkileşimi olayında,v_ACTIVATED_HIGHLIGHTED ( etkinleştirildi, vurgulandı) anlamına gelen 67 değerinde bir durum dizini döndürür.
    • H_SLIDER: Kullanıcı etkileşimi olayında, dönüşümlü olarakv_NEUTRAL_HIGHLIGHTED ( nötr, ışıklı) vev_ACTIVATED_HIGHLIGHTED (etkin, ışıklı) anlamına gelen 66 ve 67 indekslerini döndürür.Hata. Bir sonraki sürümde düzeltme.



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

    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:

    • D_LIST eleman fonksiyonu herhangi bir durum döndürmemektedir.
    • H_SLIDER eleman fonksiyonu bir indeks 67 - v_ACTIVATED_HIGHLIGHTED(etkin, aydınlatılmış) yerine dönüşümlü olarakv_NEUTRAL_HIGHLIGHTED ve v_ACTIVATED_HIGHLIGHTED durumlarının indekslerini döndürmektedir.

    Sonuçlar:

    • Eksikliklerin giderilmesi gerekiyor.
    • Kullanıcının hangi eleman türlerinin hangi durumlara sahip olduğunu bilmesi ve bunları kodda kolayca kullanabilmesi için özel birs_ önekiyle adlandırılan bir intellisense listesi oluşturmak gerekir.

    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.

     
    Video yüklemek gif yüklemekten daha kolaydır ve dosya daha küçüktür.
     

    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ı:

    • Ayarları önceden belirlenmiş sınırlar içinde kontrol etmek için mantık yazmak ve bir uyarı sistemi oluşturmak.
    • Uyarı 1: Kullanıcı, elemanların parçalarının renginde bir değişiklik şeklinde bir sinyal alır.( Metin, taban, çerçeve ve kaydırma çubuğunun rengini değer sınırlarına bağlayalım).
    • Uyarı 2: Bir risk bildirimi ve orijinal ayarlara geri dönme önerisi içeren bir diyalog kutusu açılması. ( "İptal" düğmesine tıklandığında önceki ayarlara geri dönme yeteneğini test edelim. )
    • Uyarı 3: ayarlarda daha fazla değişiklik yapılmasını engelleyen ve kullanıcıyı feragatname konusunda bilgilendiren ve manuel kullanıcı onayı gerektiren bir uyarı penceresi açılması. ( Uyarı penceresi göründüğünde pencerelerin engellenmesini test edelim.)


    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.

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

    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?