Diskussion zum Artikel "Graphical Interfaces I: Animation des graphischen Interfaces (Kapitel 3)"

 

Neuer Artikel Graphical Interfaces I: Animation des graphischen Interfaces (Kapitel 3) :

In dem vorherigen Artikel haben wir eine Formular-Klasse (Form class) mit Steuerelementen (Controls) entwickelt. In diesem Artikel werden wir die Klasse mit Methoden auffüllen, welche es möglich machen, das Formular über den Chartbereich zu bewegen. Wir werden anschließend diese Komponente in den Kern der Bibliothek mit aufnehmen. Zudem werden wir sicherstellen, dass sich die Farbe der Form verändert, sobald sich die Maus darüber befindet.

Dieser Artikel ist die Fortsetzung des ersten Teils dieser Serie über grafische Interfaces. Der erste Artikel Grafisches Interface I: Vorbereiten der Bibliotheksstruktur (Kapitel 1) beschreibt im Detail wofür diese Bibliothek gedacht ist. Eine vollständige Liste mit Links zu diesem Artikel des ersten Teils, finden Sie am Ende von jedem Kapitel. Zudem finden Sie dort eine Möglichkeit das Projekt, entsprechend dem aktuellen Entwicklungszustand, herunterzuladen. Die Dateien müssen in den gleichen Verzeichnissen untergebracht werden, so, wie Sie auch in dem Archiv abgelegt sind.

Fig. 2. Test for the object reaction to the mouse cursor.

Autor: Anatoli Kazharski

 
Anatoly! Das Niveau der Kodierung, ihre Qualität - alles ist einfach auf einer exorbitanten, persönlich für mich, Höhe. Ein großes Dankeschön an dich für diese großartige Arbeit! Wir freuen uns schon auf die weiteren Teile!
 

Hallo Anatoli,

ich bin sehr an der grafischen Oberfläche interessiert. Aber es funktioniert nicht in meiner Applcation. Das Panel-Fenster wird nicht verschoben. Auch im Beispielprogramm "InfoPanel.mq5" (mit der Einstellung der Eigenschaft Movable auf true) passiert nichts. Das Panel wird zwar angezeigt, ist aber nicht verschiebbar. Vielleicht haben Sie eine Idee, was falsch sein könnte? (Ich benutze Windows10 und den Metatrader ver 5.0 build 1340)


Mit freundlichen Grüßen Roland

 

Hallo zusammen,

ich habe die Quellen aus dem letzten Teil(4). Jetzt funktioniert alles gut.

Viele Grüße Roland

 

Wie kann man Mausbewegungen mit der Standardbibliothek verarbeiten? Ich habe mit der Datei in Experts\Examples\Controls getestet. Modifizierung der CListView-Klasse der Standardbibliothek.
Das Ereignis ON_MOUSE_FOCUS_SET wird nicht verarbeitet, wenn ich nur die Funktion .ChartEvent(...) verwende.
Wenn ich die Funktion .OnEvent(...) verwende, wird das Ereignis ON_MOUSE_FOCUS_SET verarbeitet, aber ich kann das Fenster nicht verschieben.
Wenn ich beide Funktionen verwende, indem ich zuerst .ChartEvent() und dann .OnEvent() aufrufe, wird das Ereignis ON_MOUSE_FOCUS_SET verarbeitet, aber wenn ich auf die Inkrement- und Dekrement-Schaltfläche klicke, ändert es sich um mehr als einen Schritt.


   virtual bool      OnItemFocusSet(const int index);
   //--- neu gezeichnet
   bool              Redraw(void);
   bool              RowState(const int index,const bool select);
   bool              CheckView(void);
  };
//+------------------------------------------------------------------+
//| Gemeinsamer Handler für Diagrammereignisse|
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CListView)
ON_INDEXED_EVENT(ON_CLICK,m_rows,OnItemClick)
ON_INDEXED_EVENT(ON_MOUSE_FOCUS_SET,m_rows,OnItemFocusSet)
EVENT_MAP_END(CWndClient)
bool CListView::OnItemFocusSet(const int index)
  {
//--- "Zeile" auswählen
   Select(index+m_offset);
//--- Benachrichtigung senden
   EventChartCustom(CONTROLS_SELF_MESSAGE,ON_CHANGE,m_id,0.0,m_name);
//--- behandelt
   return(true);
  }
 
Das Beispiel ist sehr interessant und nützlich für die persönliche Entwicklung:))))))) Ein großes Dankeschön an den Autor!
Ich habe eine Frage: wenn ich den Zeitrahmen ändere (Neuinitialisierung), fliegt der Block in die obere linke Ecke (x=0, y=0)... wie kann man korrekt implementieren, dass die aktuellen Koordinaten des Blocks gespeichert werden?

HI: es gibt 2 Varianten in meinem Kopf:
1) Koordinaten in globale Variablen schreiben...
2) in eine Datei schreiben...
3) Neugierig auf Ihre professionelle Lösung für dieses Problem! Wie würden Sie es implementieren?