Hatalar, hatalar, sorular - sayfa 2701

 
Slava :
İlk dikdörtgenin ve ikinci dikdörtgenin yaklaşık koordinatları? Onlar aynı?
İlk dikdörtgen arka plandır. Sadece bir arka plan. Tam ekranda.
İkinci dikdörtgen bir sütundur. İlk dikdörtgenin üzerindedir.
Yarın her şeyi göstermeye çalışacağım.
 
Slava :

Oynanabilir değil.

Oynamak için hiçbir adım vermedin

Ne yaptın?

TAMAM. Tekrar.

1. Bir grafik nesnesi oluşturun , örneğin bir dikdörtgen. Elle oluşturun;

2. OBJPROP_ZORDER özelliğini programlı olarak 1 olarak değiştirin;

3. Anlattığım saçmalığı anlayın.

Bir tuş vuruşunda bir özelliği değiştirme kodu şuna benzer.

 if ( lparam == KEY_Z )
{
//--- Получаем свойство приоритета клика
int zorder = ( int ) ObjectGetInteger ( 0 , _name, OBJPROP_ZORDER );
//--- Меняем свойство приоритета клика
zorder = ( zorder == 0 ) ? 1 : 0 ;
//--- Устанавливаем новое свойство приоритета
ObjectSetInteger ( 0 , _name, OBJPROP_ZORDER , zorder );
} 
_name nesnesinin adı, grafikte nesne seçilerek (fare tıklamasıyla) önceden kaydedilir.
 
Alexey Kozitsyn :

Ne yaptın?

TAMAM. Tekrar.

1. Bir grafik nesnesi oluşturun , örneğin bir dikdörtgen. Elle oluşturun;

2. OBJPROP_ZORDER özelliğini programlı olarak 1 olarak değiştirin;

3. Anlattığım saçmalığı anlayın.

Bir tuş vuruşunda bir özelliği değiştirme kodu şuna benzer.

_name nesnesinin adı, grafikte nesne seçilerek (fare tıklamasıyla) önceden kaydedilir.

Elle yatay bir çizginin grafik nesnesi oluşturuldu.

Komut dosyasındaki z sırasını programlı olarak değiştirdi

Araç ipucunun göründüğünü görüyorum.


Ellerimle bir dikdörtgen grafik nesnesi oluşturdum (yani, fiyatlara bağlı bir dikdörtgen - zaman ve OBJ_RECTANGLE_LABEL değil)

Benzer bir komut dosyasından programlı olarak değiştirilmiş z sırası

Araç ipucunun göründüğünü görüyorum


Yani bir şeyi kaçırdın

 
Slava :

Elle yatay bir çizginin grafik nesnesi oluşturuldu.

Komut dosyasındaki z sırasını programlı olarak değiştirdi

Araç ipucunun göründüğünü görüyorum.


Ellerimle bir dikdörtgen grafik nesnesi oluşturdum (yani, fiyatlara bağlı bir dikdörtgen - zaman ve OBJ_RECTANGLE_LABEL değil)

Benzer bir komut dosyasından programlı olarak değiştirilmiş z sırası

Araç ipucunun göründüğünü görüyorum


Yani bir şeyi kaçırdın

Tamam, tekrar kontrol edeceğim.

2361 derlemesini kontrol ettiniz mi?

Güncellenmiş.

Tekrar kontrol edildi. Sorun devam ediyor.

Bunu deneyin: göstergemi alın, TF M1'de bir dikdörtgen ( OBJ_RECTANGLE olan) oluşturun. Fareyle üzerine tıklayın, ardından z'ye birkaç kez basın. Logda zorder'in -1, 0, 1'e eşit olduğunu göreceksiniz. Ardından bu dikdörtgeni geçen grafiğe tıklayın. Ardından araç ipucunu görmeye çalışın, seçin.

Muhtemelen mesele, zorder = -1 nesnesinin ayarlanmasındadır. Ondan önce, sorunun 1 değerinde olduğunu sanıyordum. Üzgünüm.

Dosyalar:
 
Alexey Kozitsyn :

Tekrar kontrol edildi. Sorun devam ediyor.

Şu şekilde deneyin:

Şimdi dağlar. Çizgiler varsayılan olarak seçili olarak oluşturulur (fare tıklamasıyla seçimi kaldırma seçeneği yoktur) + herhangi bir grafikte araç ipuçlarının vurgulanması yok... Bir şeyler bozuldu. Gösterge artık grafikte değil .

 
Alexey Kozitsyn :

Tamam, tekrar kontrol edeceğim.

2361 derlemesini kontrol ettiniz mi?

Güncellenmiş.

Tekrar kontrol edildi. Sorun devam ediyor.

Bunu deneyin: göstergemi alın, TF M1'de bir dikdörtgen ( OBJ_RECTANGLE olan) oluşturun. Fareyle üzerine tıklayın, ardından z'ye birkaç kez basın. Logda zorder'in -1, 0, 1'e eşit olduğunu göreceksiniz. Ardından bu dikdörtgeni geçen grafiğe tıklayın. Ardından araç ipucunu görmeye çalışın, seçin.

