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 Liniecolor 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 wurdeif(windows_total<1)
return;
//--- Größe aller Elemente des gesperrten Formulars ändern, wenn einer der Modi aktiviert istif(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.
Static Members of a Class - Object-Oriented Programming - Language Basics - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
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:
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.
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.
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 gesetztif(windows_total<1)
{
m_counter_element_id=0;
::Comment("Loading. Please wait...");
}
//--- Hinzufügen eines Zeigers auf das Fenster-Arrayint 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 Elementenint 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
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
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::"?
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?
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?
Es wäre toll, diese Bibliothek zu verwenden, aber ich muss diese Probleme zuerst lösen.
Vielen Dank im Voraus!
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 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!
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)
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:
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