Ich gehe bei so einem Problem immer mit dem Debugger los...
Klick auf ein Check und schau mit dem Debugger welchen Wert er auf true setzt.
Dann kannst du ihn selber in einer "Init" Routine nach dem erzeugen selber setzen.
meist einer der private vars .....m_states ?
private: //--- dependent controls CCheckBox m_rows[]; // array of the row objects //--- set up int m_offset; // index of first visible row in array of rows int m_total_view; // number of visible rows int m_item_height; // height of visible row //--- data CArrayString m_strings; // array of rows CArrayLong m_values; // array of values CArrayInt m_states; // array of states long m_value; // current value int m_current; // index of current row in array of rows
Gruß
Ich gehe bei so einem Problem immer mit dem Debugger los...
Klick auf ein Check und schau mit dem Debugger welchen Wert er auf true setzt.
Dann kannst du ihn selber in einer "Init" Routine nach dem erzeugen selber setzen.
Gruß
das mit der Init Routine hab ich probiert, das ist auch sowas was ich nicht verstehe,
wollte schon die textfelder mit der OnInit auf Werte setzen, aber der kennt die Felder nicht in der Init, drum hab ichs in die Create Funktion geschrieben.
ist quasi das gleiche auf umwegen
Hast du dich wirklich in OOP Konzepte eingelesen ?
Object erzeugen , member füllen ...sagt dir das was ?
Nun gut :-) ....such mal nach dem member der geändert wird wenn du auf einen check klickst.
Nun gut :-) ....such mal nach dem member der geändert wird wenn du auf einen check klickst.
danke, probier ich morgen, ich geh mal ins bett ;-)
So geht das (Beispiel Controls.mq5/ControlsDialog.mqh)
//+------------------------------------------------------------------+ //| Event handler | //+------------------------------------------------------------------+ void CControlsDialog::OnClickButton1(void) { m_edit.Text(__FUNCTION__); m_radio_group.Value(1); // index beginnt bei 1 } //+------------------------------------------------------------------+ //| Event handler | //+------------------------------------------------------------------+ void CControlsDialog::OnClickButton2(void) { m_edit.Text(__FUNCTION__); m_check_group.Check(0,1); // index beginnt bei 0 }
ist am Anfang eine furchtbare Sucherei weil F1 hier nicht funktinoert.
Dokumentation und Beispiele findet man hier https://www.mql5.com/de/docs/standardlibrary/controls
Und die Ereignisbehandlung wird durch Macros für den Einsteiger unkenntlich gemacht:
EVENT_MAP_BEGIN(CControlsDialog) ON_EVENT(ON_CLICK,m_button1,OnClickButton1) ON_EVENT(ON_CLICK,m_button2,OnClickButton2) ON_EVENT(ON_CLICK,m_button3,OnClickButton3) ON_EVENT(ON_CHANGE,m_spin_edit,OnChangeSpinEdit) ON_EVENT(ON_CHANGE,m_date,OnChangeDate) ON_EVENT(ON_CHANGE,m_list_view,OnChangeListView) ON_EVENT(ON_CHANGE,m_combo_box,OnChangeComboBox) ON_EVENT(ON_CHANGE,m_radio_group,OnChangeRadioGroup) ON_EVENT(ON_CHANGE,m_check_group,OnChangeCheckGroup) EVENT_MAP_END(CAppDialog)
Durch Auflösung der Macros wird das schon verständlicher:
bool CControlsDialog::OnEvent(const int id,const long& lparam,const double& dparam,const string& sparam) { if(id==(ON_CLICK+CHARTEVENT_CUSTOM) && lparam==m_button1.Id()) { OnClickButton1(); return(true); } if(id==(ON_CLICK+CHARTEVENT_CUSTOM) && lparam==m_button2.Id()) { OnClickButton2(); return(true); } if(id==(ON_CLICK+CHARTEVENT_CUSTOM) && lparam==m_button3.Id()) { OnClickButton3(); return(true); } if(id==(ON_CHANGE+CHARTEVENT_CUSTOM) && lparam==m_spin_edit.Id()) { OnChangeSpinEdit(); return(true); } ON_EVENT(ON_CHANGE,m_date,OnChangeDate) // und so weiter, den Rest spare ich mir ON_EVENT(ON_CHANGE,m_list_view,OnChangeListView) ON_EVENT(ON_CHANGE,m_combo_box,OnChangeComboBox) ON_EVENT(ON_CHANGE,m_radio_group,OnChangeRadioGroup) ON_EVENT(ON_CHANGE,m_check_group,OnChangeCheckGroup) return(CAppDialog::OnEvent(id,lparam,dparam,sparam)); }
Ich habe ein Tool namens 'Spy' geschrieben, das funktioniert ähnlich wie der Windows-Spy. Lauscht auf alle Events und gibt die mit Print() aus.
Will ich nächstes Jahrin in der Codebase veröffentlichen. Zum Erstellen von Dialogen unverzichtbar.
Bei Interesse bitte PN.
- www.mql5.com
danke, probier ich morgen, ich geh mal ins bett ;-)
Ergebnisse ?
sorry, war ein wenig stressig um die Weihnachtszeit.
ich bin wieder mal über meine Unkenntnis gestolpert. Man muss ja prinzipell unterscheiden zwischen
- CCheckGroup
- CCheckBox
Ich habe das ganze fälschlicherweise auf die Group aufgebaut, obwohl ich eigentlich nur die Box als Einzelwert verwenden will (seht man im Screenshot im ersten Post.
Die CCheckGroup muss man die Werte ähnlich der CRadioGroup setzen, mit dem Unterschied, das man hier mehrere Werte Gleichzeitig verwenden kann.
Ich habe das ganze jetzt auf de CCheckBox umgeschrieben, und da ist das setzen der Werte ganz einfach.
int x1=INDENT_LEFT; int y1=INDENT_TOP+ (BUTTON_HEIGHT+CONTROLS_GAP_Y)+ (BUTTON_HEIGHT+CONTROLS_GAP_Y)+ (RADIO_HEIGHT+CONTROLS_GAP_Y); int x2=x1+(GROUP_WIDTH/3)*2; int y2=y1+EDIT_HEIGHT; if(!m_check_box1.Create(m_chart_id,m_name+"CheckBox1",m_subwin,x1,y1,x2,y2)) return(false); if(!m_check_box1.Text("Trailing")) return(false); if(!Add(m_check_box1)) return(false); if(use_Trailing_Stop) m_check_box1.Checked(true); else m_check_box1.Checked(false); Comment(__FUNCTION__+" : Checked="+IntegerToString(m_check_box1.Checked())); //--- succeed return(true);
mit
m_check_box1.Checked(true)
geht das setzen der Werte gleich in der Create Funktion mit.
btw, kennst Du ein gutes Buch für OPP Einsteiger?
lg
amando
btw, kennst Du ein gutes Buch für OPP Einsteiger?
Nimm einen EA aus der Codebase mit OOP oder, noch einfacher, den MACD Sample.mq5 aus \MQL\Experts\Examples und lass ihn im Debugger (mit historischen Daten) laufen.
Da siehst Du, wann und wie in OOP die Ausführungen der Befehle, Funktionen und Methoden funktionieren.
Gleichzeitig siehst Du, wie OOP aufgebaut wird und das alle mit einem ziemlich gut kommentierten Code!
Sonst such erstmal hier (die Lupe) nach OOP unter den Artikeln - da gibt's viel für Anfänger mit Fokus auf mql5 sonst Google, aber da müsstest Du nach C++ suchen, das wäre noch am nächsten.
- 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.
Hallo,
ich probiers mal, weis nicht ob ich mich klar genug ausdrücke,
ich bin ja ein Mensch, dessen Grundkompetenz Faulheit ist. darum versuche ich mir auch das Traden so angenehm wie möglich zu machen.
Da ich meistens über einen VPS mit dem IPad trade, mann muss ja auch arbeiten, habe ich mir immer Buttons erzeugt, jetzt bin ich gerade dabei, mir die Funktionen in ein Panel zu legen
bei den Textfeldern war es ja kein Problem die Werte zu übernehmen,
aber hat einer von euch eine Idee, wie ich die Check Boxen, bzw die Radio Boxen vorbelegen kann?
was mir bei der Sache nicht klar ist, ich hab das mit allen möglichen Varianten probiert. Eigentlich dachte ich, wenn ich beim Create den Value vorgebe, dann übernimmt er diesen. soweit war diese Idee dann schon wieder am Ende
ich habs auch mit Enable, IsEnable,... probiert, aber irgendwie komme ich nicht auf einen grünen Zweig.
hat jemand eine Idee? ist jetzt nicht weltbewegend, die Erde dreht sich weiter, aber ich denke, irgendwie muss ich die ja auch vorbelegen können
lg
amando