Diskussion zum Artikel "Grafische Interfaces X: Erweitertes Management von Listen und Tabellen Code Optimierung (build 7)" - Seite 9
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Nun, Tol, danke für den Hinweis:
for(uint c=l; c<m_visible_columns_total; c++)
{
//--- Ermitteln der aktuellen Position des Schiebereglers für die vertikale Bildlaufleiste
v=m_scrollv.CurrentPos()+t;
//--- Zeilen
for(uint r=t; r<m_visible_rows_total; r++)
{
//--- Daten der Offset-Tabelle
if(v>=t && v<m_rows_total && h>=l && h<m_columns_total)
{
//--- Anpassung für die hervorgehobene Zeile
color back_color=(m_selected_item==v) ? m_selected_row_color : m_vcolumns[h].m_cell_color[v];
color text_color=(m_selected_item==v) ? m_selected_row_text_color : m_vcolumns[h].m_text_color[v];
//--- Anpassen von (1) Werten, (2) Hintergrundfarbe, (3) Textfarbe und (4) Textausrichtung in Zellen
SetCellParameters(c,r,m_vcolumns[h].m_vrows[v],back_color,text_color,m_vcolumns[h].m_text_align[v]);
v++;
}
}
//---
h++;
}
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
EasyAndFastGUI-Bibliothek
Viktor Glovluk, 2017.01.26 10:42 AM.
Liebe Forumsmitglieder, bitte helfen Sie mir!
Auf der Grundlage dieser Bibliothek von Anatoli Kazharski , versucht, eine Eule zu schweißen und wollte einen Datensatz in der Datei Zustände der Checkboxen und Werte der Eingabefelder zu organisieren! Aber um nicht jedes Mal ALLE Werte aufzuzeichnen, kann ich nicht verstehen, wie man das Element, das angeklickt wurde, zu bestimmen! In der Benutzeranwendung gibt es einen Event-Handler, und der Parameter lparam ist nur für den Index des Elements zuständig, aber wie man das Element durch diesen Index findet, der dann mit ihm arbeiten würde, kann ich nicht verstehen!
Vielen Dank im Voraus!
Viktor Glovluk, 2017.01.26 10:42
Liebe Forumsmitglieder, bitte helfen Sie mir!
Auf der Grundlage dieser Bibliothek von Anatoli Kazharski , versuche ich, eine Eule zu schweißen und wollte einen Datensatz in der Datei Zustände der Kontrollkästchen und Werte der Eingabefelder zu organisieren! Aber um nicht jedes Mal ALLE Werte aufzuzeichnen, kann ich nicht verstehen, wie man das Element bestimmt, das angeklickt wurde! In der Benutzeranwendung gibt es einen Event-Handler, und der Parameter lparam ist nur für den Index des Elements zuständig, aber wie man das Element durch diesen Index findet, der dann mit ihm arbeiten würde, kann ich nicht verstehen!
Vielen Dank im Voraus!
Das Anklicken der Checkboxen kann durch das Ereignis mit der Kennung ON_CLICK_LABEL verfolgt werden.
In lparam kommt der Wert des Elementbezeichners.
Beispiel:
//| Ereignisbehandler|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
//--- Klick-Ereignis auf die Textbeschriftung
if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL)
{
//--- Wenn Sie das erste Kästchen angeklickt haben
if(lparam==m_checkbox1.Id())
{
//---
}
}
}
Ist das wirklich die einzige Möglichkeit?
//--- Wenn Sie auf das erste Kontrollkästchen geklickt haben
if(lparam==m_checkbox1.Id())
Wurde bereits beantwortet, nachdem ich diesen Beitrag verlassen habe! Vielen Dank dafür! Und ich muss durch alle Kontrollkästchen und Eingabefelder gehen? Und als Beispiel, wenn es einen "Haufen" von ihnen gibt? Kein Array, das alle Indizes der Elemente speichert? Dann durch diesen Index, um die notwendigen Werte zu erhalten (z.B. angeklickte oder nicht angeklickte Checkbox, Wert im Eingabefeld)!Ist das der einzige Weg?
...
Was ist ein Beispiel, wenn es einen "Haufen" von ihnen gibt? Es gibt kein Array, das alle Indizes der Elemente speichert? Dann durch diesen Index, um die notwendigen Werte zu erhalten (z.B. angeklickte oder nicht angeklickte Checkbox, Wert im Eingabefeld)!
Schauen Sie sich den Inhalt der Klasse CWndContainer an. Sie sind dort alle in der WindowElements-Struktur gespeichert. Auf sie kann von der Benutzerklasse aus zugegriffen werden.
struct WindowElements
{
//--- Gesamte Anordnung aller Objekte
CChartObject *m_objects[];
//--- Gesamte Anordnung aller Elemente
CElementBase *m_elements[];
//--- Persönliche Arrays von Elementen:
// Array von Kontextmenüs
CContextMenu *m_context_menus[];
//--- Array der Hauptmenüs
CMenuBar *m_menu_bars[];
//--- Tooltips
CTooltip *m_tooltips[];
//--- Array von Dropdown-Listen verschiedener Typen
CElementBase *m_drop_lists[];
//--- Array von Bildlaufleisten
CElementBase *m_scrolls[];
//--- Array von Tabellen mit Textbeschriftungen
CElementBase *m_labels_tables[];
//--- Array von Tabellen aus Eingabefeldern
CElementBase *m_tables[];
//--- Array mit gezeichneten Tabellen
CElementBase *m_canvas_tables[];
//--- Array von Registerkarten
CTabs *m_tabs[];
//--- Array von Registerkarten mit Bildern
CIconTabs *m_icon_tabs[];
//--- Array von Kalendern
CCalendar *m_calendars[];
//--- Array von Dropdown-Kalendern
CDropCalendar *m_drop_calendars[];
//--- Baumlisten
CTreeView *m_treeview_lists[];
//--- Datei-Navigatoren
CFileNavigator *m_file_navigators[];
//--- Standardgrafiken (Grafikobjekte)
CStandardChart *m_sub_charts[];
//--- Bilderschieber
CPicturesSlider *m_pictures_slider[];
//--- Zeit
CTimeEdit *m_time_edits[];
//--- Mehrzeilige Felder
CTextBox *m_text_boxes[];
};
//--- Array von Element-Arrays für jedes Fenster
WindowElements m_wnd[];
Je weiter weg, desto besser! :)
Wieder bin ich auf Event-Handler-Implementierungen gestoßen, die ich nicht verstehe! Wenn man eine benutzerdefinierte Anwendung erstellt, soll man die GUI durch eine Klasse verbinden:
#include "Menu.mqh"
CProgram program;
Aber wie fängt man dann das Drücken von Knöpfen ab, wie bekommt man den Status von Checkboxen und die Werte von Eingabefeldern, wenn sie in der privaten Zone der CProgram-Klasse liegen? Sollte ich das, was ich brauche, in den öffentlichen Bereich verschieben, oder habe ich etwas falsch verstanden?
...
aber wie fängt man dann Tastendrücke ab, wie erhält man die Zustände der Kontrollkästchen und Werte von Eingabefeldern, ...
Im CProgram-Handler.
//+------------------------------------------------------------------+
//| Ereignisbehandler|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
//--- Klick-Ereignis auf die Textbeschriftung
if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL)
{
}
}
//---
Alle Artikel haben MQL-Anwendungsbeispiele, die zeigen, wie man Ereignisse von Steuerelementen behandelt.
Im CProgram-Handler.
//+------------------------------------------------------------------+
//| Ereignisbehandler|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
//--- Klick-Ereignis auf die Textbeschriftung
if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL)
{
}
}
//---
Alle Artikel haben MQL-Anwendungsbeispieldateien, die zeigen, wie man Steuerereignisse behandelt.
Im CProgram Handler ist es klar, aber dieser Handler ist für die Schnittstelle, richtig? Man sollte keine Handelslösungen in ihn hineinschieben! Ich verstehe sehr wenig von OOP, mein ganzes Wissen stammt aus Ihren Artikeln, ich kann also dumm sein! :)
Wie kann ich zum Beispiel im Expert Advisor die Eröffnung einer Order implementieren, deren Lotness im Eingabefeld festgelegt ist? Ich muss den Wert dieses Feldes im EA selbst erhalten!
Im CProgram Handler ist es klar, aber dieser Handler ist für die Schnittstelle, richtig? Sie sollten keine Handelslösungen in ihn hineinschieben!
Warum eigentlich nicht? Doch, Sie können. Es ist eine Klasse Ihrer MQL-Anwendung (Indikator oder Expert Advisor). Alles ist dasselbe.
Sie können den Wert aus dem Eingabefeld wie folgt abrufen: