Tuval harika! - sayfa 73

 
Vitaliy Kuznetsov #:

Birisi lütfen Düzenleme Kutusunu tuvale dönüştürmek için hazır bir kod olup olmadığını bildirebilir mi?

Lastik bir panel yapıyorum ve böyle bir elemana ihtiyacım var. Üzerine tıkladığınızda, sayıları girmeniz ve silmeniz ve yanıp sönen bir imleç görmeniz gerekir.

Değilse, üzerine tıkladığımda normal bir değişiklik yapacağım.

Birisi bunu yaptı ve grafiklerle değil, girişle ilgili sorunlar vardı - MetaTrader normal düğmeleri (Enter / Tab) ve genel olarak Tuşa Basma / Yineleme / Bırakma işlemlerini "sürükledi / işledi".

Bir DLL almak ve Windows Kontrol penceresini veya Notepad.exe'yi gömmek daha kolaydır.

Bilgi eksikliğinden dolayı birkaç gün uğraştım (bugünlerde düşük seviyeli şeyleri bulmak zor, çok az var), ama sonunda kod iki kat daha az olacak ve daha iyi çalışacak.

 
Vitaliy Kuznetsov #:

Birisi lütfen Düzenleme Kutusunu tuvale dönüştürmek için hazır bir kod olup olmadığını bildirebilir mi?

...

EasyAndFastGUI - grafik arayüzler oluşturmak için kütüphane >>>

TextBox.mqh dosyasına bakın

EasyAndFastGUI - библиотека для создания графических интерфейсов
EasyAndFastGUI - библиотека для создания графических интерфейсов
  • www.mql5.com
Библиотека EasyAndFastGUI дает возможность создавать графические интерфейсы для своих MQL-программ.
 
Hepinize teşekkür ederim, farklı seçenekleri deneyeceğim
 
Maxim Kuznetsov #:

Birisi yaptı, grafiklerle değil, girişle ilgili sorunlar vardı - MetaTrader normal düğmeleri (Enter / Tab) ve genel olarak Tuşa Basma / Tekrarlama / Bırakma işlemlerini "sürükledi / işledi".

Bir DLL almak ve Windows Kontrol penceresini veya Notepad.exe'yi gömmek daha kolaydır.

Bilgi eksikliğinden dolayı birkaç gün mate (bugünlerde düşük seviyeli şeyleri bulmak zor, bunlardan çok az var), ama sonunda kod iki kat daha az olacak ve daha iyi çalışacak.

Bu arada "zambed" ve farklı deneyleri hatırlama hakkında: pencereler gömülü, ancak yeniden çizim ve giriş ile ilgili sorunlar var. Sadece kullanılabilir değil, "potansiyel olarak çalıştığı gerçeğinde" durdum

Ancak bu şaşırtıcı değil - EA'lar bir yolda, grafiğin GUI'si başka bir yolda çalışıyor ve görünüşe göre orada da farklı şeyler var.
Gerekli tüm mesajların gönderilmesi ve görüntülemenin doğru şekilde işlenmesi için Windows'u bir şekilde açıklamak gerekir. Her şeyi başka bir izde olan bir kontrol (win açısından, sonuçta bir pencere) olduğunda oldukça tipik bir GUI tasarımı değil.

Elbette, burada biraz çıkmazdayım, Linux uygulaması elverişli değil. Uzman sürecine bazı (ne?) bayraklar ayarlamak (işletim sistemi açısından, göründüğü gibi bir GUI basamağı değildir ve bir kısmı ona uçmaz) ve / veya AttachThreadInput'u çekmek gerekir.

Böyle bir sorun çözülürse, DLL'lerden korkmayanlar için umutlar parlaktır:

- Gtk/Qt/Lazarus'u tasarımcıları ve gerçekten iyi grafikleriyle "grafik içindeki diyaloglar" için kullanmak mümkün olacaktır (ve üst düzey yapılır, ancak her zaman uygun değildir, yine de kullanıcı grafikle çalışır)

- kendi "sekmelerinizi" yapmak mümkün olacak - MDI içinde ve "grafikte bir pencere çiz" seçeneğinden "MT'de bir sekme yap" seçeneğine yarım adım. Her türlü pano/pano yeni bir grafik açmayı gerektirmeyecek

Evet, hack seviyesinde :-)

 
Vitaliy Kuznetsov #:

Birisi lütfen Düzenleme Kutusunu tuvale dönüştürmek için hazır bir kod olup olmadığını bildirebilir mi?

Lastik bir panel yapıyorum ve böyle bir elemana ihtiyacım var. Üzerine tıkladığınızda, sayıları girmeniz ve silmeniz ve yanıp sönen bir imleç görmeniz gerekir.

Değilse, üzerine tıkladığımda normal bir değişiklik yapacağım.

Bu tür EditCtrl (temel) için örnek kod

