![]() |
CheckListBox aus ini Datei lesen
Hallo wiedermal,
ich möchte gerne die gecheckten Items einer CheckListBox in eine ini Datei Speichern, das Speichern klappt glaub ich schon.
Delphi-Quellcode:
Nun komm ich aber nich dahinter wie ich das wieder auslesen kann.
ini := TIniFile.Create(IncludeTrailingPathDelimiter(GetCurrentDir)+'einstellungen.ini');
begin try for i := 0 to ChecklistBox1.Count - 1 do if ChecklistBox1.Checked[i] = true then begin s:=s+ChecklistBox1.Items[i]+','; end; ini.WriteString('ChecklistBox','Items',s); finally ini.Free; end; end; Vielleicht könnt ihr mir einen Tipp geben. |
Re: CheckListBox aus ini Datei lesen
Moin iron,
warum speicherst Du es nicht einfach anders. Vor dem Speichern löscht Du die Section, und dann werden alle CheckListBox.Items in jeweils einem, durchnummerierten, Ident gespeichert. Anschliessend kannst Du noch ein Ident für die Anzahl dazunehmen, und weisst beim Auslesen sogar, wieviele Items Du wieder einlesen musst. |
Re: CheckListBox aus ini Datei lesen
Ändert sich der Inhalt der ChecklistBox, oder ist der fest?
Wenn der Inhalt sich nicht ändert, dann kannst du auch einfach nur den CheckStatus über den Index speichern und lesen. z.B.:
Delphi-Quellcode:
ini := TIniFile.Create(IncludeTrailingPathDelimiter(GetCurrentDir)+'einstellungen.ini');
try for i := 0 to ChecklistBox1.Count - 1 do ini.WriteBoolean('ChecklistBox', 'Item' + IntToStr(i), ChecklistBox1.Checked[i]); finally ini.Free; end;
Delphi-Quellcode:
Ansonsten die Namen in der Ini auflisten, dann der Reihe nach die gefundenen Namen in der ChecklistBox suchen und .Checked auf True setzen (vorher alle .Checked auf False)
ini := TIniFile.Create(IncludeTrailingPathDelimiter(GetCurrentDir)+'einstellungen.ini');
try for i := 0 to ChecklistBox1.Count - 1 do ChecklistBox1.Checked[i] := ini.ReadBoolean('ChecklistBox', 'Item' + IntToStr(i)); finally ini.Free; end; |
Re: CheckListBox aus ini Datei lesen
ja Danke himitsu, das hat mir schon ein ganzes stück weitergeholfen.
|
Re: CheckListBox aus ini Datei lesen
Guten Morgen,
da eine CheckListBox bei angemessener Benutzung keine Unzahl an Einträgen hat, würde ich den Zustand der Checkboxen als einen einzigen Wert speichern. Denkbar sind bis zu 32 Werte in einem DWORD - oder auch ein String.
Delphi-Quellcode:
Getippt und nicht getestet.
function GetCheckedStr(clb: TCheckListBox): String;
var i: Integer; begin SetLength(Result, clb.Count); for i := 0 to Pred(clb.Count) do Result[Succ(i)] := Chr(Ord('0') + Ord(clb.Checked[i])); end; procedure SetCheckedStr(clb: TCheckListBox; s: String); var i: Integer; begin for i := 0 to Pred(clb.Count) do // clb.Checked[i] := (i < Length(s)) and (s[i] = '1'); // s[i] fails clb.Checked[i] := (i < Length(s)) and (s[Succ(i)] = '1'); end; function GetCheckedCard(clb: TCheckListBox): Cardinal; var i: Integer; begin Result := 0; for i := Pred(clb.Count) downto 0 do Result := Result shl 1 + Ord(clb.Checked[i]); end; procedure SetCheckedCard(clb: TCheckListBox; n: Cardinal); var i: Integer; begin for i := 0 to Pred(clb.Count) do begin clb.Checked[i] := Odd(n); n := n shr 1; end; end; EDIT: Habe den von pszopp gefundenen Fehler korrigiert, damit garantiert niemand drüber stolpert. Grüße vom marabu |
Re: CheckListBox aus ini Datei lesen
Hi Marabu,
Zitat:
Delphi-Quellcode:
Gruß,
procedure SetCheckedStr(clb: TCheckListBox; s: String);
var i: Integer; begin for i := 0 to Pred(clb.Count) do //clb.Checked[i] := (i < Length(s)) and (s[i] = '1'); Hier Zugriff auf die Chars 0..Pred(Count) ! clb.Checked[i] := (Succ(i) <= Length(s)) and (s[Succ(i)] = '1'); end; pszopp |
Re: CheckListBox aus ini Datei lesen
Danke für die Korrektur.
Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz