Diskussion zum Artikel "Graphische Interfaces VI: Das Checkbox Control, Das Edit Control und deren gemischte Typen (Kapitel 1)" - Seite 2
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
...
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);
}