Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1389

 
Vitaly Muzichenko:

Frage: Ein Panel wird mit einer Größe von 370 erstellt, wie kann ich es auf 200 verkleinern, wenn ich das Diagramm komprimiere?

und was ist das Problem mit Neuzeichnen? löschen und neu zeichnen, das einzige Problem ist innerhalb des Panels, wenn es plötzlich kleiner wird als erforderlich. und dann die Rollen. Wenn Sie die Breite in Prozent angeben können, wäre das nicht schlecht.

HZZ in Chrome etwas passiert ist, meine Website in den Motor (in php), das Fenster Breite Prozentsatz funktioniert, Höhe will nicht das Minimum sein, nur wenn explizit in Pixel angegeben, es funktioniert, Betriebssystem, auch nicht mehr unter den Prozentsatz Höhe, die mosilla so weit funktioniert. Aber in Chrome können Sie die Werte im Code der Seite ändern, und alles funktioniert)

 
Valeriy Yastremskiy:

Was ist das Problem mit Neuzeichnen? löschen und neu zeichnen, ist das einzige Problem innerhalb des Panels, wenn es plötzlich kleiner als erforderlich wird. und dann die Rollen. Wenn Sie die Breite als Prozentsatz angeben können, wäre das keine schlechte Sache.

...

Das ist der Punkt, ich möchte es neu zeichnen, aber ich habe keine Möglichkeit gefunden, es zu tun, und ich habe es später gefunden:

ExtDialog.Height(ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)-50);

Das Panel selbst wird in der Größe angepasst, der Inhalt jedoch nicht. Wie kann ich es neu zeichnen?

Vollständiger Code, Indikator:

#include <Controls\Dialog.mqh>
#include <Controls\ListView.mqh>

//+------------------------------------------------------------------+
//| Class CPanelDialog                                               |
//| Usage: main dialog of the SimplePanel application                |
//+------------------------------------------------------------------+
class CPanelDialog : public CAppDialog
  {
private:
   CListView         m_list_view;                     // the list object
   
public:
                     CPanelDialog(void);
                    ~CPanelDialog(void);
   //--- create
   virtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);
   //--- chart event handler
   virtual bool      OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);
   virtual void      OnChangeListView(void);
protected:
   //--- create dependent controls
   bool              CreateListView(void);
   //--- internal event handlers
   virtual bool      OnResize(void);
   //--- handlers of the dependent controls events
  // void              OnChangeListView(void);
   bool              OnDefault(const int id,const long &lparam,const double &dparam,const string &sparam);
  };
  
