Entwickler-Ecke
Sonstiges (Delphi) - Checkbox-Werte aus Datei lesen ??
padawan - Mi 17.11.10 16:46
Titel: Checkbox-Werte aus Datei lesen ??
Hallo Delphi-Freunde!!
Habe 8 Checkboxen in einer Groupbox.
Die werden vom Benutzer nach Bedarf gesetzt.
Die Zustände dieser CheckBoxen- ob gesetzt oder nicht, möchte ich in eine Datei speichern und beim nächsten Prog-Start aus dieser Datei die Werte wieder setzen.
Habe Folgendes versucht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| i:=0; s:string[1]; while not eof(f) do readln(f, s); CheckBox[i]:=StrToBool(s); inc(i); end; |
Aber das klappt leider nicht :cry:
Unter Google fand ich nur ähnliche Themen dazu. Auch in dem Buch "Delphi 6" konnte ich nichts finden.
Würde mich über einen hilfreichen Tio echt freuen!!!
Gruß Uli
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
jaenicke - Mi 17.11.10 16:50
padawan hat folgendes geschrieben : |
Aber das klappt leider nicht :cry: |
Was klappt nicht? Das sieht doch ganz gut aus (abgesehen davon, dass du .Checked vergessen hast).
Immer vorausgesetzt du hast dein Array CheckBox auch korrekt gefüllt
und die Zeilen stehen in der Datei.
Aber vermutlich fehlt dir einfach nur FindComponent... :roll:
padawan - Mi 17.11.10 17:02
Hallo!
Ja, habe es hier nicht vollständig eingetippt, aber im Quelltext steht es so:
Delphi-Quelltext
1:
| CheckBox[i].Checked := StrToBool(s); |
Beim compilieren kommt die Fehler meldung:
<Undeklarierter Bezeichner 'Checkbox'>
Mit zB:
CheckBox1.Checked := StrToBool(s); gibt es zwar keine Fehlermeldung, Delphi will dieses [i] nicht.
Könnte ja die Checkboxen ohne Schleife setzen, aber schön ist das wohl nicht. Die Checkbox für eine Schleife indizieren, das gelingt mir nicht.
Moderiert von
Narses: Delphi-Tags hinzugefügt
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
---
Moderiert von
Narses: Beiträge zusammengefasst---
Das konnte ich mit meiner Suche "Delphi Checkbox" über Google natürlich nicht finden.
Ich werde gleich versuchen, FindComponent einzusetzen.
Melde mich gleich.
---
Moderiert von
Narses: Beiträge zusammengefasst---
Nun, habe es sicher nicht richtig umsetzen können- erzeugt eine Delphi-Ausnahme:
Delphi-Quelltext
1: 2:
| TCheckbox(FindComponent('Checkbox'+IntToStr(i))).Checked:= TCheckbox(FindComponent('Checkbox'+IntToStr(i))).Checked; |
Compilieren klappt, bei Aufruf der Schleife erzeugt Absturz.
Die Checkboxen befinden sich auf Form3, müsste das also auch beachten.
Aber wie teile ich das Delphi mit??
Danke Euch!
Georg08 - Mi 17.11.10 17:21
Ich würde sowas mit einem IniFile lösen...
wäre vllt einfacher, da es die Funktion ReadBool schon hat
padawan - Mi 17.11.10 17:32
Hört sich viel versprechend an!
Muss mich damit erst vertraut machen, da ich noch keine Erfahrung mit einem ini.File habe.
Gibt es ein Tutorial darüber? Ich versuche es über Google.
Habe die Checkboxen zunächst 'zu Fuß' gesetzt(ohne Schleife)..naja
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
jaenicke - Mi 17.11.10 18:07
padawan hat folgendes geschrieben : |
Compilieren klappt, bei Aufruf der Schleife erzeugt Absturz. |
Bist du denn sicher, dass CheckBox0 existiert? Das solltest du beim Aufruf prüfen.
padawan hat folgendes geschrieben : |
Die Checkboxen befinden sich auf Form3, müsste das also auch beachten.
Aber wie teile ich das Delphi mit?? |
Delphi-Quelltext
1:
| ...Form3.FindComponent... |
padawan - Mi 17.11.10 18:33
Hallo jaenicke!
Mit
Delphi-Quelltext
1:
| Form3.FindComponent('Checkbox'+IntToStr(i)).Checked:=Form3.FindComponent('Checkbox'+IntToStr(i)).Checked; |
ist Delphi nicht einverstanden: Undeklarierter Bezeichner 'Checked'
Hab noch viel zu lernen..
Moderiert von
Narses: Delphi-Tags hinzugefügt
Moderiert von
Narses: U- durch Highlight-Tags ersetzt
Georg08 - Mi 17.11.10 18:39
Ich hab mal ein Beispiel geschreiben, dass die Boxen findet, sie in eine Ini speichern kann und auch wieder auslesen...
Mann muss es eben ggf anpassen z.B. wenn die Checkboxen in einem anderen Formular sind, oder nicht wie in meinem Bsp CheckBox1, CheckBox2, ... heißen
elundril - Mi 17.11.10 18:41
padawan hat folgendes geschrieben : |
Hallo jaenicke!
Mit ...Form3.FindComponent('Checkbox'+IntToStr(i)).Checked:=Form3.FindComponent('Checkbox'+IntToStr(i)).Checked;
ist Delphi nicht einverstanden: Undeklarierter Bezeichner 'Checked'
Hab noch viel zu lernen.. |
Du musst die Compontenten noch auf TCheckbox casten, also
Delphi-Quelltext
1:
| (Form3.FindComponent('Checkbox' + IntToStr(i)) as TCheckbox).Checked := .... |
und das gleiche auf der anderen seite dann auch.
lg elundril
padawan - Mi 17.11.10 22:08
Werde es versuchen!
DANKE Euch!!!
padawan - Fr 19.11.10 12:16
Hallo Narses,
VIELEN Dank für Deine Mühe!!!
Habe alles mal eingebaut, es klappt einfach nicht.
Zunächst ist in der Deklaration GroupBox1 rot unterstrichen und bei F9 kommen gleich an die 10 Fehlermeldungen, habe Screenshot im Anhang. Diese Meldung kommt für jede Zeile, die ich von Dir bekommen habe. Also für jede Checkbox, BtnSave usw. Selbst beim Speichern des Quelltextes will Delphi alles entfernen.
Auf jeden Fall DANKESCHÖN!!!
jaenicke - Fr 19.11.10 12:25
padawan hat folgendes geschrieben : |
Habe alles mal eingebaut, es klappt einfach nicht. |
Wenn du mit eingebaut meinst, dass du auch die Zeilen mit den CheckBoxen kopiert hast, kann es auch nicht gehen, die müssen natürlich auf dem Formular liegen...
padawan - Fr 19.11.10 14:12
Ja, die liegen auf der Form3, hier habe ich auch die units(IniFiles, XPMan) eingebunden. Kann die Ursache nicht rausfinden, da mir einfach die Grundlagen fehlen. Mit TP7 kam ich nahezu immer zurecht, eben alles zu Fuß programmiert. Jetzt kommt bei F9 immer die Meldung "Form3.XPManifest1 besitzt keine entspr. Komponente. Soll die Deklaration entfernt werden?" Ich klicke auf <Nein> und dann Kommt "Undeklarierter Bezeichner:'FindComponent'." Das mit den Checkboxen habe ich nun ohne Schleife gelöst:
Delphi-Quelltext
1: 2:
| if CheckBox1.Checked then s:='1' else s:='0'; writeln(F, s+CheckBox1.Caption); |
Und das eben für alle 8 Boxen. In jede Zeile der Datei(F) schreibe ich '0'/'1' für Checked, gefolgt von .Caption. Beim Start des Progs lade ch die Werte mit:
Delphi-Quelltext
1: 2:
| readln(f, s); Checkbox1.Checked:=StrToBool(copy(s, 1, 1)); Checkbox1.Caption:=copy(s, 2, length(s)-1); |
Das eben auch wieder für alle 8 Boxen. So kann ich als Anwender entscheiden, welche Boxen beim nächsten Start erscheinen sollen. Das klappt ausgezeichnet, der Weg dahin macht mich allerdings nicht so glücklich. Ich denke, dass ich das weiter zu Fuß mache und mehr Zeit für grundsätzliches über Delphi investiere. Will hier auch nicht nerven, hätte das nur gerne begriffen. DANKE vielmals!!!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!