Wie kann ich CLabel zu Registerkarten hinzufügen, wenn ich CLabel Element erstellen und wollen zu Registerkarten hinzufügen Compiler gibt mir diese Fehler:
CLabel m_overview_titlte_label;
bool CMainPanel::CreateOverviewTitleLabel(conststring text)
{
//--- Übergabe des Panel-Objektsm_overview_title_label.WindowPointer(m_window);//--- An die vierte Registerkarte der ersten Gruppe von Registerkarten anhängen
m_main_panel_tabs.AddToElementsArray(0,m_overview_title_label);
m_main_panel_tabs.AddToElementsArray(
//--- Koordinatenint x=m_window.X()+OVERVIE_TITLE_LABEL_GAP_X;
int y=m_window.Y()+OVERVIE_TITLE_LABEL_GAP_Y;
//--- Eigenschaften vor der Erstellung festlegen
m_overview_title_label.XSize(140);
m_overview_title_label.YSize(18);
//m_overview_title_label.//--- Kontrolle erstellenif(!m_overview_title_label.Create(m_chart_id,text,m_subwin,x,y))
return(false);
//--- Hinzufügen des Objekts zu dem gemeinsamen Array von Objektgruppen//CWndContainer::AddToElementsArray(0,m_overview_title_label);return(true);
}
Compiler Fehler:
'WindowPointer' - Funktion nicht definiert MainPanel.mqh 233 27
'm_overview_title_label' - Parameterumwandlung nicht erlaubt MainPanel.mqh 235 43
m_overview_title_label' - Variable des gleichen Typs erwartet MainPanel.mqh 235 43
Martin Fischer Funktion wie WindowPointer(). Ich kann diese Objekte erstellen, aber ich kann sie nicht an das Fenster anhängen.
Die funktioniert in diesem Fall nicht...
2.) Ist die CComboBox ein statisches Objekt. Ist es möglich, die Liste der Elemente in der
ComboBox-Listview nach der Erstellung der ComboBox zu ändern?
Vielen Dank!
Ich hatte das gleiche Problem, ich habe es gelöst, indem ich eine Include-Datei erstellt habe und meine Label-Klasse geschrieben und diese verwendet habe. Sie müssen diese Datei in Include\EasyAndFastGUI\Controls\MyLabel.mqh erstellen.
Dieser Code ist:
//+------------------------------------------------------------------+//|MyLabel.mqh |//|Urheberrecht 2023, Sassiz.Wurzel |//|https://t.me/R00T_S4SS12 |//+------------------------------------------------------------------+#property copyright"Copyright 2023, Sassiz.Root"#property link"https://t.me/R00T_S4SS12"#property strict#include "Element.mqh"#include "Window.mqh"//+------------------------------------------------------------------+//| Klasse zur Erstellung eines Kontrollkästchens|//+------------------------------------------------------------------+class MyLabel : public CElement
{
private:
//--- Zeiger auf das Formular, an das das Element angehängt ist
CWindow *m_wnd;
//--- Objekte zur Erstellung eines Kontrollkästchens
CLabel m_label;
//--- Text des Ankreuzfeldesstring m_label_text;
//--- Ränder der Textetikettenint m_label_x_gap;
int m_label_y_gap;
//--- Farben der Textbeschriftung in verschiedenen Zuständencolor m_label_color;
color m_label_color_off;
color m_label_color_hover;
color m_label_color_locked;
color m_label_color_array[];
//--- Prioritäten beim Drücken der linken Maustasteint m_zorder;
int m_area_zorder;
//---public:
MyLabel(void);
~MyLabel(void);
//--- Methoden zur Erstellung eines Kontrollkästchensbool CreateLabel(constlong chart_id,constint subwin,conststring text,constint x,constint y);
//---private:
bool CreateLabel2(void);
//---public:
//--- (1) Speichert den Formularzeiger, (2) gibt den Zustand des Kontrollkästchens zurück/setzt ihnvoid WindowPointer(CWindow &object) { m_wnd=::GetPointer(object); }
//--- (1) Hintergrundfarbe, (2) Ränder für die Textbeschriftungvoid LabelXGap(constint x_gap) { m_label_x_gap=x_gap; }
void LabelYGap(constint y_gap) { m_label_y_gap=y_gap; }
//--- Farbe des Textes in verschiedenen Zuständenvoid LabelColor(constcolor clr) { m_label_color=clr; }
//--- (1) Beschreibung des Kontrollkästchens, (2) Rückgabe/Setzen des Zustands der Schaltfläche des Kontrollkästchensstring LabelText(void) const { return(m_label.Description()); }
//--- Ändern der Farbevoid ChangeObjectsColor(void);
//---public:
//--- Diagramm-Ereignishandlervirtualvoid OnEvent(constint id,constlong &lparam,constdouble &dparam,conststring &sparam);
//--- Zeitschaltuhrvirtualvoid OnEventTimer(void);
//--- Verschieben des Elementsvirtualvoid Moving(constint x,constint y);
//--- (1) Anzeigen, (2) Ausblenden, (3) Zurücksetzen, (4) Löschenvirtualvoid Show(void);
virtualvoid Hide(void);
virtualvoid Reset(void);
virtualvoid Delete(void);
//--- (1) Setzen, (2) Zurücksetzen der Prioritäten beim Drücken der linken Maustastevirtualvoid SetZorders(void);
virtualvoid ResetZorders(void);
//--- Zurücksetzen der Farbevirtualvoid ResetColors(void);
virtualvoid SetText(string text);
virtualvoid SetFontSize(int fontSize);
//---private:
//--- Handhabung des Drucks auf das Elementbool OnClickLabel(conststring clicked_object);
};
//+------------------------------------------------------------------+//| Konstruktor|//+------------------------------------------------------------------+
MyLabel::MyLabel(void) :
m_label_x_gap(20),
m_label_y_gap(2),
m_label_color(clrBlack)
{
//--- Speichern des Namens der Elementklasse in der Basisklasse
CElement::ClassName(CLASS_NAME);
//--- Prioritäten für den Klick mit der linken Maustaste festlegen
m_zorder =0;
m_area_zorder =1;
}
//+------------------------------------------------------------------+//| Destruktor|//+------------------------------------------------------------------+
MyLabel::~MyLabel(void)
{
}
//+------------------------------------------------------------------+//| Ereignisbehandlung|//+------------------------------------------------------------------+void MyLabel::OnEvent(constint id,constlong &lparam,constdouble &dparam,conststring &sparam)
{
//--- Behandlung des Ereignisses der Cursorbewegungif(id==CHARTEVENT_MOUSE_MOVE)
{
//--- Verlassen, wenn das Element ausgeblendet istif(!CElement::IsVisible())
return;
//--- Verlassen, wenn die Nummern der Unterfenster nicht übereinstimmenif(CElement::m_subwin!=CElement::m_mouse.SubWindowNumber())
return;
//--- Überprüfung des Fokus über Element
CElement::MouseFocus(m_mouse.X()>X() && m_mouse.X()<X2() && m_mouse.Y()>Y() && m_mouse.Y()<Y2());
return;
}
//--- Behandlung des Klicks mit der linken Maustaste auf das Objektif(id==CHARTEVENT_OBJECT_CLICK)
{
//--- Drücken Sie auf das Kontrollkästchenif(OnClickLabel(sparam))
return;
}
}
//+------------------------------------------------------------------+//| Timer|//+------------------------------------------------------------------+void MyLabel::OnEventTimer(void)
{
//--- Wenn das Formular nicht gesperrt istif(!m_wnd.IsLocked())
//--- Ändern der Farbe der Elementobjekte
ChangeObjectsColor();
}
//+------------------------------------------------------------------+//| Erstellt eine Gruppe von Checkbox-Objekten|//+------------------------------------------------------------------+bool MyLabel::CreateLabel(constlong chart_id,constint subwin,conststring text,constint x,constint y)
{
//--- Verlassen, wenn kein Formularzeiger vorhanden istif(!CElement::CheckWindowPointer(::CheckPointer(m_wnd)))
return(false);
//--- Initialisierung von Variablen
m_id =m_wnd.LastId()+1;
m_chart_id =chart_id;
m_subwin =subwin;
m_x =x;
m_y =y;
m_label_text =text;
//--- Ränder vom Rand
CElement::XGap(CElement::X()-m_wnd.X());
CElement::YGap(CElement::Y()-m_wnd.Y());
//--- Erstellen eines Elementsif(!CreateLabel2())
return(false);
//--- Das Element ausblenden, wenn das Fenster ein Dialogfenster ist oder minimiert wurdeif(m_wnd.WindowType()==W_DIALOG || m_wnd.IsMinimized())
Hide();
//---return(true);
}
//+------------------------------------------------------------------+//| Erzeugt die Beschriftung des Kontrollkästchens|//+------------------------------------------------------------------+bool MyLabel::CreateLabel2(void)
{
//--- Bildung des Objektnamensstring name=CElement::ProgramName()+"_lable_"+(string)CElement::Id();
//--- Koordinatenint x =CElement::X()+m_label_x_gap;
int y =CElement::Y()+m_label_y_gap;
//--- Textfarbe je nach Zustandcolor label_color=clrBlack;//(m_check_button_state) ? m_label_color : m_label_color_off;//--- Das Objekt einstellenif(!m_label.Create(m_chart_id,name,m_subwin,x,y))
return(false);
//--- Eigenschaften einstellen
m_label.Description(m_label_text);
m_label.Font(FONT);
m_label.FontSize(FONT_SIZE);
m_label.Color(label_color);
m_label.Corner(m_corner);
m_label.Anchor(m_anchor);
m_label.Selectable(false);
m_label.Z_Order(m_zorder);
m_label.Tooltip("\n");
//--- Ränder vom Rand
m_label.XGap(x-m_wnd.X());
m_label.YGap(y-m_wnd.Y());
//--- Initialisierung des Gradienten-Arrays
CElement::InitColorArray(label_color,m_label_color_hover,m_label_color_array);
//--- Speichern des Objektzeigers
CElement::AddToArray(m_label);
return(true);
}
//+------------------------------------------------------------------+//| Bewegliche Elemente|//+------------------------------------------------------------------+void MyLabel::Moving(constint x,constint y)
{
//--- Verlassen, wenn das Element ausgeblendet istif(!CElement::IsVisible())
return;
//--- Speichern von Einzügen in den Elementfeldern
CElement::X(x+XGap());
CElement::Y(y+YGap());
//--- Speicherung von Koordinaten in den Feldern der Objekte
m_label.X(x+m_label.XGap());
m_label.Y(y+m_label.YGap());
//--- Aktualisierung der Koordinaten von grafischen Objekten
m_label.X_Distance(m_label.X());
m_label.Y_Distance(m_label.Y());
}
//+------------------------------------------------------------------+//| Ändern der Objektfarbe, wenn der Mauszeiger darüber schwebt.//+------------------------------------------------------------------+void MyLabel::ChangeObjectsColor(void)
{
//--- Verlassen, wenn das Element blockiert ist//---color label_color=clrBlack;//(m_check_button_state) ? m_label_color : m_label_color_off;
CElement::ChangeObjectColor(m_label.Name(),CElement::MouseFocus(),OBJPROP_COLOR,label_color,m_label_color_hover,m_label_color_array);
}
//+------------------------------------------------------------------+//| Zeigt Combobox|//+------------------------------------------------------------------+void MyLabel::Show(void)
{
//--- Verlassen, wenn das Element bereits sichtbar istif(CElement::IsVisible())
return;
//--- Alle Objekte sichtbar machenfor(int i=0; i<CElement::ObjectsElementTotal(); i++)
CElement::Object(i).Timeframes(OBJ_ALL_PERIODS);
//--- Zustand der Sichtbarkeit
CElement::IsVisible(true);
}
//+------------------------------------------------------------------+//| Ausblenden der Combobox|//+------------------------------------------------------------------+void MyLabel::Hide(void)
{
//--- Verlassen, wenn das Element bereits sichtbar istif(!CElement::IsVisible())
return;
//--- Alle Objekte ausblendenfor(int i=0; i<CElement::ObjectsElementTotal(); i++)
CElement::Object(i).Timeframes(OBJ_NO_PERIODS);
//--- Zustand der Sichtbarkeit
CElement::IsVisible(false);
}
//+------------------------------------------------------------------+//| Neuzeichnen|//+------------------------------------------------------------------+void MyLabel::Reset(void)
{
//--- Lassen, wenn dies ein Dropdown-Element istif(CElement::IsDropdown())
return;
//--- Ausblenden und Einblenden
Hide();
Show();
}
//+------------------------------------------------------------------+//| Löschung|//+------------------------------------------------------------------+void MyLabel::Delete(void)
{
//--- Entfernen von Objekten
m_label.Delete();
//--- Leeren des Arrays der Objekte
CElement::FreeObjectsArray();
//--- Initialisierung von Variablen mit Standardwerten
CElement::MouseFocus(false);
CElement::IsVisible(true);
}
//+------------------------------------------------------------------+//| Seth die Prioritäten|//+------------------------------------------------------------------+void MyLabel::SetZorders(void)
{
m_label.Z_Order(m_zorder);
}
//+------------------------------------------------------------------+//| Die Prioritäten zurücksetzen|//+------------------------------------------------------------------+void MyLabel::ResetZorders(void)
{
m_label.Z_Order(0);
}
//+------------------------------------------------------------------+//| Farbe der Elementobjekte zurücksetzen|//+------------------------------------------------------------------+void MyLabel::ResetColors(void)
{
//--- Zurücksetzen der Farbe
m_label.Color(clrBlack);
//--- Den Fokus auf Null setzen
CElement::MouseFocus(false);
}
//+------------------------------------------------------------------+//| Klick auf den Elementkopf|//+------------------------------------------------------------------+bool MyLabel::OnClickLabel(conststring clicked_object)
{
//--- Der Mauszeiger befindet sich derzeit über dem Element
m_label.Color(m_label_color_hover);
//--- Senden Sie eine Nachricht darüber
::EventChartCustom(m_chart_id,ON_CLICK_LABEL,CElement::Id(),0,m_label.Description());
return(true);
}
//+------------------------------------------------------------------+void MyLabel::SetText(string text){
m_label.Description(text);
}
void MyLabel::SetFontSize(int fontSize){
m_label.FontSize(fontSize);
}
Dann erstellen Sie ein Objekt aus der MyLabel-Klasse wie folgt und verwenden Sie es:
//---Etikett
MyLabel m_overview_title_label;
Then:
//+------------------------------------------------------------------+//| Erstellt OverviewTitleLabel|//+------------------------------------------------------------------+bool CMainPanel::CreateOverviewTitleLabel(conststring text)
{
//--- Übergabe des Panel-Objekts
m_overview_title_label.WindowPointer(m_window);
//--- An die vierte Registerkarte der ersten Gruppe von Registerkarten anhängen
m_main_panel_tabs.AddToElementsArray(0,m_overview_title_label);
//--- Koordinatenint x=m_window.X()+OVERVIE_TITLE_LABEL_GAP_X;
int y=m_window.Y()+OVERVIE_TITLE_LABEL_GAP_Y;
//--- Eigenschaften vor der Erstellung festlegen
m_overview_title_label.XSize(140);
m_overview_title_label.YSize(18);
m_overview_title_label.SetText(text);
m_overview_title_label.SetFontSize(18);
//m_overview_title_label.//--- Kontrolle erstellenif(!m_overview_title_label.CreateLabel(m_chart_id,m_subwin,text,x,y))
return(false);
//--- Hinzufügen des Objekts zu dem gemeinsamen Array von Objektgruppen
CWndContainer::AddToElementsArray(0,m_overview_title_label);
return(true);
}
Wenn wir die Anzahl der Registerkarten erhöhen, sei es vertikal oder horizontal, gibt es keine Möglichkeit zum Scrollen, was dazu führt, dass sich das Fenster über seine Grenzen hinaus ausdehnt und seine Effizienz verringert.
Wie kann ich CLabel zu Registerkarten hinzufügen, wenn ich CLabel Element erstellen und wollen zu Registerkarten hinzufügen Compiler gibt mir diese Fehler:
Compiler Fehler:
'WindowPointer' - Funktion nicht definiert MainPanel.mqh 233 27
'm_overview_title_label' - Parameterumwandlung nicht erlaubt MainPanel.mqh 235 43
Ich kann diese Objekte erstellen, aber ich kann sie nicht an das Fenster anhängen.
Die
funktioniert in diesem Fall nicht...
2.)
Ist die CComboBox ein statisches Objekt. Ist es möglich, die Liste der Elemente in der
ComboBox-Listview nach der Erstellung der ComboBox zu ändern?
Vielen Dank!
Ich hatte das gleiche Problem, ich habe es gelöst, indem ich eine Include-Datei erstellt habe und meine Label-Klasse geschrieben und diese verwendet habe. Sie müssen diese Datei in Include\EasyAndFastGUI\Controls\MyLabel.mqh erstellen.
Dieser Code ist:
Dann erstellen Sie ein Objekt aus der MyLabel-Klasse wie folgt und verwenden Sie es:
//---Etikett MyLabel m_overview_title_label;Then: