Diskussion zum Artikel "Graphische Interfaces VI: Das Checkbox Control, Das Edit Control und deren gemischte Typen (Kapitel 1)"
Aber das "Zwinkern" beim Erreichen extremer Werte funktioniert nicht in Indikatoren - Sleep() ...
Anatoly, schreiben Sie noch einen Verbesserungswunsch auf: Die Verzögerung sollte über einen Timer organisiert werden, zumal Sie schon fast alles dafür haben.
Anatoly, die von Ihnen erstellte Bibliothek ist in einem hohen Grad der Bereitschaft, und ich habe beschlossen, zu versuchen, ein kleines Projekt für mich mit ihm zu schaffen. Ich schreibe in diesem Thema, damit es klar ist, auf welches Element sich die Frage bezieht. Für das Eingabefeld (SpinEdit) ist es notwendig, Werte mit einer Genauigkeit von zwei Zehnteln einzugeben. Ich habe die entsprechenden Eigenschaften (StepValue und StepDigits) in der Prozedur der Felderstellung gesetzt (siehe den Code unten):
... m_spin_edit_Depo.MaxValue(10000000); m_spin_edit_Depo.MinValue(0); m_spin_edit_Depo.StepValue(0,01); m_spin_edit_Depo.SetDigits(2); m_spin_edit_Depo.SetValue(v); ...
Und nach der Kompilierung bekam ich einen Fehler: 'StepValue' - keine der Überladungen kann auf den Funktionsaufruf angewendet werden.
Wenn die Anzahl der Zeichen für einen Wert kleiner als 1 ist, dann kann logischerweise auch die Schrittweite kleiner als 1 sein. Gleichzeitig erfolgt im Code der Klasse die Prüfung des eingegebenen Wertes nur auf Nicht-Negativität.
...
//--- Шаг значения
double StepValue(void) const { return(m_step_value); }
void StepValue(const double value) { m_step_value=(value<=0)? 1 : value; }
...
Die Frage ist, dass es mir nicht klar ist, woher der Fehler kommt.
Dann habe ich eine Frage oder einen Wunsch. Was wäre, wenn wir den Minimal-/Maximalwert nicht kontrollieren müssen und er nur durch die Größe der Variablen vom Typ double begrenzt ist, die zum Speichern verwendet wird? So wie ich den Code verstanden habe, ist die Festlegung der Mindest-/Maximalwerte obligatorisch. Ist es möglich, meinen Wunsch in die Liste der Verbesserungen aufzunehmen? D.h. Wenn die Mindest-/Maximalwerte für ein Feld nicht angegeben werden, wird die Kontrolle der eingegebenen Werte nur bei ihrem Eintritt in den Bereich der Variablen vom Typ double durchgeführt.
Und nach der Kompilierung erhielt ich folgenden Fehler: 'StepValue' - keine der Überladungen kann auf den Funktionsaufruf angewendet werden.
...
Die Frage ist, dass es mir nicht klar ist, woher der Fehler kommt.
Sie haben einen Tippfehler. Verwenden Sie einen Punkt "." als Trennzeichen. :
m_spin_edit_Depo.StepValue(0. 01);//---
Als nächstes habe ich eine Frage oder einen Wunsch. Was ist, wenn ich den minimalen/maximalen Wert nicht kontrollieren muss und er nur durch die Größe der Variablen vom Typ doublebegrenzt ist, die für seine Speicherung verwendet wird ? So wie ich den Code verstanden habe, ist die Einstellung der Mindest-/Maximalwerte obligatorisch. Ist es möglich, meinen Wunsch in die Liste der Verbesserungen aufzunehmen? D.h. Wenn die Mindest-/Maximalwerte für ein Feld nicht angegeben werden, erfolgt die Kontrolle der eingegebenen Werte nur bei ihrem Eintritt in den Bereich der Variablen vom Typ double.
Sie können das Maximum und Minimum jetzt zwangsweise festlegen. Zum Beispiel so:
m_spin_edit_Depo.MaxValue(DBL_MAX); m_spin_edit_Depo.MinValue(-DBL_MAX);
Sie haben einen Tippfehler. Verwenden Sie einen Punkt "." als Trennzeichen. :
//---
Sie können das Maximum und das Minimum vorerst erzwingen. So, das war's:
Der neue Artikel Grafische Schnittstellen VI: Das Kontrollkästchen-Steuerelement, das Bearbeitungs-Steuerelement und ihre Mischformen (Kapitel 1) wurde veröffentlicht:
Autor: Anatoli Kazharski
Hallo Sir, ich interessiere mich für Ihren Artikel, aber ich bin noch ein Neuling in Sachen GUI und mql,
können Sie mir bitte sagen, wie man den Wert von Spin edit erhält, damit er in den EA eingelesen werden kann.
Mit freundlichen Grüßen
Hallo Sir ich bin interessant auf Ihren Artikel, aber ich noch Neuling über GUI und mql,
können Sie bitte sagen Sie mir, wie man Wert von Spin bearbeiten, so dass es an die EA gelesen werden kann.
Mit freundlichen Grüßen
Zum Beispiel, aus einem Artikel in CProgram::OnEvent() Event-Handler:
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { //--- Событие нажатия на текстовой метке if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL) { ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam); //--- Если нажали на первом чекбоксе if(lparam==m_checkbox1.Id()) { m_checkbox2.CheckBoxState(m_checkbox1.CheckButtonState()); m_spin_edit1.SpinEditState(m_checkbox1.CheckButtonState()); Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue()); } if(lparam==m_checkbox3.Id()) { m_checkboxedit1.CheckBoxEditState(m_checkbox3.CheckButtonState()); Print("m_checkboxedit1.GetValue(): ",m_checkboxedit1.GetValue()); } if(lparam==m_checkbox4.Id()) { m_checkcombobox1.CheckComboBoxState(m_checkbox4.CheckButtonState()); } if(lparam==m_checkbox5.Id()) { m_slider1.SliderState(m_checkbox5.CheckButtonState()); m_dual_slider1.SliderState(m_checkbox5.CheckButtonState()); Print("m_slider1.GetValue(): ",m_slider1.GetValue()); Print("m_dual_slider1.GetLeftValue(): ",m_dual_slider1.GetLeftValue()); Print("m_dual_slider1.GetRightValue(): ",m_dual_slider1.GetRightValue()); } } if(id==CHARTEVENT_CUSTOM+ON_END_EDIT) { ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam); if(lparam==m_spin_edit1.Id()) { Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue()); } if(lparam==m_checkboxedit1.Id()) { Print("m_checkboxedit1.GetValue(): ",m_checkboxedit1.GetValue()); } if(lparam==m_slider1.Id()) { Print("m_slider1.GetValue(): ",m_slider1.GetValue()); } if(lparam==m_dual_slider1.Id()) { Print("m_dual_slider1.GetLeftValue(): ",m_dual_slider1.GetLeftValue()); Print("m_dual_slider1.GetRightValue(): ",m_dual_slider1.GetRightValue()); } } if(id==CHARTEVENT_CUSTOM+ON_CLICK_INC || id==CHARTEVENT_CUSTOM+ON_CLICK_DEC) { ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam); if(lparam==m_spin_edit1.Id()) { Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue()); } if(lparam==m_checkboxedit1.Id()) { Print("m_checkboxedit1.GetValue(): ",m_checkboxedit1.GetValue()); } } }
Zum Beispiel aus einem Artikel in CProgram::OnEvent() event handler:
Regard's
Lieber Anatoli Kazharski, vielen Dank für diese großartige Bibliothek!
Ich liebe das Look & Feel der resultierenden Schnittstellen.
Als ich anfing, die Test Library 10.mq5 an meine persönlichen Bedürfnisse anzupassen, dachte ich, es wäre erwähnenswert, dass es mir wirklich geholfen hat, die Methode
void CSpinEdit::LabelText(const string new_text)
zur Klasse CSpinEdit hinzuzufügen, die nichts anderes tut, als jeden Aufruf von CLabel::Description(const string new_text) aufzuschieben. Der Grund dafür ist, dass ich ein CSpinEdit für verschiedene Arten von Werten in Abhängigkeit vom Zustand einer CComboBox verwende. Nach dem Ändern der Beschriftung mit LabelText(text) und der Auswahl des entsprechenden Bearbeitungsformats werden die Werte wie gewünscht nach dem Aufruf von
void CSpinEdit::ChangeValue(const double value)
Nochmals vielen Dank und herzliche Grüße
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Graphische Interfaces VI: Das Checkbox Control, Das Edit Control und deren gemischte Typen (Kapitel 1) :
Dieser Artikel ist der Anfang des 6. Teils dieser Serie, welche der Entwicklung einer Bibliothek für die Erzeugung von grafischen Interfaces im Metatrader-Terminal gewidmet ist. In dem ersten Kapitel werden wir das Checkbox-Control, dass Edit-Control und deren gemischte Typen besprechen.
Das Checkbox-Control
Die Checkbox wird für die Verwaltung und Steuerung von Parameter entworfen, die nur zwei Zustände annehmen können. Hierfür wird ein Button mit zwei Icons verwendet, damit der aktuelle Status des Parameters, mit welchem dieses Control verbunden wurde, angezeigt werde kann. Das Icon mit dem Check-Symbol bedeutet, dass der Parameter aktiviert ist (an). Das Icon ohne dem Check-Symbol bedeutet, dass der Parameter deaktiviert ist (aus) Neben dem Button befindet sich eine kurze Beschriftung.
Dieses Element wird aus drei grafischen Objekten zusammengesetzt. :Diese sind:
Abbildung 1. Die zusammengesetzten Teile des Checkbox-Controls
Autor: Anatoli Kazharski