Diskussion zum Artikel "Wie erstellt man ein grafisches Panel beliebiger Komplexität?"
Veröffentlichter Artikel Wie man ein Grafikpanel von beliebiger Komplexität erstellt und wie es funktioniert:
Autor: Vladimir Karputov
Vielen Dank für diesen Artikel. Sehr informativ!
Ja, der Artikel ist nützlich, aber ich kann nicht verstehen, wie das Ereignis ON_DBL_CLICK zu behandeln, können Sie helfen?
Bei einem Doppelklick handelt es sich um zwei Klicks mit sehr geringem zeitlichen Abstand zwischen ihnen. Es kann also auf die gleiche Weise wie ein normaler Klick behandelt werden - Sie müssen nur eine statische Variable zu OnChartEvent hinzufügen. Schauen Sie sich das Beispiel in https://www.mql5.com/de/docs/constants/chartconstants/enum_chartevents an und machen Sie etwas in dieser Art:
//+------------------------------------------------------------------+ //| ChartEvent-Funktion| //+------------------------------------------------------------------+ void OnChartEvent(const int id, // Kennung des Ereignisses const long& lparam, // Ereignisparameter vom Typ long const double& dparam, // Ereignisparameter vom Typ Double const string& sparam // Ereignisparameter vom Typ String ) { //--- Zeitpunkt des letzten Mausklicks static uint last_click=0; //--- Linksklick auf das Diagramm if(id==CHARTEVENT_CLICK) { uint click_time=GetTickCount(); Print("Die Koordinaten des Mausklicks auf dem Diagramm: x = ",lparam," y = ",dparam); if(click_time-last_click<dbl_click_time) { Print("DoubleClick!"); // alle anderen Aktionen } last_click=click_time; } //--- Mausklick auf ein grafisches Objekt if(id==CHARTEVENT_OBJECT_CLICK) { Print("Drücken der Maustaste auf ein Objekt mit dem Namen '"+sparam+"'"); } //--- Drücken einer Taste auf der Tastatur if(id==CHARTEVENT_KEYDOWN) { switch(lparam) { case KEY_NUMLOCK_LEFT: Print("KEY_NUMLOCK_LEFT wird gedrückt".); break; case KEY_LEFT: Print("KEY_LEFT wird gedrückt".); break; case KEY_NUMLOCK_UP: Print("KEY_NUMLOCK_UP wurde gedrückt".); break; case KEY_UP: Print("KEY_UP gedrückt".); break; case KEY_NUMLOCK_RIGHT: Print("KEY_NUMLOCK_RIGHT ist gedrückt."); break; case KEY_RIGHT: Print("SCHLÜSSEL_RECHTS"); break; case KEY_NUMLOCK_DOWN: Print("KEY_NUMLOCK_DOWN ist gedrückt."); break; case KEY_DOWN: Print("KEY_DOWN wird gedrückt".); break; case KEY_NUMPAD_5: Print("KEY_NUMPAD_5 wird gedrückt."); break; case KEY_NUMLOCK_5: Print("KEY_NUMLOCK_5 wurde gedrückt."); break; default: Print("Eine nicht aufgelistete Taste wurde gedrückt".); } ChartRedraw(); ...... }
- www.mql5.com
Ja, der Artikel ist nützlich, aber ich kann nicht verstehen, wie man das ON_DBL_CLICK-Ereignis behandelt, können Sie helfen?
Nun, wenn Sie versuchen, alles richtig zu machen, ist es unmöglich, das ON_DBL_CLICK-Ereignis abzufangen. Ein einfacher Test: Ich führe ein beliebiges Beispiel-Panel aus dem Abschnitt Panels und Dialoge aus, in CWnd::OnMouseUp setze ich einen Haltepunkt auf:

und als Ergebnis - egal ob man auf das Panel klickt oder doppelklickt, der Cursor geht nicht zum Haltepunkt. Schade.
Nun, wenn Sie versuchen, alles richtig zu machen, ist es unmöglich, das Ereignis ON_DBL_CLICK abzufangen. Ein einfacher Test: Führen Sie ein beliebiges Beispiel-Panel aus dem Abschnitt Panels und Dialoge aus, setzen Sie in CWnd::OnMouseUp einen Haltepunkt auf:
und als Ergebnis - egal ob Sie auf das Panel klicken oder doppelklicken, der Cursor geht nicht zum Haltepunkt. Igitt.
Die Lösung wurde in einem anderen Thread https://www.mql5.com/ru/forum/239867#comment_7224345 gezeigt .
- 2018.04.23
- www.mql5.com
Der neue Artikel How to create a graphical panel of any complexity level wurde veröffentlicht:
Autor: Wladimir Karputow
Dies ist ein wirklich guter Artikel. Ich mag ihn sehr. Sehr gut geschrieben.
Ich danke Ihnen!
Ein wunderbarer Artikel um diesem Thema näher zu kommen oder es zu vertiefen.
Leider ändert das nichts an der Tatsache, daß ein visueller Dialog-Editor im System fehlt.
Weiters wird der MausEvent in Dialogen nicht richtig abgefangen und es verschiebt sich der Chart im Hintergrund bei gedrückter Maustaste.
Auch kommen die Tooltips von dahinterliegenden Indikatoren durch den Dialog durch.
Und das, obwohl es richtiggestellten Code von Doerk gibt.
Die Ersetzung des CWndContainer - Bibliothek für den MetaTrader 5 https://www.mql5.com/de/code/13722
Ich frage mich, wie kann Metaquotes so stur sein um das zu ignorieren und nicht zu korrigieren.
- Stimmen: 24
- 2016.09.01
- Doerk Hilger
- www.mql5.com
Ein wunderbarer Artikel um diesem Thema näher zu kommen oder es zu vertiefen.
Leider ändert das nichts an der Tatsache, daß ein visueller Dialog-Editor im System fehlt.
Weiters wird der MausEvent in Dialogen nicht richtig abgefangen und es verschiebt sich der Chart im Hintergrund bei gedrückter Maustaste.
Auch kommen die Tooltips von dahinterliegenden Indikatoren durch den Dialog durch.
Und das, obwohl es richtiggestellten Code von Doerk gibt.
Die Ersetzung des CWndContainer - Bibliothek für den MetaTrader 5 https://www.mql5.com/de/code/13722
Ich frage mich, wie kann Metaquotes so stur sein um das zu ignorieren und nicht zu korrigieren.
Otto ich verstehe was dich da so bewegt.
Ich habe mich auf Grund von zu vielen Bastelbaustellen in der Grafik Programmierung des MT5 verabschiedet.
Welches Konzept MQ da verfolgt weiß ich nicht denke aber sie sind da mächtig auf dem Holzweg.
Dort wir ein eigens Grafik Framework in ein Fenster reingebastelt.
Sie reden immer von Sicherheit , deswegen kapseln sie so viel wie möglich .
Stellt einfach eine API zu den Daten bereit und lasst die User entscheiden welche Sprache sie nutzen. Das wäre der moderne Weg.
Gruß
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Wie erstellt man ein grafisches Panel beliebiger Komplexität? :
Der Artikel beschreibt ausführlich, wie ein Panel auf der Basis der CAppDialog-Klasse erstellt wird und wie ihm Steuerelemente hinzufügt werden können. Sie liefert die Beschreibung der Panelstruktur und ein Schema, das die Vererbung von Objekten zeigt. Der Artikel zeigt auch, wie Ereignisse behandelt werden und wie sie an abhängige Steuerelemente übergeben werden. Weitere Beispiele zeigen, wie die Parameter des Panels wie Größe und Hintergrundfarbe bearbeitet werden können.
Die Besonderheit der Methode CAppDialogs::CreateIndicator st, dass das Panel während der Erstellung automatisch folgendes macht:
Ein Beispiel für ein Panel eines Indikators [Datenordner]\MQL5\Indikatoren\Beispiele\Panels\SimplePanel\SimplePanel.mq5 nach der Erstellung und Minimierung:
Autor: Vladimir Karputov