//+------------------------------------------------------------------+
//|                                                     EditCtrl.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Canvas/Canvas.mqh>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CControl : protected CCanvas
  {
public:

   bool              Create(int x,int y,int w,int h)
     {
      if(!CCanvas::CreateBitmapLabel("TEST_EDIT",x,y,w,h,COLOR_FORMAT_ARGB_NORMALIZE))
         return(false);
      if(!OnCreate())
         return(false);

      Update();
      return(true);
     }

   void              TimerSet(uint msec)
     {
      if(msec)
         EventSetMillisecondTimer(msec);
      else
         EventKillTimer();
     }

   void              Update(void)
     {
      OnDraw(this);
      CCanvas::Update();
     }

   virtual bool      OnCreate(void) { return(true); }
   virtual void      OnKeyDown(int key,uint flags) { }
   virtual void      OnTimer(void) { }
   virtual void      OnDraw(CCanvas &canvas) { }
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CEditCtrl : public CControl
  {
protected:
   string            m_text;
   uint              m_cursor_pos;
   bool              m_cursor_visible;

public:
   virtual bool      OnCreate(void)
     {
      m_cursor_pos    =0;
      m_cursor_visible=true;
      m_text          ="";
      TimerSet(500);
      return(true);
     }

   virtual void      OnKeyDown(int key,uint flags)
     {
      short code;

      switch(key)
        {
         case 35: // END
            if(m_cursor_pos==m_text.Length())
               return;
            m_cursor_pos=m_text.Length();
            break;
         case 36: // HOME
            if(m_cursor_pos==0)
               return;
            m_cursor_pos=0;
            break;
         case 37: // LEFT
            if(m_cursor_pos==0)
               return;
            m_cursor_pos--;
            break;
         case 39: // RIGHT
            if(m_cursor_pos>=m_text.Length())
               return;
            m_cursor_pos++;
            break;
         default:
            if((code=TranslateKey(key))==-1)
               return;

            if(code<32)
              {
               if(code==8 && m_cursor_pos)
                 {
                  m_text=m_text.Substr(0,m_cursor_pos-1) + m_text.Substr(m_cursor_pos,-1);

                  if(--m_cursor_pos>m_text.Length())
                     m_cursor_pos=m_text.Length();
                     
                  break;
                 }

               return;
              }

            if(m_cursor_pos!=m_text.Length())
               m_text = m_text.Substr(0,m_cursor_pos) + "\xFFFF" + m_text.Substr(m_cursor_pos,m_text.Length());

            m_text.SetChar(m_cursor_pos,code);
            m_cursor_pos++;
            break;
        }

      Update();
     }

   virtual void      OnTimer(void)
     {
      m_cursor_visible=!m_cursor_visible;
      Update();
     }

   virtual void      OnDraw(CCanvas &canvas)
     {
      CCanvas::Erase(ARGB(255,255,255,255));

      if(m_text.Length())
         canvas.TextOut(0,0,m_text,ARGB(255,0,0,0));

      if(m_cursor_visible)
        {
         int x=0,y;

         if(m_cursor_pos)
            canvas.TextSize(m_text.Substr(0,m_cursor_pos),x,y);

         canvas.FillRectangle(x,0,x,canvas.Height(),ARGB(255,0,0,0));
        }
     }
  };

CEditCtrl ExtEditCtrl;
CControl *ExtInputFocus=&ExtEditCtrl;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   ExtEditCtrl.Create(100,100,200,20);

   ChartSetInteger(0,CHART_QUICK_NAVIGATION,false);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer(void)
  {
   ExtInputFocus.OnTimer();
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_KEYDOWN)
      ExtInputFocus.OnKeyDown((int)lparam,(uint)sparam);
  }
//+------------------------------------------------------------------+
 
Ilyas #:

Bu tür EditCtrl (temel) için örnek kod

Teşekkür ederim. Biraz sonra MT5 üzerinde deneyeceğim.

 
Ilyas #:

Bu tür EditCtrl (temel) için örnek kod

Kaliteli kodun iyi bir öğretici örneği için teşekkürler İlyas
 
Ilyas #:

Bu tür EditCtrl (temel) için örnek kod

Nesnenin silinmemesi için backspace özelliğini devre dışı bırakmanın bir yolu var mı?

 
Aleksei Beliakov #:

Nesnenin silinmemesi için backspace özelliğini devre dışı bırakmanın bir yolu var mı?

int OnInit()
  {
   ChartSetInteger(0,CHART_EVENT_OBJECT_CREATE,true);   
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_OBJECT_CREATE)
     {
      ObjectSetInteger(0,sparam,OBJPROP_HIDDEN,true);
      ChartRedraw();
      Print(sparam);
     }
  }
 
Ilyas #:
Bu özelliği ayarlasam bile nesne backspace ile siliniyor, belki de seçili olduğu içindir?
Oluşturma süresi daha kısa ise bir nesneyi başka bir nesnenin üstüne yerleştirmenin bir yolu var mı?
Örneğin bir bitmap label nesnesi oluşturuyorum, sonra başka bir nesne oluşturuyorum, bitmaplabel ondan sonra oluşturulan nesnelerin altında kalıyor
Soru, silip yeniden oluşturmak dışında, bitmap etiketini ondan sonra oluşturulan nesnelerin üstüne koymanın bir yolu var mı?
Neden: