MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1389

 
Vitaly Muzichenko :

Soru: 370 boyutunda bir panel oluşturuluyor, grafiği sıkıştırırken boyutu nasıl 200 olarak değiştirebilirim?

Yeniden çizmeyle ilgili sorun nedir? sil ve yeniden çiz, soru sadece panelin içinde, eğer aniden gerekenden daha küçük hale gelirse. ve sonra kaydırır. Genişliği yüzde olarak belirtebilirseniz, fena olmaz.

Kromda tehdit bir şey oldu, sitemde motorda (php'de) pencerenin genişliği yüzde olarak çalışıyor, yükseklik minimuma ayarlanmak istemiyor, sadece açıkça piksel olarak belirttiğimde çalışıyor, çalışıyor opera da yükseklik yüzdelerini kabul etmeyi bıraktı, Mozilla hala çalışıyor. AMA chrome'da, koddaki değerleri sayfa kodundan değiştirebilirsiniz ve her şey çalışır)

 
Valeriy Yastremskiy :

Yeniden çizmeyle ilgili sorun nedir? sil ve yeniden çiz, soru sadece panelin içinde, eğer aniden gerekenden daha küçük hale gelirse. ve sonra kaydırır. Genişliği yüzde olarak belirtebilirseniz, fena olmaz.

...

İşin aslı, yeniden çizmek istiyorum ama nasıl yapacağımı bulamadım ve daha sonra buldum:

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

Panelin kendisi yeniden boyutlandırılıyor, ancak içerik değişmiyor, onu nasıl yeniden çizebilirim?

Tam kod, gösterge:

 #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 :

İşin aslı, yeniden çizmek istiyorum ama nasıl yapacağımı bulamadım ve daha sonra buldum:

Panelin kendisi yeniden boyutlandırılıyor, ancak içerik değişmiyor, onu nasıl yeniden çizebilirim?

Tam kod, gösterge:

Uzman değilim ama böyle bir şey yapardım

 //+------------------------------------------------------------------+
//| 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 :

Uzman değilim ama böyle bir şey yapardım

Bu silme ile kötü bir yaklaşımdır.

 
Vitaly Muzichenko :

Bu silme ile kötü bir yaklaşımdır.

parametreleri ayarlayabilir misin

ClientAreaHeight();

burada?

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

parametreleri ayarlayabilir misin

burada?

Mümkün, ancak sorunu çözmez

 
Vitaly Muzichenko :

Mümkün, ancak sorunu çözmez

Merak ediyordum... Bunu düşüneceğim.
 

Panel boyutu değişir, ancak içerik boyutu değişmez ve tüm içerik görüntülenmez:

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

40 öğelik bir içerikle, yalnızca iletişim kutusu ilk oluşturulduğunda yükseklik boyutuna uyanlar görüntülenir.

---

Çözüme yardımcı olun, kim yapabilir.

 
Vitaly Muzichenko :

Panel boyutu değişir, ancak içerik boyutu değişmez ve tüm içerik görüntülenmez:

40 öğelik bir içerikle, yalnızca iletişim kutusu ilk oluşturulduğunda yükseklik boyutuna uyanlar görüntülenir.

---

Çözüme yardımcı olun, kim yapabilir.

Ve içeriği yeniden boyutlandırmadan pencereyi yeniden boyutlandırmak istediniz mi??? Ve sadece boyutlar değil, aynı zamanda koordinatlar da pencerenin boyutuna bağlı olarak yeniden hesaplanmalıdır. Ve hatta eleman etiketlerinin yazı tipi boyutu

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

beyler botlara yardım edin :)) Bir şey bilmek istiyorum.Karda siparişler nasıl kapatılır Diyelim ki 4 sipariş açtım !!.İki alım.On;

Kod nasıl doğru formüle edilir, örneğin, Ortak bir Kar'a göre kapanan iki koy veya ortak bir alana göre kapatılan iki köy. 4'ü de ortak bir tanesine göre değil, çiftler halinde Bu kodla oynadım.