//+------------------------------------------------------------------+
//| Event Handling                                                   |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CPanelDialog)
ON_EVENT(ON_CHANGE,m_list_view,OnChangeListView)
ON_OTHER_EVENTS(OnDefault)
EVENT_MAP_END(CAppDialog)
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CPanelDialog::CPanelDialog(void)
  {
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CPanelDialog::~CPanelDialog(void)
  {
  }
//+------------------------------------------------------------------+
//| Create                                                           |
//+------------------------------------------------------------------+
bool CPanelDialog::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
  {
   if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
      return(false);
//--- create dependent controls
   if(!CreateListView())
      return(false);
//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Create the "ListView" element                                    |
//+------------------------------------------------------------------+
bool CPanelDialog::CreateListView(void)
  {
//--- coordinates
   int x1=0;
   int y1=0;
   int x2=ClientAreaWidth();
   int y2=ClientAreaHeight();
//--- create
   if(!m_list_view.Create(m_chart_id,m_name+"ListView",m_subwin,x1,y1,x2,y2))
      return(false);
   if(!Add(m_list_view))
      return(false);
   m_list_view.Alignment(WND_ALIGN_HEIGHT,0,0,0,0);
//--- fill out with strings
   for(int i=0;i<25;i++)
      if(!m_list_view.ItemAdd("Item "+IntegerToString(i)))
         return(false);

//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Handler of resizing                                              |
//+------------------------------------------------------------------+
bool CPanelDialog::OnResize(void)
  {
//--- call method of parent class
   if(!CAppDialog::OnResize()) return(false);

//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CPanelDialog::OnChangeListView(void)
  {
  
  }
//+------------------------------------------------------------------+
//| Rest events handler                                                    |
//+------------------------------------------------------------------+
bool CPanelDialog::OnDefault(const int id,const long &lparam,const double &dparam,const string &sparam)
  {

//--- let's handle event by parent
   return(false);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                                                  SimplePanel.mq4 |
//|                   Copyright 2009-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2009-2014, MetaQuotes Software Corp."
#property link      "http://www.mql4.com"
#property version   "1.00"
#property strict

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0


//+------------------------------------------------------------------+
//| Global Variables                                                 |
//+------------------------------------------------------------------+
CPanelDialog ExtDialog;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
{
//--- create application dialog
   if(!ExtDialog.Create(0,"Spread",0,12,12,250,300))
      return(INIT_FAILED);
//--- run application
   if(!ExtDialog.Run())
      return(INIT_FAILED);
//--- ok
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy application dialog
   ExtDialog.Destroy(reason);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
{
//---

//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   ExtDialog.ChartEvent(id,lparam,dparam,sparam);

   if(id==CHARTEVENT_CHART_CHANGE || (id==CHARTEVENT_OBJECT_CLICK && StringFind(sparam,"MinMax")>0)) {
      if(ExtDialog.Height()>40) {
         ExtDialog.Height(ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)-50);
         ExtDialog.OnChangeListView();
      }
     // Print(ExtDialog.Height());
   }
}
//+------------------------------------------------------------------+
 
Vitaly Muzichenko:

Das ist es ja, ich will es neu zeichnen, aber ich habe keine Möglichkeit gefunden, es zu tun, und ich habe es später gefunden:

Das Panel selbst wird in der Größe verändert, der Inhalt jedoch nicht. Wie kann ich es neu zeichnen?

Vollständiger Code, Indikator:

Ich bin kein Experte, aber ich würde etwa so vorgehen

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   ExtDialog.ChartEvent(id,lparam,dparam,sparam);

   if(id==CHARTEVENT_CHART_CHANGE || (id==CHARTEVENT_OBJECT_CLICK && StringFind(sparam,"MinMax")>0)) {
      if(ExtDialog.Height()>40) {
         ExtDialog.Destroy();
         ExtDialog.Create(0,"Spread",0,12,12,250,ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)-50);
      }
   }
}
 
MakarFX:

Ich bin kein Experte, aber ich würde etwa so vorgehen

Dies ist ein schlechter Ansatz für den Umzug.

 
Vitaly Muzichenko:

Dies ist ein schlechter Ansatz für den Umzug.

Können wir die Parameter

ClientAreaHeight();

hier?

void CPanelDialog::OnChangeListView(void)
  {
  
  }
 
MakarFX:

Können wir die Parameter

hier drinnen?

Das kann man, aber es löst das Problem nicht.

 
Vitaly Muzichenko:

Das kann man, aber es löst das Problem nicht.

Ich habe mich gefragt... Ich werde darüber nachdenken.
 

Das Bedienfeld wird in der Größe verändert, aber die Größe des Inhalts wird nicht geändert und nicht der gesamte Inhalt wird angezeigt:

#include <Controls\Dialog.mqh>
#include <Controls\ListView.mqh>

//+------------------------------------------------------------------+
//| Class CPanelDialog                                               |
//| Usage: main dialog of the SimplePanel application                |
//+------------------------------------------------------------------+
class CPanelDialog : public CAppDialog
  {
public:
   CListView         m_list_view;                     // the list object
   
public:
                     CPanelDialog(void);
                    ~CPanelDialog(void);

   virtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);
   virtual bool      OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);
   virtual void      OnChangeListView(void);
   
protected:
   bool              CreateListView(void);
   virtual bool      OnResize(void);
   bool              OnDefault(const int id,const long &lparam,const double &dparam,const string &sparam);
  };
  
//+------------------------------------------------------------------+
//| Event Handling                                                   |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CPanelDialog)
ON_EVENT(ON_CHANGE,m_list_view,OnChangeListView)
ON_OTHER_EVENTS(OnDefault)
EVENT_MAP_END(CAppDialog)
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CPanelDialog::CPanelDialog(void)
  {
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CPanelDialog::~CPanelDialog(void)
  {
  }
//+------------------------------------------------------------------+
//| Create                                                           |
//+------------------------------------------------------------------+
bool CPanelDialog::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
  {
   if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
      return(false);
//--- create dependent controls
   if(!CreateListView())
      return(false);
//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Create the "ListView" element                                    |
//+------------------------------------------------------------------+
bool CPanelDialog::CreateListView(void)
  {
//--- coordinates
   int x1=0;
   int y1=0;
   int x2=ClientAreaWidth();
   int y2=ClientAreaHeight();
//--- create
   m_list_view.Create(0,m_name+"ListView",0,x1,y1,x2,y2);
   m_list_view1.ColorBackground(clrMistyRose);
   if(!Add(m_list_view))
      return(false);
   m_list_view.Alignment(WND_ALIGN_HEIGHT,0,0,0,0);
//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Handler of resizing                                              |
//+------------------------------------------------------------------+
bool CPanelDialog::OnResize(void)
  {
//--- call method of parent class
   if(!CAppDialog::OnResize()) return(false);

//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CPanelDialog::OnChangeListView(void)
  {
   
  }
//+------------------------------------------------------------------+
//| Rest events handler                                                    |
//+------------------------------------------------------------------+
bool CPanelDialog::OnDefault(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_CHART_CHANGE || (id==CHARTEVENT_OBJECT_CLICK && StringFind(sparam,"MinMax")>0)) {
      if(ExtDialog.Height()>40) {
        ExtDialog.Height((int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)-50); // меняем размер окна
        m_list_view.Height(ExtDialog.Height()-40); // меняем размер содержимого - работает странно
      }
   }
//--- let's handle event by parent
   return(false);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#property version "1.00"
#property strict

#property indicator_chart_window


//+------------------------------------------------------------------+
//| Global Variables                                                 |
//+------------------------------------------------------------------+
CPanelDialog ExtDialog;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
{
//--- create application dialog
   if(!ExtDialog.Create(0,"Spread",0,12,12,250,300))
      return(INIT_FAILED);
//--- run application
   if(!ExtDialog.Run())
      return(INIT_FAILED);
//--- ok
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy application dialog
   ExtDialog.Destroy(reason);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,
                 const int prev_calculated,
                 const datetime& time[],
                 const double& open[],
                 const double& high[],
                 const double& low[],
                 const double& close[],
                 const long& tick_volume[],
                 const long& volume[],
                 const int& spread[])
{
 //---
    ExtDialog.m_list_view.ItemsClear();
     for(int i=1;i<40;i++) {
      ExtDialog.m_list_view.ItemAdd("Num "+(string)i+", Item "+(string)ExtDialog.Height());
     // Print(i);
     }
   
//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   ExtDialog.OnEvent(id,lparam,dparam,sparam);
}
//+------------------------------------------------------------------+

Der Inhalt besteht aus 40 Elementen, wobei nur das angezeigt wird, was bei der ersten Erstellung des Dialogs in die Höhe passt.

---

Bei der Lösung helfen kann, wer kann.

 
Vitaly Muzichenko:

Die Größe des Bedienfelds ändert sich, die Größe des Inhalts jedoch nicht, und es wird nicht der gesamte Inhalt angezeigt:

Der Inhalt besteht aus 40 Elementen, wobei nur das angezeigt wird, was bei der ersten Erstellung des Dialogs in die Höhe passt.

---

Bei der Lösung helfen kann, wer kann.

Wollten Sie die Größe des Fensters ändern, ohne die Größe des Inhalts zu verändern??? Und nicht nur die Größe, auch die Koordinaten müssen je nach Größe des Fensters neu berechnet werden. Und sogar die Schriftgröße der Elementbeschriftung...

 
if(Tip==0 && AccountProfit()>=OrderProfit()*Profit + OrderSwap()>0)
              {
              fc=OrderClose(OrderTicket(),lot,Bid, 2);
              } 
              if (Tip==1 && AccountProfit()>=OrderProfit()*Profit + OrderSwap()>0)
              {
               fc=OrderClose(OrderTicket(),lot,Ask,2);
              }       

Ich würde gerne wissen, wie man Orders mit einem Gewinn schließen kann. Sagen wir, ich eröffne 4 Orders, zwei Buy, eine in Eurica und eine Buy auf Chif. Und auch eine Sell / ich setze den Code Profit = 10;

Ich sollte den Code richtig formulieren, so dass zwei Käufe auf den gesamten Gewinn oder zwei Aktien auf den gesamten geschlossen.