Diskussion zum Artikel "Wie erstellt man ein grafisches Panel beliebiger Komplexität?"

 

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:

  • Anpassen an die Fensterbreite
  • Anpassen an die Fensterhöhe des Panels

Ein Beispiel für ein Panel eines Indikators [Datenordner]\MQL5\Indikatoren\Beispiele\Panels\SimplePanel\SimplePanel.mq5 nach der Erstellung und Minimierung:

Autor: Vladimir Karputov

 

Vielen Dank für diesen Artikel. Sehr informativ!

 
Ja der Artikel ist nützlich, aber ich kann nicht verstehen, wie ON_DBL_CLICK Ereignis zu behandeln, können Sie helfen?
 
Andrii Djola:
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();
......
     }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Существуют 11 видов событий, которые можно обрабатывать с помощью функции предопределенной функции OnChartEvent(). Для пользовательских событий предусмотрено 65535 идентификаторов в диапазоне от CHARTEVENT_CUSTOM до CHARTEVENT_CUSTOM_LAST включительно. Для генерации пользовательского события необходимо использовать функцию EventChartCustom...
 
Andrii Djola:
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.

 
Vladimir Karputov:

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 .

Обсуждение статьи "Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient"
Обсуждение статьи "Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient"
  • 2018.04.23
  • www.mql5.com
Опубликована статья Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient: Автор: Vladimir Ka...
 
MetaQuotes Software Corp.:

Der neue Artikel How to create a graphical panel of any complexity level wurde veröffentlicht:

Autor: Wladimir Karputow

Tolle Einführung! Dankeschön
 

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.

Die Ersetzung des CWndContainer
Die Ersetzung des CWndContainer
  • Stimmen: 24
  • 2016.09.01
  • Doerk Hilger
  • www.mql5.com
Der echte Autor: Original von MetaQuotes Software Corp. Die Modifizierung von Doerk. Diese Datei ersetzt die originale Datei WndContainer.mqh. Eine neue Funktion und zwei kleine Modifikationen verhindern die Veränderung des Charts beim Druck und bei der Haltung der Maus-Taste innerhalb im Bereichs des Containers, das heißt, beim Druck der...
 
Otto Pauser:

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ß 

 
Die Klasse wäre großartig, aber sie kann nicht für Anwendungen verwendet werden, weil die Panels nur dann gut aussehen, wenn die Windows-Dpi-Skalierung auf 1 eingestellt ist.
So kann die Anwendung auf Ihrem Bildschirm gut aussehen, aber nicht auf anderen.