Muhtemelen mesele, zorder = -1 nesnesinin ayarlanmasındadır. Ondan önce, sorunun 1 değerinde olduğunu düşündüm.

ChartRedraw() ile ilgili gibi görünüyor. Çalışmak için bir dikdörtgeni bağladığınızda ve üzerinde sol tıklama ile z'yi karıştırdığınızda daha da iyi oynar. Böylece bu nesne "ölü" olur. Daha sonra başka bir dikdörtgen oluşturursanız - tüm kurallar.

 
Slava :

LMB dağların seçimini kaldıramadığında ne yapmalı. grafik çizgileri? müdahale ediyor...

 
Alexey Kozitsyn :

ChartRedraw() ile ilgili gibi görünüyor. Çalışmak için bir dikdörtgeni bağladığınızda ve üzerinde sol tıklama ile z'yi karıştırdığınızda daha da iyi oynar. Böylece bu nesne "ölü" olur. Daha sonra başka bir dikdörtgen oluşturursanız - tüm kurallar.

İşte tekrar kontrol ettiğim Uzman Danışmanım

 //+------------------------------------------------------------------+
//|                                                   TestZOrder.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"

#define OBJECT_NAME1 "RectangleLabel1"
#define OBJECT_NAME2 "RectangleLabel2"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   ObjectCreate ( 0 ,OBJECT_NAME1, OBJ_RECTANGLE_LABEL , 0 , 0 , 0 );
   ObjectSetInteger ( 0 ,OBJECT_NAME1, OBJPROP_XDISTANCE , 100 );
   ObjectSetInteger ( 0 ,OBJECT_NAME1, OBJPROP_YDISTANCE , 100 );
   ObjectSetInteger ( 0 ,OBJECT_NAME1, OBJPROP_XSIZE , 300 );
   ObjectSetInteger ( 0 ,OBJECT_NAME1, OBJPROP_YSIZE , 200 );
   ObjectSetInteger ( 0 ,OBJECT_NAME1, OBJPROP_BGCOLOR , clrNONE );
   ObjectSetInteger ( 0 ,OBJECT_NAME1, OBJPROP_BORDER_TYPE , BORDER_FLAT );
   ObjectSetString ( 0 ,OBJECT_NAME1, OBJPROP_TOOLTIP ,OBJECT_NAME1);
//---
   ObjectCreate ( 0 ,OBJECT_NAME2, OBJ_RECTANGLE_LABEL , 0 , 0 , 0 );
   ObjectSetInteger ( 0 ,OBJECT_NAME2, OBJPROP_XDISTANCE , 250 );
   ObjectSetInteger ( 0 ,OBJECT_NAME2, OBJPROP_YDISTANCE , 120 );
   ObjectSetInteger ( 0 ,OBJECT_NAME2, OBJPROP_XSIZE , 250 );
   ObjectSetInteger ( 0 ,OBJECT_NAME2, OBJPROP_YSIZE , 150 );
   ObjectSetInteger ( 0 ,OBJECT_NAME2, OBJPROP_BGCOLOR , clrNONE );
   ObjectSetInteger ( 0 ,OBJECT_NAME2, OBJPROP_BORDER_TYPE , BORDER_FLAT );
   ObjectSetString ( 0 ,OBJECT_NAME2, OBJPROP_TOOLTIP ,OBJECT_NAME2);
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   ObjectDelete ( 0 ,OBJECT_NAME1);
   ObjectDelete ( 0 ,OBJECT_NAME2);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
//---
   if (id== CHARTEVENT_OBJECT_CLICK )
     {
       long zorder= ObjectGetInteger ( 0 ,sparam, OBJPROP_ZORDER );
       PrintFormat ( "%s object clicked  lparam=%I64d  dparam=%.16g  zorder=%I64d" ,sparam,lparam,dparam,zorder);
      zorder= 1 -zorder;
       ObjectSetInteger ( 0 ,sparam, OBJPROP_ZORDER ,zorder);
      zorder= ObjectGetInteger ( 0 ,sparam, OBJPROP_ZORDER );
       PrintFormat ( "%s zorder set to %I64d" ,sparam,zorder);
     }
  }
//+------------------------------------------------------------------+

Her şey normal, araç ipuçları zorder'e göre görüntüleniyor

 
Alexey Kozitsyn :

LMB dağların seçimini kaldıramadığında ne yapmalı. grafik çizgileri? müdahale ediyor...

Ne demek yapamazsın?

Hadi detayları öğrenelim!

 
Slava :

Ne demek yapamazsın?

Hadi detayları öğrenelim!

Ördek... burada... Bir önceki gönderideki göstergeyi denedim . Ve... bir şey kırıldı. Peki şimdi dağları yaratırken ne olacak. satırı seçilir ve bu seçim satıra fare ile iki kez tıklanarak kaldırılamaz. Kapa çeneni - seçim kaldırılmaz. Herhangi bir grafikte, hatta boş.