MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1039

 

インジケーターパネルを描いているところです。質問ですが、他の下位グラフィックオブジェクトを非透過にするにはどうしたらよいのでしょうか。

一部の線が飛び出し(マウスが引っかかり)、位置を変えようとする。

一般的に、パネルが覆っているオブジェクトから見えないようにするにはどうしたらよいでしょうか。



図1

 
Aleksandr Tyunev:

インジケーターパネルを描いているところです。質問ですが、他の下位グラフィックオブジェクトを非透過にするにはどうしたらよいのでしょうか。

一部の線が飛び出し(マウスが引っかかり)、位置を変えようとする。

一般的に、パネルが覆っているオブジェクトから見えないようにするにはどうしたらよいでしょうか。



正確にはわかりませんが(ライブラリを使ってパネルを作成しているようなので)、可能であれば、この関数でマウスクリックを受け取る際の優先順位を高くする必要があります。

ObjectSetInteger(ChartID(),name,OBJPROP_ZORDER,z_order);
 
jaffer wilson:

2つのステートメント。

プリント:22.33

И

プリント:2.00000

なぜ出力が違うのですか?C / C ++では、上記のステートメントは問題なく動作します。

C言語でも、フォーマット
"%.*lf"

想像していたのと少し違う :-)

最初の引数が精度なので(アスタリスクのようなもの)、その逆を考えて、「2.0000」と出てきてびっくり

PS/MQLプログラミングを学んではいけない。

 
Alexandr Sokolov:

正確にはわかりません(ライブラリを使ってパネルを作成しているようなので)。もし可能であれば、この関数でマウスクリックを受け取る際の優先順位を高くする必要があります。

ライブラリベースでも、オブジェクト =OBJ_RECTANGLE_LABEL だけでも構いません。レベル以下のグラフオブジェクトをカバーする、はうまくいかない。

 
Aleksandr Tyunev:

インジケーターパネルを描いているところです。質問ですが、他の下位グラフィックオブジェクトを非透過にするにはどうしたらよいのでしょうか。

一部の線が飛び出し(マウスが引っかかり)、位置を変えようとする。

一般的に、パネルによって閉じられたオブジェクトから見えないようにするにはどうしたらよいでしょうか。

そういえば、そのことで少し悩んだ時期がありましたね)))

オプション対応。

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {

if(id==CHARTEVENT_MOUSE_MOVE) { 
      
      int      x      =(int)lparam; // Координата по оси X
      int      y      =(int)dparam; // Координата по оси Y
      int      subwin =WRONG_VALUE; // Номер окна, в котором находится курсор
      datetime time   =NULL;        // Время соответствующее координате X
      double   level  =0.0;         // Уровень (цена) соответствующий координате Y
      string MState  =(string)sparam;  // Состояние левой кнопки мыши
      
      if (MState=="0") {
     //--- Получим местоположение курсора
      if(!::ChartXYToTimePrice(ChartID(),x,y,subwin,time,level))
         return;
     
     int obj_total=ObjectsTotal();
      for(int i=obj_total-1;i>=0;i--)
      {
      string name=ObjectName(i);
      // Для координат окна панели
      if (StringSubstr(name,5,10)=="ClientBack") {   // Ищем среди объектов больший (прямоугольник) с именем ClientBack (у меня так называется)
         
         int x_dist, x_size, y_dist, y_size;
         bool stop_selected_all;
         
         x_dist=ObjectGetInteger(ChartID(),name,OBJPROP_XDISTANCE,0);
         y_dist=ObjectGetInteger(ChartID(),name,OBJPROP_YDISTANCE,0);
         
         x_size=ObjectGetInteger(ChartID(),name,OBJPROP_XSIZE,0);
         y_size=ObjectGetInteger(ChartID(),name,OBJPROP_YSIZE,0);
         
         if (((x>x_dist-5)&&(x<x_dist+x_size+5))&&((y>y_dist-24)&&(y<y_dist+y_size))){
         ChartSetInteger(ChartID(),CHART_DRAG_TRADE_LEVELS,false);
         ChartSetInteger(ChartID(),CHART_MOUSE_SCROLL,false);
         //ObjectSetInteger(ChartID(),name,OBJPROP_ZORDER,1);
         //ObjectSetInteger(ChartID(),name,OBJPROP_BORDER_TYPE,BORDER_RAISED);
         if (stop_selected_all==false) {
            int obj_total_1=ObjectsTotal();
            for(int i=obj_total_1-1;i>=0;i--)
            {
            string name_1=ObjectName(i);
            ObjectSetInteger(ChartID(),name_1,OBJPROP_SELECTABLE,false);
            stop_selected_all=true;
            }
            }
         } else {
         ChartSetInteger(ChartID(),CHART_DRAG_TRADE_LEVELS,true);
         ChartSetInteger(ChartID(),CHART_MOUSE_SCROLL,true);
         //ObjectSetInteger(ChartID(),name,OBJPROP_ZORDER,0);
         //ObjectSetInteger(ChartID(),name,OBJPROP_BORDER_TYPE,BORDER_SUNKEN);
            int obj_total_1=ObjectsTotal();
            for(int i=obj_total_1-1;i>=0;i--)
            {
            string name_1=ObjectName(i);
            ObjectSetInteger(ChartID(),name_1,OBJPROP_SELECTABLE,true);
            stop_selected_all=false;
            }
         }
      }
      
      // End. Для координат окна панели
      }
      }
     
      return;
     }
  }

一般的には、このような原則があります。

 
Vyacheslav Nekipelov:

と悩んでいた時期があったのを覚えています))

完成品のバリエーション。

基本的には、このような原理です。

ありがとうございました。原理が明確だから、さらに使いこなす!

 
mql5 chmハンドブックがなぜか正常に動作しない。このページやこのページを選択しても、何も表示されない。何が原因なのか、どうすれば直るのか。
 
Yevhenii Levchenko:
mql5 chmハンドブックがなぜか正常に動作しない。このページやこのページを選択しても、何も表示されない。何が原因なのか、どうすれば直るのか。

ファイルのプロパティでロックを解除する必要があります。

 
よろしくお願いします。ティックインジケーターを持って います。なぜか4桁で表示されるのですが、5桁で表示させたいのです。
#property  indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Aqua
double x[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(1);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,x);
   SetIndexDrawBegin(0,0);
   SetIndexLabel(0,"x");
   SetIndexShift(0,0);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double b=MarketInfo(Symbol(),MODE_BID);
   x[0]=b;
   for(int j=ArraySize(x)-1;j>=1;j--){x[j]=x[j-1];}
   return(0);
  }
//+------------------------------------------------------------------+
Создание тиковых индикаторов
Создание тиковых индикаторов
  • www.mql5.com
При торговле хочется иметь как можно больше информации. Возникает желание видеть более детальную картину изменения цен. Для этого можно использовать тиковый график. Попробуем построить тиковый график средствами MQL5. В этой статье описывается создание двух индикаторов: строящего тиковый график цены и рисующего "тиковые свечи" - свечи...
ファイル:
ticks.png  4 kb
 
Oleg Bondarev:
よろしくお願いします。ティックインジケーターが あります。5桁の値が必要なのに、なぜか4桁の値が表示される。

インジケーターデジット(5)