新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1039

 

我正在画我的指示器面板。我有一个问题,如何使它对其他低层图形对象不透明。

一些线条跳出来(鼠标抓住),试图改变它们的位置。

一般来说,如何使面板对它所覆盖的对象不可见?



图1

 
Aleksandr Tyunev:

我正在画我的指示器面板。我有一个问题,如何使它对其他低层图形对象不透明。

一些线条跳出来(鼠标抓住),试图改变它们的位置。

一般来说,如何使面板对它所覆盖的对象不可见?



我不太确定(因为看起来你是用库来创建你的面板的)--如果可能的话,你应该用这个函数让面板在接收鼠标点击时拥有更高的优先权

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

两个声明。

打印: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:
请帮助。有一个滴答指示器。由于某些原因,它显示的是4位数的数值,而我需要的是5位数的。

指标数字(5)

原因: