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 ; }
denemek
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.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);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);
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](/i/community/logo_mql5_small.png)
- www.mql5.com
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ü?
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
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);