Bir nesneyi doldurma

 

Selamlar, sevgili programcılar!

"MT4 terminali için."

Sizden biraz tavsiye almak istiyorum. Bu nüansla karşılaştım...

1. Bir dikdörtgen nesne oluşturdum - işe yaradı:

2. özellikleri ayarlayın:

- stil - çalıştı;

- çizgi kalınlığı - çalıştı;

- renk - çalıştı;

- doldurma - itaat etmek istemiyor;

Kurcalıyor, kurcalıyordum, sonuç olarak dikdörtgen nesnenin varsayılan olarak "Nesneyi arka plan olarak çiz" onay kutusu işaretli olarak oluşturulduğunu öğrendim. Bu onay kutusu açıkken, dikdörtgen programdan gelen komutlara uymaz ve bu onay kutusunun işaretini nesne özelliklerinden manuel olarak kaldırırsanız, dolguyu programdan kontrol edebilirsiniz.

Soru şu ki, "fill" özelliği neden aynı anda nesneye ayarlanmadı? Neyi yanlış yapıyorum ve neyin farkında değilim?

Lütfen yapabilen herkese yardım edin!

kullanılan kod aşağıdadır:

#özellik göstergesi_chart_window

int başlangıç()
{
uzun current_chart_id=ChartID();
//
string obj_name1="Dikdörtgen1";
//
çift Fiyat_Level_1 = 1296; //altın tırnak
double Price_Level_2 = 1293;
//
tarihsaat Left_Side_1 = Saat[9];
tarihsaat Right_Side_1 = Saat[0] + PeriodSeconds() * 7;
//
const renk clr = clrBej;
const ENUM_LINE_STYLE stili = STYLE_DASH;
const int genişlik = 1;
const bool doldurma = yanlış;
//
ObjectCreate(current_chart_id, obj_name1, OBJ_RECTANGLE, 0, Left_Side_1, Price_Level_1, Right_Side_1, Price_Level_2);
ObjectSetInteger(current_chart_id, obj_name1, OBJPROP_COLOR, clr);
ObjectSetInteger(current_chart_id, obj_name1, OBJPROP_STYLE, stil);
ObjectSetInteger(current_chart_id, obj_name1, OBJPROP_WIDTH, genişlik);
ObjectSetInteger(current_chart_id, obj_name1, OBJPROP_FILL, false); // hemen ayarlanmadı

dönüş(0);

 

denemek

 //+------------------------------------------------------------------+
void Prn_Rect_Label( string Name, int X, int Y, int width, int height, color CLR, int Corner, bool back)
   {
       ObjectDelete ( 0 ,Name);
       ObjectCreate ( 0 ,Name, OBJ_RECTANGLE_LABEL , 0 , 0 , 0 );
       ObjectSetInteger ( 0 ,Name, OBJPROP_XDISTANCE ,X);
       ObjectSetInteger ( 0 ,Name, OBJPROP_YDISTANCE ,Y);
       ObjectSetInteger ( 0 ,Name, OBJPROP_XSIZE ,width);
       ObjectSetInteger ( 0 ,Name, OBJPROP_YSIZE ,height);
       ObjectSetInteger ( 0 ,Name, OBJPROP_BGCOLOR ,CLR);
       ObjectSetInteger ( 0 ,Name, OBJPROP_CORNER ,Corner);
       ObjectSetInteger ( 0 ,Name, OBJPROP_BACK ,back);
       return ;
   }
 
Ne anlamı var? Nesne neden ek manipülasyonlar olmadan doldurmaya yanıt vermiyor?
 
Renat Akhtyamov :

denemek

Silmek değil, varlığını kontrol etmek gerekir. Değilse, o zaman oluşturun. Ve sonra parametreleri ayarlayın.
 
Peki dolgu neden uymuyor?
 
Artyom Trishkin :
Silmek değil, varlığını kontrol etmek gerekir. Değilse, o zaman oluşturun. Ve sonra parametreleri ayarlayın.

Kabul ediyorum

önce bul

ancak nesne silinir ve aynı ada sahip her onay işaretinde yeniden oluşturulursa, bilinen bir nesnenin aranması gereksizdir.
 
5211845 :
Peki dolgu neden uymuyor?

ve eğer öyleyse (yanlış --> doğru):

   ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL , true ); // не задается сразу
 

Çalışmıyor. Bu işlevi zaten denedim.

ObjectSet(obj_name1, OBJPROP_FILL, true | false);

 
Bu kodun çalışması gerekiyor mu? Belki de terminalimdeki bir aksaklıktır?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);

 
5211845 :
Bu kodun çalışması gerekiyor mu? Belki de terminalimdeki bir aksaklıktır?

ObjectSetInteger(current_chart_id, obj_name1, OBJPROP_FILL, false);

Elbette.

Bunu kodunuzla ayrıntılı olarak karşılaştırın ve OnTimer() içine yerleştirin, çünkü hafta sonu hiçbir onay işareti yok veya geçici olarak OnInit() içinde başlatın:

https://www.mql5.com/ru/docs/constants/objectconstants/enum_object/obj_rectangle

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
  • www.mql5.com
//| Cоздает прямоугольник по заданным координатам                    |               time1=0,                            price1=0,                         time2=0,                            price2=0,                        width=1,            //| Перемещает точку привязки прямоугольника                         |...
 

Bu örneğe dayanarak kodumu yazdım. Sadece farkın ne olduğunu anlayamıyorum. Sadece giriş parametreleri için bir pencere var.

Ya bu pencereye ihtiyacım yoksa? sadece zaten istenen parametrelere sahip bir nesne oluşturmak istersem. Mümkün mü?