Bibliotheken: Die Bibliothek EasyAndFastGUI zum Erstellen von grafischen Interfaces - Seite 15

 
Ist ein visueller Formulardesigner geplant?
 
Anatoli Kazharski

Hallo ... gibt es eine Möglichkeit, Dialogfenster mit dieser Version der Bibliothek zu öffnen. Dialogfenster funktioniert nur mit Farbwähler, und wenn ich versuche, eine nur leer zu erstellen, um einige Tabelle oder zusätzliche Tasten einfügen, dann ist überhaupt nicht funktionieren, ist nur auf und ist nicht beweglich.

Bitte helfen Sie mir ... dies ist eine absolut schöne Bibliothek, und ich danke Ihnen sehr für die Bereitstellung, aber dieses Detail schränkt die Funktionalität stark ein

wenn wir ein einzelnes Fenster benutzen ist alles in Ordnung nur das Dialogfenster funktioniert nicht richtig, oder war das von Anfang an so geplant?)


PS

Falls ich falsch liege, gibt es ein Beispiel, wie man ein Dialogfenster öffnet und einen einzelnen Button darin hat oder etwas anderes (nur nicht den Farbwähler)?

Ich benutze MT5

 
Farrukh Aleem:

In der MT4-Version von SimpleButton fehlt die Funktion zum Ändern des Button-Textes/der Button-Beschriftung.


SimpleButton.mqh

Fügen Sie die zweite Zeile hinzu, um diese Funktion zu erhalten. Hier gepostet, hoffentlich hilft es jemandem, der es braucht.

die Bibliothek aus diesem Artikel ist nur für MT5 und wenn jemand den Text ändern möchte:

lableClassDeclarationName.LabelText(textValue);
lableClassDeclarationName.Update(true);
 
Stanislav Korotky:
Gibt es Pläne für einen visuellen Formulardesigner?

Wir haben schon früher darüber nachgedacht, aber leider ist dafür noch keine Zeit.

Eine neue Version der Bibliothek wird bald veröffentlicht werden. Es wird viel einfacher und schneller sein, GUI zu erstellen. Danach können wir versuchen, einen visuellen Editor zu erstellen.

 
Marcin Rutkowski:

Hallo ... gibt es eine Möglichkeit, Dialogfenster mit dieser Version der Bibliothek zu öffnen. Dialogfenster funktioniert nur mit Farbwähler, und wenn ich versuche, eine nur leer zu erstellen, um einige Tabelle oder zusätzliche Tasten einfügen, dann ist überhaupt nicht funktionieren, ist nur auf und ist nicht beweglich.

Bitte helfen Sie ... dies ist absolut schöne Bibliothek, und ich danke Ihnen sehr für die gemeinsame Nutzung, aber dieses Detail ist eine Menge der Funktionalität reduziert

wenn wir ein einzelnes Fenster verwenden, ist alles in Ordnung, nur das Dialogfenster funktioniert nicht richtig, oder war das von Anfang an so geplant??:)


PS

Falls ich falsch liege, gibt es ein Beispiel dafür, wie man ein Dialogfenster öffnet und eine einzelne Schaltfläche darin hat oder etwas anderes (nur nicht den Farbwähler)?

Ich benutze MT5

Hallo Marcin, schreibe deine Funktion für die Erstellung von Objekten (inklusive Dialogfenster). Zum Beispiel:

Zuerst deklarierst du die Dialogfenster und andere Steuerelemente (Schaltflächen, Textfelder, Kontrollkästchen und so weiter) in der Program.mqh:

class CProgram : public CWndEvents
  {
protected:
  
   
   CWindow           m_window;//Hauptfenster
   CWindow           s_window;//Dialog-Unterfenster
  
   CButton           m_ibut1;
   CButton           m_ibut2;
   CTextBox          t_box1;
   CCheckBox         m_checkb1;
....

In der MainWindow.mqh:

   //-Hauptfensterfunktion:
 bool CProgram::CreateWindow(const string caption_text)
  {
//--- Hinzufügen des Fensterzeigers zum Fenster-Array
   CWndContainer::AddWindow(m_window);
//--- Koordinaten
   int x=(m_window.X()>0) ? m_window.X() : 20;
   int y=(m_window.Y()>0) ? m_window.Y() : 30;
//--- Eigenschaften
   m_window.XSize(253);
   m_window.YSize(350);
   m_window.IsMovable(true);
   m_window.Alpha(200);
   m_window.IconXGap(3);
   m_window.IconYGap(2);
   m_window.WindowType(W_MAIN);
   m_window.CloseButtonIsUsed(true);
   m_window.CollapseButtonIsUsed(true);
   m_window.TooltipsButtonIsUsed(false);
//--- Einstellen der Tooltips
   m_window.GetCloseButtonPointer().Tooltip("Close");
   m_window.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  // m_window.GetTooltipButtonPointer().Tooltip("Tooltips");
//--- Erstellen eines Formulars
   if(!m_window.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }
 //----für dialog(subwindow): 
bool CProgram::CreateSubWindow(CWindow &win,const int xSize,const int ySize,const string caption_text)
  {
//--- Hinzufügen des Fensterzeigers zum Fenster-Array
   CWndContainer::AddWindow(win);
//--- Koordinaten
   int x=(win.X()>0) ? win.X() : 150;
   int y=(win.Y()>0) ? win.Y() : 70;
//--- Eigenschaften
   win.XSize(xSize);//350
   win.YSize(ySize);//170
   win.IsMovable(true);
   win.Alpha(200);
   win.IconXGap(3);
   win.IconYGap(2);
   win.WindowType(W_DIALOG);
   win.CloseButtonIsUsed(true);
   win.CollapseButtonIsUsed(true);
   win.TooltipsButtonIsUsed(false);
 
 // m_window.IconFile("\\Images\\EasyAndFastGUI\\Icons\\bmp16\\advisor.bmp");
//--- Einstellen der Tooltips
   win.GetCloseButtonPointer().Tooltip("Close");
   win.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  // m_window.GetTooltipButtonPointer().Tooltip("Tooltips");
//--- Erstellen eines Formulars
   if(!win.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }  
Für andere Steuerelemente (Buttons, Textboxen...) verwenden Sie den Mainpoiner (Fenster oder Tab) und den Index davon (in meinem Fall "windex") von Anfang an:
bool CProgram::CreateTextBox(CTextBox &t_box,CWindow &win,const int windex,const int x_gap,const int y_gap,const int Xsize,const int Ysize,
                                          string text,const uint line_index,const int fontSize,const bool mlinemode)
  {
       t_box.MainPointer(win);
 
//--- Eigenschaften
   t_box.XSize(Xsize);
   t_box.YSize(Ysize);
   t_box.FontSize(fontSize);
   t_box.Font("Calibri"); // Consolas|Calibri|Tahoma
   t_box.TextYOffset(2);
   t_box.TextXOffset(2);
   t_box.BackColor(clrWhite);
   t_box.BorderColor(C'150,170,180');
   t_box.LabelColor(clrBlack);
   t_box.WordWrapMode(true);
   t_box.ReadOnlyMode(false);
   t_box.IsCenterText(true);
   t_box.MultiLineMode(mlinemode);
   t_box.AutoYResizeBottomOffset(3);
   t_box.AutoXResizeRightOffset(3);
   t_box.AddText(line_index,text);
   t_box.IsVisible(true);
//--- An Registerkarte anhängen
  // tab.AddToElementsArray(tindex,t_box);
//--- Ein Steuerelement erstellen
   if(!t_box.CreateTextBox(x_gap,y_gap))
      return(false);
//--- Hinzufügen des Objekts zu dem gemeinsamen Array von Objektgruppen
   CWndContainer::AddToElementsArray(windex,t_box);
  return(true);
  } 
//----------win button--------
bool CProgram::CreateIconButton(CButton &i_but,CWindow &win,const int windex,const int x_gap,const int y_gap,const int Xsize,const int Ysize,
                                              string text, bool twostate,color bckclr)
  {
//--- Speichern des Zeigers auf das Hauptsteuerelement
   i_but.MainPointer(win);
//--- Eigenschaften
   i_but.XSize(Xsize);
   i_but.YSize(Ysize);
   i_but.IconXGap(3);
   i_but.IconYGap(3);
   i_but.TwoState(twostate);
   i_but.BackColor(bckclr);
   i_but.BorderColor(clrBlack);
   i_but.IsCenterText(true);
   i_but.IsPressed(false);
   if(i_but.TwoState()==true)
     {i_but.BackColorPressed(bckclr);
     i_but.BackColor(clrSilver);}
   else
     i_but.BackColor(bckclr);
//--- An Registerkarte anhängen
  // tab.AddToElementsArray(tindex,i_but);

//--- Ein Steuerelement erstellen
   if(!i_but.CreateButton(text,x_gap,y_gap))
      return(false);
//--- Hinzufügen des Zeigers auf das Steuerelement zur Basis
   CWndContainer::AddToElementsArray(windex,i_but);
   return(true);
  } 
//-----------tab button--------------
bool CProgram::CreatetabIconButton(CButton &i_but,CTabs &tab,const int tindex,const int x_gap,const int y_gap,const int Xsize,const int Ysize,
                                              string text, bool twostate,color bckclr)
  {
//--- Speichern des Zeigers auf das Hauptsteuerelement
   i_but.MainPointer(tab);
//--- Eigenschaften
   i_but.XSize(Xsize);
   i_but.YSize(Ysize);
   i_but.IconXGap(3);
   i_but.IconYGap(3);
   i_but.TwoState(twostate);
   i_but.BackColor(bckclr);
   i_but.BorderColor(clrBlack);
   i_but.IsCenterText(true);
   i_but.IsPressed(false);
   if(i_but.TwoState()==true)
     {i_but.BackColorPressed(bckclr);
     i_but.BackColor(clrSilver);}
   else
     i_but.BackColor(bckclr);
//--- An Registerkarte anhängen
   tab.AddToElementsArray(tindex,i_but);

//--- Ein Steuerelement erstellen
   if(!i_but.CreateButton(text,x_gap,y_gap))
      return(false);
//--- Hinzufügen des Zeigers auf das Steuerelement zur Basis
   CWndContainer::AddToElementsArray(0,i_but);
   return(true);
  }
 //----checkboxen----------
bool CProgram::CreateCheckBox(CCheckBox &check,CWindow &win,const int windex,const int x_gap,const int y_gap,const int Xsize,const int Ysize,string text)
  {
//--- Speichern des Zeigers auf das Hauptsteuerelement
   check.MainPointer(win);
//--- Eigenschaften vor der Erstellung festlegen
   check.XSize(Xsize);
   check.YSize(Ysize);
   check.IsPressed(false);


//--- Ein Steuerelement erstellen
   if(!check.CreateCheckBox(text,x_gap,y_gap))
      return(false);
//--- Hinzufügen des Objekts zu dem gemeinsamen Array von Objektgruppen
    CWndContainer::AddToElementsArray(windex,check);
   return(true);
  }      

Nun zurück zu Program.mqh: Erstellen Sie die Steuerelemente

bool CProgram::CreateGUI()
  {

if(!CreateWindow("EA Panel"))
      return(false);
if(!CreateSubWindow(s_window,280,200,"SubWindow"))
  return(false);
if(!CreatetabIconButton(m_ibut1,m_tabs1,2,80,125,80,15,"Button 1",false,clrSilver))
        return(false);   
   if(!CreateIconButton(m_ibut2,s_window,3,70,150,60,20,"Button 2",false,clrSilver))
            return(false);       
   if(!CreateTextBox(t_box1,s_window,3,100,70,30,20," ",0,10,false))
      return(false);
   if(!CreateCheckBox(m_checkb1,s_window,3,20,70,70,20,"CheckBox1"))
      return(false); 
…...
….

CwndEvents::CompletedGUI();
return(true);
} 

Wie Sie sehen können, habe ich Tabs auf meinem Hauptpanel verwendet, also schreibe ich eine weitere Funktion für den Button. Dann in der OnEvent Funktion:

void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_BUTTON)
       {
       if(lparam==m_ibut1.Id())
         {
         s_window.OpenWindow();
         }
       }
   ....
....
  }

Kompilieren und laden Sie den EA. Mein EA, der die EasyAndFastGUI-Bibliothek verwendet, sieht wie folgt aus:

 

Guten Tag, kompiliert Build 15 der Bibliothek unter mt4, erstellt ein Panel mit Tabellen, aber die Tabellen flackern periodisch, unter mt5 auch bemerkt dies. Wenn ich keinen Parameter an die Methode übergeben, verschwindet das Flackern, aber die Daten in der Tabelle nicht ändern. Testcode im Archiv angehängt.

   if(m_counter2.CheckTimeCounter())
     {
      SetValuesToTradeTable();
      UpdateTradeTable(true);

      //--- Abrufen der Symbole der offenen Positionen
      string symbols_name[];
      int symbols_total=GetPositionsSymbols(symbols_name);
      //--- Werte in der Tabelle aktualisieren
      SetValuesToPositionsTable(symbols_name);
      //--- Sortieren, wenn dies bereits vor der Aktualisierung durch den Benutzer geschehen ist
      //m_table_positions.SortData((uint)m_table_positions.IsSortedColumnIndex(),m_table_positions.IsSortDirection());
      //--- Tabelle aktualisieren
      UpdatePositionsTable(true);
     }
Dateien:
 
zlory73:

Hallo Marcin, schreibe deine Funktion für die Erstellung von Objekten (inklusive Dialogfenster). Zum Beispiel:

Zuerst deklarieren Sie die Dialogfenster und andere Steuerelemente (Schaltflächen, Textfelder, Kontrollkästchen und was auch immer) in der Program.mqh:

In der MainWindow.mqh:

Wow ..danke für die Antwort ..nur um zu bestätigen, aus welchem Artikel Sie die Bibliothek heruntergeladen haben ...mein Fortschritt ist 1 Schritt vorwärts, aber alle Objekte, die mit dem Dialogfenster verknüpft sind, können nicht gezogen werden und verschwinden nicht richtig ...Wenn Sie mir auch den Link zu dem Artikel schicken könnten oder einfach nur bestätigen, ob der Link unten richtig ist :) ..von wo haben Sie Ihre Bibliothek heruntergeladen

