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];  // f=Datei mit 8 Werte, jeweils '0' oder '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 user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


jaenicke - Mi 17.11.10 16:50

user profile iconpadawan hat folgendes geschrieben Zum zitierten Posting springen:
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:


Dude566 - Mi 17.11.10 16:59

Wie user profile iconjaenicke bereits erwähnte fehlt dir vermutlich FindComponent, wenn du das so machen willst:

Delphi-Quelltext
1:
CheckBox[i]:=StrToBool(s);                    

Das funktioniert so nicht. ;)

Google sagt... [http://www.google.de/#hl=de&source=hp&q=delphi+find+component&aq=f&aqi=g1&aql=&oq=&gs_rfai=&fp=ccfee68ad5fcd1b0]


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 user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.

---Moderiert von user profile iconNarses: 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 user profile iconNarses: 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 user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


jaenicke - Mi 17.11.10 18:07

user profile iconpadawan hat folgendes geschrieben Zum zitierten Posting springen:
Compilieren klappt, bei Aufruf der Schleife erzeugt Absturz.
Bist du denn sicher, dass CheckBox0 existiert? Das solltest du beim Aufruf prüfen.

user profile iconpadawan hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: 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

user profile iconpadawan hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconpadawan hat folgendes geschrieben Zum zitierten Posting springen:
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, 11));
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!!!