Autor |
Beitrag |
padawan
      
Beiträge: 35
Erhaltene Danke: 1
|
Verfasst: Mi 17.11.10 16:46
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
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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 17.11.10 16:50
padawan hat folgendes geschrieben : | Aber das klappt leider nicht |
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... 
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mi 17.11.10 16:59
Wie jaenicke 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...
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
padawan 
      
Beiträge: 35
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 155
Erhaltene Danke: 6
Win XP
Delphi 7.0 Personal
|
Verfasst: 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 
      
Beiträge: 35
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 17.11.10 18:07
|
|
padawan 
      
Beiträge: 35
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 155
Erhaltene Danke: 6
Win XP
Delphi 7.0 Personal
|
Verfasst: 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
Einloggen, um Attachments anzusehen!
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Zuletzt bearbeitet von elundril am Fr 19.11.10 22:23, insgesamt 1-mal bearbeitet
|
|
padawan 
      
Beiträge: 35
Erhaltene Danke: 1
|
Verfasst: Mi 17.11.10 22:08
Werde es versuchen!
DANKE Euch!!!
|
|
padawan 
      
Beiträge: 35
Erhaltene Danke: 1
|
Verfasst: 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!!!
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 35
Erhaltene Danke: 1
|
Verfasst: 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!!!
|
|