エラー、バグ、質問 - ページ 2701

 
Slava:
1つ目の長方形と2つ目の長方形のおおよその座標は何ですか?同じなんですか?
最初の長方形は基板です。あくまでも背景です。画面いっぱいに表示されています。
2つ目の長方形は列です。最初の長方形にあります。
明日は全部見せられるように頑張ります。
 
Slava:

再生されないんです。

再現するための手順が示されていない

何をしたんですか?

OKです。もう1度

1.グラフィカルなオブジェクト(例:長方形)を作成 します。手作業で作成する。

2. プログラムで、OBJPROP_ZORDER プロパティを 1 に変更する。

3.私が説明したような無意味なものを手に入れてください。

キーを押してプロパティを変更するコードは次のようになります。

if( lparam == KEY_Z )
{
//--- Получаем свойство приоритета клика
int zorder = (int)ObjectGetInteger( 0, _name, OBJPROP_ZORDER );
//--- Меняем свойство приоритета клика
zorder = ( zorder == 0 ) ? 1 : 0;
//--- Устанавливаем новое свойство приоритета
ObjectSetInteger( 0, _name, OBJPROP_ZORDER, zorder );
} 
グラフ内のオブジェクトを選択(クリック)すると、_nameオブジェクトの名前が保存されます。
 
Alexey Kozitsyn:

何をしたんですか?

OKです。もう1度

1.グラフィカルなオブジェクト(例:長方形)を作成 します。手作業で作成する。

2. プログラムで、OBJPROP_ZORDER プロパティを 1 に変更する。

3.私が説明したような無意味なものを手に入れてください。

キーを押してプロパティを変更するコードは、次のようになります。

グラフ内のオブジェクトを選択(クリック)すると、オブジェクト名_nameが保存されます。

水平線のグラフィックオブジェクトを手作業で作成しました。

スクリプトからプログラム的にZオーダーを変更しました。

ツールチップが表示されるんですね。


手動で矩形(OBJ_RECTANGLE_LABELではなく、価格にリンクした矩形)を作成しました。

同様のスクリプトからz-orderを変更したことがあります。

ツールチップが表示されるんですね


だから、あなたが言わなかったことがある

 
Slava:

水平線のグラフィックオブジェクトを手作業で作成。

スクリプトからZオーダーを変更

ツールチップが表示されるんですね。


手動で矩形のグラフィックオブジェクトを作成しました(OBJ_RECTANGLE_LABELではなく、価格 - 回にリンクした矩形)。

同様のスクリプトからz-orderを変更したことがあります。

ツールチップが表示されるんですね。


だから、言ってないことがあるんですね。

OK、もう一度再確認してください。

ビルド2361では、確認しましたか?

更新されました。

再度確認。まだ問題があります。

私のインジケータを使い、TF M1上に矩形(OBJ_RECTANGLE である)を作成します。マウスでクリックし、zを数回押してください。ログを見ると、zorderが-1, 0, 1になったことがわかります。次に、この長方形を過ぎたところのチャートをクリックします。次に、そのツールチップをハイライト表示させてみてください。

オブジェクトの zorder = -1 を設定することでしょう。それ以前は、1の値が問題だと思っていました。申し訳ございません。

ファイル:
 
Alexey Kozitsyn:

再確認しました。問題は残る。

この方法で試してみてください。

山線がデフォルトでハイライトされて作成される(マウスクリックで選択を解除するオプションがない)+どのグラフでもツールチップのハイライトがない...。何かが壊れている。チャート上にインジケータが 表示されなくなった。

 
Alexey Kozitsyn:

OK、もう一度再確認します。

ビルド2361で確認しましたか?

更新しました。

ダブルチェックした。問題は残る。

私のインジケータを使い、TF M1上に矩形(OBJ_RECTANGLE)を作成するのです。マウスでクリックし、zを数回押してください。ログを見ると、zorderが-1, 0, 1になったことがわかります。次に、この長方形を過ぎたところのチャートをクリックします。次に、そのツールチップをハイライト表示させてみてください。

オブジェクトの zorder = -1 を設定することでしょう。それ以前は、1の値に問題があるのだと思っていました。

ChartRedraw()に問題があるようです。矩形を作品に引っ掛け、その上で左ボタンとzキーを交互に押すと、さらに良い再現ができます。そうすることで、この対象は「死者」になるのです。後で別の矩形を作成しても問題ありません。

 
Slava:

LKMでグラフの線の選択解除ができないときはどうすればいいですか?邪魔になる...。

 
Alexey Kozitsyn:

ChartRedraw()についてのようです。長方形をフックして、その上で左ボタンとzキーを交互に押すと、さらにいい感じに再生されます。そうすることで、この対象は「死者」になるのです。後で別の矩形を作成しても問題ありません。

ここで、再度確認した私の専門家は、以下の通りです。

//+------------------------------------------------------------------+
//|                                                   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);
     }
  }
//+------------------------------------------------------------------+

全て正常です。ツールチップはzorderに従って表示されます。

 
Alexey Kozitsyn:

LKMでグラフの線の選択解除ができないときはどうすればいいですか?邪魔をする...

できないってどういうこと?

詳細を教えてください

 
Slava:

できないってどういうこと?

詳細を教えてください

ダック...ここで...前の記事のインジケーターを 使った実験中そして...何かが壊れました。そのため、現在は山線を作成すると選択状態になり、マウスで山線をダブルクリックしてもこの選択状態が解除されないようになっています。黙っていられない-セレクションは外せない。どんなグラフでも、たとえ空のグラフでも。