https://www.mql5.com/de/code/19703


Ich werde weiterhin versuchen, dass es funktioniert :) ich muss nicht sehen, einige kleine Fehler in meinem Code :) ...danke nochmals

EasyAndFastGUI library for creating graphical interfaces
EasyAndFastGUI library for creating graphical interfaces
  • www.mql5.com
The EasyAndFastGUI library allows creating graphical interfaces for custom MQL programs.
 

Ich habe das Flackern der Tabelle behoben, bzw. das Problem verschwand, wenn ich Daten in eine Zelle mit dem Parameter true

m_table_positions.SetValue(0,r,symbols_name[r],0,true);

und dem Aufruf der Methode zur Aktualisierung der Tabelle ohne den Parameter

m_table_positions.Update();
 
Marcin Rutkowski:

wow ..danke für die Antwort ..nur um zu bestätigen, aus welchem Artikel Sie die Bibliothek heruntergeladen haben ...mein Fortschritt ist 1 Schritt vorwärts, aber alle Objekte, die mit dem Dialogfeld verknüpft sind, können nicht gezogen werden und verschwinden nicht richtig ...Wenn Sie mir auch den Link zu dem Artikel schicken könnten oder einfach nur bestätigen, ob der Link unten richtig ist :) ..von wo haben Sie Ihre Bibliothek heruntergeladen

https://www.mql5.com/de/code/19703


Ich werde weiterhin versuchen, dass es funktioniert :) ich muss nicht sehen, einige kleine Fehler in meinem Code :) ...danke nochmals

Hallo Marcin, ich habe die EasyAndFastGUI Build 16 von https://www.mql5.com/de/articles/3527 heruntergeladen und dann die Updates ersetzt: Table.mqh in MQL5\Include\EasyAndFastGUI\Controls\ und Keys.mqh

in MQL5\Include\EasyAndFastGUI\ aus dem Artikel: https: //www.mql5.com/en/articles/4715.

Graphical Interfaces XI: Integrating the Standard Graphics Library (build 16)
Graphical Interfaces XI: Integrating the Standard Graphics Library (build 16)
  • www.mql5.com
The first article Graphical Interfaces I: Preparation of the Library Structure (Chapter 1) explains in detail what this library is for. You will find a list of articles with links at the end of each chapter. There, you can also download a complete version of the library at the current stage of development. Files must be placed under the same...
 

Die Bibliothek wurde neu kompiliert, aber die Klasse wird nicht gefunden.

Klasse 'CWindow' ist undefiniert Element.mqh