in Ihren Beispielen werden immer id, lparam, dparam, sparam ausgegeben.
...
id - Element-Bezeichner
lparam - ?
dparam - ?
sparam - Elementname
Steuerelemente erzeugen Nachrichten und Parameter bedeuten in den meisten Fällen Folgendes:
id - Bezeichner des Ereignisses.
lparam - Bezeichner des Elements.
dparam - Element-Index.
sparam - angezeigter Text, der vom Benutzer der Bibliothek angegeben wird (Elementname).
Ich werde später eine Tabelle vorbereiten, die den Satz von Ereignisparametern von jedem Element zeigt.
Pavel Kolchin:
...
wir betrachten ein Eingabefeld - natürlich ist es interessant, den eingegebenen Wert zu erhalten, wie kann man das so schnell wie möglich tun?
Mit der Methode CSpinEdit::GetValue() können Sie den aktuellen Wert im Eingabefeld abrufen.
Beispiel:
//--- Ein Ereignis aus dem Eingabefeld ist eingetroffen if(id==CHARTEVENT_CUSTOM+ON_END_EDIT) { //--- Wenn die Artikel-ID aus dem ersten Eingabefeld stammt if(lparam==m_spin_edit1.Id()) { //--- Ausgabe des Wertes Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue()); } //--- return; }
Und wenn wir den Namen nicht kennen oder wir haben hundert Felder, vielleicht gibt es eine Methode nach Id, um zu sehen, was es gibt oder etwas wie this.GetValue()
Pavel Kolchin: Und wenn wir den Namen nicht kennen oder hundert Felder haben, gibt es vielleicht eine Methode nach id, um zu sehen, was da ist, oder etwas wie this.GetValue().
So hat jedes Element seine eigene eindeutige Element-ID.
Einfache Aufgabe. Ändern Sie die Farbe der Beschriftung des Kontrollkästchens, wenn Sie auf das Kontrollkästchen klicken. Angekreuzt - grüner Text, nicht angekreuzt - rot. Das klappt nicht. Nicht angekreuzt wird es blau, angekreuzt ist es immer noch blau.
Einfache Aufgabe. Ändern Sie die Farbe der Beschriftung des Kontrollkästchens, wenn Sie auf das Kontrollkästchen klicken. Angekreuzt - grüner Text, nicht angekreuzt - rot. Das klappt nicht. Nicht angekreuzt wird es blau, angekreuzt ist es immer noch blau.
Jetzt können Sie die Farben für verschiedene Zustände nur vor der Installation des Elements festlegen(Beispiel unten):
//+------------------------------------------------------------------+ //| Erstellt Ankreuzfeld 1| //+------------------------------------------------------------------+ bool CProgram::CreateCheckBox1(constint x_gap,constint y_gap,string text) { //--- Speichern des Fensterzeigers m_checkbox1.WindowPointer(m_window1); //--- Eigenschaften vor der Erstellung festlegen m_checkbox1.XSize(90); m_checkbox1.YSize(18); m_checkbox1.LabelColor(clrGreen); m_checkbox1.LabelColorOff(clrRed); m_checkbox1.LabelColorHover(clrCornflowerBlue); m_checkbox1.LabelColorLocked(clrSilver); //--- Ein Steuerelement erstellen if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap)) return(false); //--- Hinzufügen des Objekts zu dem gemeinsamen Array von Objektgruppen CWndContainer::AddToElementsArray(0,m_checkbox1); return(true); }
Einfache Aufgabe. Ändern Sie die Farbe der Beschriftung des Kontrollkästchens, wenn Sie auf das Kontrollkästchen klicken. Angekreuzt - grüner Text, nicht angekreuzt - rot. Das klappt nicht. Nicht angekreuzt wird es blau, angekreuzt ist es immer noch blau.
...
Danke für den Hinweis!
Ich werde diese Funktion hinzufügen. Achten Sie auf Updates für zukünftige Artikel in dieser Serie.
in Ihren Beispielen werden immer id, lparam, dparam, sparam ausgegeben.
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam);
//Print(m_spin_edit1.GetValue());
}
erhalten wir folgendes
TestLibrary (NZDUSD,H1) CProgram::OnEvent > id: 1020; lparam: 12; dparam: -1.0; sparam: Spin Edit 1:
id - Element-Bezeichner
lparam - ?
dparam - ?
sparam - Name des Elements
wir betrachten ein Eingabefeld - natürlich ist es interessant, den eingegebenen Wert zu erhalten, wie kann man das so schnell wie möglich machen?
in Ihren Beispielen werden immer id, lparam, dparam, sparam ausgegeben.
...
id - Element-Bezeichner
lparam - ?
dparam - ?
sparam - Elementname
Steuerelemente erzeugen Nachrichten und Parameter bedeuten in den meisten Fällen Folgendes:
Ich werde später eine Tabelle vorbereiten, die den Satz von Ereignisparametern von jedem Element zeigt.
...
wir betrachten ein Eingabefeld - natürlich ist es interessant, den eingegebenen Wert zu erhalten, wie kann man das so schnell wie möglich tun?
Mit der Methode CSpinEdit::GetValue() können Sie den aktuellen Wert im Eingabefeld abrufen.
Beispiel:
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
//--- Wenn die Artikel-ID aus dem ersten Eingabefeld stammt
if(lparam==m_spin_edit1.Id())
{
//--- Ausgabe des Wertes
Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue());
}
//---
return;
}
Und wenn wir den Namen nicht kennen oder hundert Felder haben, gibt es vielleicht eine Methode nach id, um zu sehen, was da ist, oder etwas wie this.GetValue().
So hat jedes Element seinen eigenen eindeutigen Elementbezeichner.
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
if(lparam==m_spin_edit1.Id()){Print(m_spin_edit1.GetValue());}
if(lparam==m_spin_edit2.Id()){Print(m_spin_edit2.GetValue());}
if(lparam==m_spin_edit3.Id()){Print(m_spin_edit3.GetValue());}
if(lparam==m_spin_edit4.Id()){Print(m_spin_edit4.GetValue());}
if(lparam==m_spin_edit5.Id()){Print(m_spin_edit5.GetValue());}
if(lparam==m_spin_edit6.Id()){Print(m_spin_edit6.GetValue());}
if(lparam==m_spin_edit7.Id()){Print(m_spin_edit7.GetValue());}
if(lparam==m_spin_edit8.Id()){Print(m_spin_edit8.GetValue());}
if(lparam==m_spin_edit9.Id()){Print(m_spin_edit9.GetValue());}
...
}
Ich wollte keinen solchen Code schreiben, vielleicht ist es sinnvoll, es zu tun.
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
aber ich habe nicht viele Felder, die erste Option ist für mich in Ordnung.
Pavel Kolchin:
...
Ich wollte nicht so einen Code schreiben, vielleicht ist es sinnvoll, es zu tun.
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
//| ChartEvent-Funktion|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
program.ChartEvent(id,lparam,dparam,sparam);
if(lparam==program.m_checkbox.Id())
if(program.m_checkbox.CheckButtonState())
{
program.m_checkbox.LabelColor(clrGreen);
}
else
{
program.m_checkbox.LabelColor(clrRed);
}
}
//+------------------------------------------------------------------+
Alexander Fedosov:
Einfache Aufgabe. Ändern Sie die Farbe der Beschriftung des Kontrollkästchens, wenn Sie auf das Kontrollkästchen klicken. Angekreuzt - grüner Text, nicht angekreuzt - rot. Das klappt nicht. Nicht angekreuzt wird es blau, angekreuzt ist es immer noch blau.Jetzt können Sie die Farben für verschiedene Zustände nur vor der Installation des Elements festlegen(Beispiel unten):
//| Erstellt Ankreuzfeld 1|
//+------------------------------------------------------------------+
bool CProgram::CreateCheckBox1(const int x_gap,const int y_gap,string text)
{
//--- Speichern des Fensterzeigers
m_checkbox1.WindowPointer(m_window1);
//--- Eigenschaften vor der Erstellung festlegen
m_checkbox1.XSize(90);
m_checkbox1.YSize(18);
m_checkbox1.LabelColor(clrGreen);
m_checkbox1.LabelColorOff(clrRed);
m_checkbox1.LabelColorHover(clrCornflowerBlue);
m_checkbox1.LabelColorLocked(clrSilver);
//--- Ein Steuerelement erstellen
if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap))
return(false);
//--- Hinzufügen des Objekts zu dem gemeinsamen Array von Objektgruppen
CWndContainer::AddToElementsArray(0,m_checkbox1);
return(true);
}
//| ChartEvent-Funktion|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
program.ChartEvent(id,lparam,dparam,sparam);
if(lparam==program.m_checkbox.Id())
if(program.m_checkbox.CheckButtonState())
{
program.m_checkbox.LabelColor(clrGreen);
}
else
{
program.m_checkbox.LabelColor(clrRed);
}
}
//+------------------------------------------------------------------+
Wie wäre es damit?
{
if(program.m_checkbox.CheckButtonState()) program.m_checkbox.LabelColor(clrGreen);
else program.m_checkbox.LabelColor(clrRed);
}