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

 

Hallo Kollegen!

Es ist mir gelungen, die Anzahl der Warnungen von 18 auf 6 zu reduzieren, indem ich den Objektnamen durch "CElementBase::" ersetzt habe .

Und diese 6 haben sich auf 4 Fehlertypen reduziert, die ich unten aufführe. Bitte helfen Sie mir, sie richtig einzuordnen.

1. Wie ersetzt man korrekt "m_tabs.GetButtonPointer(m_selected_tab)." durch den Text "CElementBase::"?

//--- Definieren Sie die Farbe für die Linie
   color clr=m_back_color;
   if(m_tabs.GetButtonPointer(m_selected_tab).IsLocked()) // diese!
      clr=m_tabs.GetButtonPointer(m_selected_tab).BackColorLocked();
//--- Zeichnen Sie eine Linie
   m_canvas.Line(x1,y1,x2,y2,::ColorToARGB(clr,m_alpha));
  }


2. und hier - wenn ich "el." durch "CElementBase::" ersetze. - gibt es einen neuen Kompilierungsfehler "IsAvailable - access to non-staticmember of function" - wie kann ich diese Warnung korrekt beheben?

      for(int e=0; e<elements_total; e++)
        {
         //--- Nur verfügbare Elemente prüfen
         CElement *el=m_wnd[m_active_window_index].m_elements[e];
         if(!el.IsVisible() || !el.IsAvailable() || el.IsLocked())
            continue;
         //--- Ereignisbehandlung im Item-Handler
         el.OnEvent(m_id,m_lparam,m_dparam,m_sparam);
        }


3. dieselbe Zeile: wenn ich "el.IsLocked()" durch den Text "CElementBase::IsLocked" ersetze: Fehler "IsLocked - access to non-static member of function".

4. und schließlich - was ist der richtige Weg, um "m_windows[0].IsLocked()" zu ersetzen?

//--- Beenden, wenn die Schnittstelle nicht erstellt wurde
   if(windows_total<1)
      return;
//--- Größe aller Elemente des gesperrten Formulars ändern, wenn einer der Modi aktiviert ist
   if(m_windows[0].IsLocked() && (m_windows[0].AutoXResizeMode() || m_windows[0].AutoXResizeMode()))
     {

Es wäre toll, diese Bibliothek zu verwenden, aber ich muss diese Probleme zuerst lösen.


Vielen Dank im Voraus!

Documentation on MQL5: Language Basics / Object-Oriented Programming / Static Members of a Class
Documentation on MQL5: Language Basics / Object-Oriented Programming / Static Members of a Class
  • www.mql5.com
Static Members of a Class - Object-Oriented Programming - Language Basics - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
Yevgen Drumachyk:

Hallo, liebe Kollegen!

Ich konnte die Anzahl der Warnungen von 18 auf 6 reduzieren, indem ich den Objektnamen durch "CElementBase::" ersetzt habe .

el.CElementBase::IsLocked() ?
 
Edgar Akhmadeev:
el.CElementBase::IsLocked() ?

Edgar Achmadeev, vielen Dank, Kollege!

Es hat funktioniert! ))

 

Guten Tag, liebe Kollegen!

Könnt ihr mir bitte sagen, wie ich mit dieser Bibliothek zwei Fenster erstellen kann? Ich schreibe einen Expert Advisor, der aus zwei Fenstern besteht: 1) Trading Panel und 2) Watch List.

Das erste Fenster mit dem Handelspanel ist erstellt und funktioniert ohne Probleme:

CWindow m_window;

CreateWindow(m_window, "META TOOLS",1,1,175,175,200,false,false,true,true) + Hinzufügen von Schaltflächen:


Aber beim Hinzufügen:

CWindow m_watchlist_window;

CreateWindow(m_watchlist_window, "Watch List",150,1,100,100,150,false,false,true,true,false)

CreateButton(m_watchlist1_btn, "EURUSD",m_watchlist_window,0,245,25,60,30)

dann erscheint die EURUSD-Schaltfläche in der Luft... d.h. es wird kein weiteres separates Fenster erstellt... warum?



Dieses UI wird im Kontext erstellt: class CProgram : public CWndCreate

Ich schließe die Erstellung des UI mit dem Befehl

CWndEvents::CompletedGUI()


Könnten Sie mir bitte sagen, ob es Ihnen gelungen ist, eine Benutzeroberfläche mit mehreren Fenstern zu erstellen?

Ich spreche von zwei unabhängigen Fenstern. D.h. die Variante mit erscheinendem Dialogfenster (wie bei den Einstellungen) ist nicht geeignet. Die beiden Fenster müssen immer sichtbar und unabhängig voneinander anklickbar sein. Warum getrennte Fenster? Weil das erste - Trade Panel - eine feste Größe hat. Das zweite - Überwachungsliste - ändert sich in der Größe des Fensters, wenn die Anzahl der hinzugefügten Elemente erhöht oder verringert wird.

 

Hallo Leute!

Haben Sie in der Lage gewesen, mehr als 1 unabhängiges Fenster mit dieser Bibliothek zu erstellen? Das heißt, um WindowCreate()-Methode mehr als einmal zu zusätzlichen Fenstern auf dem Chart innerhalb der gleichen EA aufrufen?

Ich kann erfolgreich 1 Fenster erstellen. Aber dann, wenn ich versuche, das 2. zu erstellen - es erscheint NICHT...

Irgendwelche Ideen, warum?

Oder ein Beispiel, wie Sie es geschafft haben, zusätzliche Fenster (nicht Dialoge) zu erstellen.

Vielen Dank!

 
Yevgen Drumachyk:

Können Sie mir bitte sagen, wie ich mit dieser Bibliothek zwei Fenster erstellen kann?


Das kann man nicht. Alles ist um ein Hauptfenster herum aufgebaut. Einer der Gründe, warum ich angefangen habe, meine eigene Bibliothek zu schreiben)

 
Oleksii Chepurnyi:

Auf keinen Fall. Alles ist um ein Hauptfenster herum aufgebaut. Einer der Gründe, warum ich angefangen habe, meine eigene Bibliothek zu schreiben)

Danke, Oleksii Chepurnyi! Ich würde gerne auf diese Bibliothek verzichten. Sie ist sehr gut gemacht.


Leute, gibt es noch andere Versionen? Vielleicht hat jemand dieses Problem umgangen und es geschafft, mehr als 1 Fenster zu erstellen?

Im Code der Bibliothek kann man sehen, dass ein neu erstelltes Fenster zum "common array of elements" hinzugefügt wird. Es kann also mehr als ein Fenster geben...? Achten Sie auf diesen Teil des Codes in der Bibliothek:



//+------------------------------------------------------------------+
//| Fügt einen Fensterzeiger zur Schnittstellenelementdatenbank hinzu |
//+------------------------------------------------------------------+
void CWndContainer::AddWindow(CWindow &object)
  {
   int windows_total=::ArraySize(m_windows);
//--- Wenn noch keine Fenster vorhanden sind, wird der Elementzähler auf Null gesetzt
   if(windows_total<1)
     {
      m_counter_element_id=0;
      ::Comment("Loading. Please wait...");
     }
//--- Hinzufügen eines Zeigers auf das Fenster-Array
   int new_size=windows_total+1;
   ::ArrayResize(m_wnd,new_size);
   ::ArrayResize(m_windows,new_size);
   m_windows[windows_total]=::GetPointer(object);
//--- Hinzufügen eines Zeigers auf das gemeinsame Array von Elementen
   int last_index=ResizeArray(m_wnd[windows_total].m_elements);
   m_wnd[windows_total].m_elements[last_index]=::GetPointer(object);
//--- Hinzufügen von Fenstertastenzeigern zur Datenbank
   AddWindowElements(windows_total,object);
//--- Setzen der ID und Speichern der ID des letzten Elements
   m_windows[windows_total].Id(m_counter_element_id);
   m_windows[windows_total].LastId(m_counter_element_id);
//--- Erhöhung des Zählers der Elementbezeichner
   m_counter_element_id++;
  }
 
Um zwei Fenster zu starten und sie gleichzeitig aktiv zu machen, müssen Sie die Bibliothek bearbeiten. Keine einfache und umfangreiche Aufgabe. Wenn Sie es dringend brauchen, schreiben Sie an Freelancer
 
Der beste, den es je gab. Herzlichen Glückwunsch.
 

Hallo zusammen, wie geht es Ihnen? Gibt es eine Begrenzung für CreateSimpleButton? Ich bin nicht in der Lage, mehr als 6 einfache Schaltflächen auf das Fenster zu setzen. Ich verwende den Code der grafischen Oberflächen x (mql4). Ich hatte den uninit Grund 8. Ich bin Anatoli Kazharski sehr dankbar Best, RDT


Ich fand heraus, dass der Fehler mit dem Metatrader 4 selbst war, ich war die Kompilierung der EA auf dem gleichen Chart mehrmals. Ich habe festgestellt, dass, wenn ich die Änderungen vornehme und das Diagramm schließe und ein neues öffne und dann den EA darin einfüge, die Änderungen korrekt übernommen werden. Anatoli, vielen Dank für all die außergewöhnliche und vollständige Arbeit. Beste Grüße, RDT

Anatoli Kazharski
Anatoli Kazharski
  • 2019.02.17
  • www.mql5.com
Perfil do Trader