オブジェクトを流し込む

 

親愛なるプログラマーの皆さん、ごきげんよう。

"MT4端末用。

何かヒントを頂きたいと思います。次のようなニュアンスの言葉に出会いました...。

1.矩形オブジェクトを作成する - それは動作します。

2.プロパティを設定しました。

- のスタイルで、うまくいきました。

- 線幅 - 動作しました。

- カラー - 動作しました。

-fill - 聞く 気がない。

いろいろといじくりまわしてみたところ、矩形オブジェクトはデフォルトで「オブジェクトを背景として描画する」にチェックを入れて作成されていることがわかりました。このチェックボックスがチェックされている限り、矩形はプログラムからのコマンドを聞きません。オブジェクトのプロパティから このチェックボックスを手動で削除すれば、プログラムから塗りつぶしを制御できるようになります。

問題は、なぜオブジェクトがすぐに "fill "プロパティに設定されないのか、ということです。何が間違っていて、何がわかっていないのか。

できる人は助けてください

以下は、使用したコードです。

#property indicator_chart_window

int start()
{
long current_chart_id=ChartID();
//
string obj_name1="Rectangle1";
//
double Price_Level_1 = 1296; // 金価格
double Price_Level_2 = 1293;
//
datetime Left_Side_1 = Time[9];
// datetime Right_Side_1 = Time[0] + PeriodSeconds() * 7;
//
const color clr = clrBeige;
const ENUM_LINE_STYLE style = STYLE_DASH;
const int width = 1;
const bool fill = false;
//
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, style)を使用します。
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_WIDTH, width)を使用します。
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false); // すぐに設定されません。

return(0)です。

 

トライ

//+------------------------------------------------------------------+
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;
   }
 
そのコツとは?なぜ、それ以上の操作をしないと、オブジェクトが塗りつぶしに反応しないのでしょうか?
 
Renat Akhtyamov:

トライ

削除するのではなく、存在するかどうかを確認する必要があるのです。存在しないのなら、作ればいい。そして、パラメータを設定する。
 
では、なぜフィラーは聞いていないのでしょうか?
 
Artyom Trishkin:
削除するのではなく、存在するかどうかを確認する必要があるのです。存在しないのなら、作ればいい。そして、パラメータを設定する。

同意

を先に見つける。

しかし、オブジェクトが削除され、同じ名前でティック ごとに再作成される場合、既知の既存のオブジェクトを検索することは不要である
 
5211845:
では、なぜフィルは耳を貸さないのでしょうか?

で、もしそうなら(false→true)。

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

うまくいきません。 すでに次の関数を試しています。

ObjectSet (obj_name1, OBJPROP_FILL, true | false)です。

 
このコードは全く動作しないのでしょうか?私の端末の不具合かも?

ObjectSetInteger(current_chart_id, obj_name1, OBJPROP_FILL, false)を使用します。

 
5211845:
一般的に、このコードは動作するはずです?私 の端末の不具合かも?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false)を使用します。

もちろんです。

このコードと自分のコードを詳細に比較し、出力の刻みがないためOnTimer()に配置するか、OnInit()で一時的に実行します。

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,            //| Перемещает точку привязки прямоугольника                         |...
 

私はこの例を元にコードを作成しました。何が違うのか、どうしてもわからないんです。入力パラメータ用のウィンドウがあることのみ。

このウィンドウが必要ない場合はどうすればいいのでしょうか? 欲しいパラメータを持つオブジェクトを作成するだけなら。これは可能なのでしょうか?