ComboBox Select in Ini-Datei speichern und auslesen
-
CStoll schrieb:
Wenn du die Selektion speichern willst, solltest du lieber über GetCurSel() die Position bestimmen und per WritePrivateProfileInt() schreiben (umgekehrt ReadPrivateProfileInt() und SetCurSel()). (und die Hilfsvariablen brauchst du noch nicht mal in der Klasse - die kannst du lokal in der Ende- bzw. Start-Methode anlegen und wiederverwenden)
WritePrivateProfileInt kennt er bei mir nicht. Nur String, Section oder Struct.
Muss ich was includen?
-
Wenn du mit einem String arbeiten willst, kannst du dir auch mal GetWindowText und SelectString absehen.

-
estartu schrieb:
Wenn du mit einem String arbeiten willst, kannst du dir auch mal GetWindowText und SelectString absehen.

Ich weiss nicht ob ich das möchte
Aber ich glaube nicht.
Ich würde gerne möglichst direkt die aktuelle Auswahl der ComboBox (in dem Fall den Zahlenwert der aktuellen Selection) speichern.
Verstehe ich Dich richtig, dass Du vorschlägst nicht den Zahlenwert der Selection,
sondern den Text der sich hinter dieser Selection verbirgt zu speichern?
Werde ich mal bissle probieren. Wobei ich mir das mit den Zahlenwerten einfacher vorstelle
PS: Falls in diesem Zusammenhang der Begriff Zahlenwert unklar ist:
CComboBox
0 = ComboBox Eintrag1
1 = ComboBox Eintrag2
.
.
.
Das meine ich mit Zahlenwert oder Selection, den ich gerne speichern möchte.
-
Mackie1980 schrieb:
SetCurSel und GetCursel verwende ich. Trotzdem Danke.
Also es sieht ungefähr so aus://Beim Starten GetPrivateProfileString("Decoder Control","Bitstream Detect","NULL",start_loader,destSize,"c:\\DM200\\config.ini"); iBitstreamDetect = atoi(start_loader); // so lese ich das ein . . m_BitstreamDetect.SetCurSel(iBitstreamDetect); //Wert beim Starten setzen .//Umweg über int würde ich mir gerne sparen . //Beim BeendenSo ungefähr würde ich das gerne speichern aber meckert er wie beschrieben
"Konvertierung von CComboBox in LPCSTR nicht möglich"Ist mir ja klar. Aber wie konvertiere ich möglichst einfach?
Warum wendest du das Verfahren zum Einlesen nicht umgekehrt an?
WritePrivateProfileString("Decoder Control", "Bitstream Detect", itoa(m_BitstreamDetect.GetCurSel()), "c:\\DM200\\config.ini");(itoa() als Umkehrung zu atoi müsstest du dir selber schreiben - z.B. mit sprintf() oder CString::Format())
-
CStoll schrieb:
Was für einen Typ hat denn m_combo? Und was steht dort drin?
Wenn du die Selektion speichern willst, solltest du lieber über GetCurSel() die Position bestimmen und per WritePrivateProfileInt() schreiben (umgekehrt ReadPrivateProfileInt() und SetCurSel()). (und die Hilfsvariablen brauchst du noch nicht mal in der Klasse - die kannst du lokal in der Ende- bzw. Start-Methode anlegen und wiederverwenden)
Also das mit dem Wandeln in Int und ne Hilfsvariable, die ich wiederverwenden kann,
hab ich gecheckert. Aber WritePrivateProfileInt frisste er bei mir nicht.
Und ohne den Befehl machts keinen Spaß
Wäre aber Lösung mit der ich leben könnte über int zu gehen.
Daher wie komme ich an WritePrivateProfileInt?
Danke!
-
Ich dachte wirklich, die Funktion gibt's - aber die MSDN hat mich da (leider) eines besseren belehrt. Du mußt wohl doch über zwei (möglicherweise temporäre) Zwischenvariablen gehen, indem du den Rückgabewert von GetCurSel() in einen String schreibst und diesen dann an WritePrivateProfileString weitergibst (siehe mein voriger Beitrag).
-
Auch Moderatoren können/dürfen sich mal irren

Also das Schreiben habe ich jetzt so gelöst:WritePrivateProfileString("Decoder Control", "Bitstream Detect", itoa(m_BitstreamDetect.GetCurSel(), start_loader, 10), "c:\\DM200\\config.ini");Super! Danke.
Aber das Lesen macht mir noch Sorgen:GetPrivateProfileString("Decoder Control","Bitstream Detect","NULL",start_loader,destSize,"c:\\DM200\\config.ini"); iBitstreamDetect = atoi(start_loader); //start_loader ist Variable die für alle eingelesenen Werte und beim Beenden //für alle geschriebenen Werte genutzt wirdGeht das nicht noch einfacher? Einzeiler?
Danke.
-
Bau dir die fehlende Funktion doch einfach selber.
Wenn ich dich richtig verstanden habe, hast du ja noch mehr Werte zu speichern.
-
Hmm, du könntest dir die ..Int()-Varianten auch selber schreiben und dort drin die Umwandlungen atoi() bzw. itoa() gleich kapseln.
Bei deinem Code kannst du auf jeden Fall die Zwischenspeicherung weglassen und direkt
m_BitStreamDetect.SetCurSel(atoi(start_loader));schreiben.
-
Also vielen Dank für die Hilfe.
Habe mir jetzt, wie CStoll vorgeschlagen hat, den Zwischenschritt gespart und so komme ich gut hin.
Mit einem Zweizeiler beim Einlesen kann ich leben.
Bleibt halt einfach eine Menge an Daten
Nochmal vielen Dank für Eure Hilfe.Nach dem Problem ist vor dem Problem
Habe die nächste Frage.
Weiss nicht ob ich jetzt einen neuen Thread hätte eröffnen sollen, aber ich probiere es mal so da es noch mit dem Thema zu tun hat.Wenn in meinem Programm in einer ComboBox eine Selection ausgewählt wird,
wird diese natürlich ausgewertet und damit ist eine Befehlsausgabe an der RS232
verbunden. Der PC ist mit einer Messkarte verbunden, die dann angesteuert wird und
irgendwelche Settings verändert werden.
Jetzt aber mein Problem:
Wie bekomme ich es hin, dass wenn ich das Programm starte und die ComboBoxen auf die letzten Einträge wieder eingestellt werden (config.ini auslesen), auch alle diese Befehle nacheinander, die jeweils mit einem Eintrag in den ComboBoxen verknüpft sind, an der RS232 ausgegeben werden.
Es sollen also alle Settings der letzten Messung wieder hergestellt werden.
Die Werte werden ja in meine config.ini gespeichert.
Gibt es dafür auch ein Ereignishandle oder sowas?
Hab keine Idee. Vielleicht sitze ich auch schon einfach zu lange vor der Kiste