![]() |
.txt in checklistbox anzeigen & angehakte zeilen löschen
Hallo,
ich brauche mal eure Hilfe bei einer CheckListBox. Ich habe eine .txt Datei welche ich auslese und zeilenweise in einer checklistbox darstelle. Soweit funktioniert das auch ! Jetzt möchte ich aber aus dieser Datei DIE ZEILEN LÖSCHEN, welche ich dann in der checkListBox auswähle... leider bekomme ich das nicht hin .. Die Werte aus der Datei lese ich wie folgt aus: ChecklistBox1.Items.LoadFromFile(myPCharfile); -> myPcharfile enthält die Pfadangabe zur Datei file.txt viele Grüße Florian -------- Delphi 7 Personal |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
Hallo,
lade die Datei in eine TStringList (die hat auch ein LoadFromFile), übergebe sie per CheckList.Itesm.Assing(StringList). Lösche die Zeilen aus der StringList, die markiert in der ListBox sind (am besten von hinten per downto) und schreibe das Ergebnis in die Datei "zurück" (die alte wird überschrieben). Ein DeleteLine gibt es bei Textdateien nicht. Heiko |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
Hallo Heiko,
danke für die schnelle Antwort.. leider bin ich absoluter neuling und kann das was du schreibst leider programiertechnisch noch nicht bewerksteligen.. wenn es snihct zu viele zeilen sind wäre mir die fertig ausformulierte lösung das liebste, dann kann ich mir anhand dessen es besser verdeutlichen wie es funktioniert. viele grüße florian |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
Hallo violinplayer
Also das ganze ist relativ simpel, denn die Cheklistbox Items sind ja berteits eine StringList also muss man die checkbox nur durchgehen und gucken ob ein item selected ist, dann dieses löschen. Komplex wird das ganze erst durch dei daraus resultierende Indexverschiebung, weshalb das ganze nicht so leicht mit einer for Schleife gelöst wrden kann (Kannst es ja mal probieren ;) ). Hier das ganze als Codebesipiel, aber bitte bnicht nur Copy & Paste, wenn du den Code nicht verstehst dann frag einfach nach.
Delphi-Quellcode:
Grüße Phreax
procedure TForm1.Button1Click(Sender: TObject);
var I: Integer; begin I := 0; //inistialisieren while CheckListBox1.Items.Count > I do //Damit .Count immer wieder aktualisiert wird if CheckListBox1.Checked[I] then CheckListBox1.Items.Delete(I) else Inc(I); //weil der Index "nachruchtscht" end; |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
ok.. soweit klar und verstanden ..
wie schreibe ich das ganze dann so in die datei das die weggefallenen items auch "weg" sind ? viele Grüße Florian |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
Hallo,
nach dem delete Code einfach CheckListBox.WriteToFile(?) Damit wird die alte Datei überschrieben. Die die Zeilen in der CheckListBox nicht mehr drinstehen, sind sie auch in der neuen Datei nicht drin. Heiko |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
Es gibt genauso wie es ein LoadFromFile gibt auch ein SaveToFile. :)
Damit kannst du grad die Datei, mit den gelöschten Zeilen, neu erstellen. (mit gleichem oder anderem Namen) |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
wie deklariere ich writetofile ?
daran hängt es noch ... |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
Zitat:
Delphi-Quellcode:
CheckListBox1.Items.SaveToFile('blub.txt');
|
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
ich bekomme immer die Fehlermeldung "Undeclared identifier" 'savetofile' oder 'writetofile' je nachdem was ihc nehmen möchte ..
wie muss ich es in Type deklarieren ? viele Grüße Florian |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
nein, SaveToFile ist eine Methode der Stringlist.
Also musst du auch 'Name_der_Stringlist'.SaveToFile('Filename') eingeben. |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
Zitat:
Gruß phreax EDIT: Wo war der rote kasten schon wieder ? :angel: |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
tut mir ja leid das ich nihct so ganz durchblicke..
aber was muss ich denn tun damit ich das problem "undeclared identifier" gelöäst bekomme ? gruss Florian |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
Zitat:
Delphi-Quellcode:
for i := CheckListBox1.Items.Count-1 downto 0 do
if CheckListBox1.Checked[i] then CheckListBox1.Items.Delete(i); |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
Zitat:
zum Thema kopiere Folgenden Queltext und es geht:
Delphi-Quellcode:
Gruß phreax
CheckListBox1.Items.SaveToFile(ExtractFilePath(Application.ExeName)+'Text.txt');
//Die Datei wird in das Programmverzeichnis gespeichert... //ExtracFilePAth() Holt nur das Anwendungsverzeichnis... |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
JETZT GEHT ES !
procedure TForm1.Button2Click(Sender: TObject); var I: Integer; begin I := 0; //inistialisieren while CheckListBox1.Items.Count > I do //Damit .Count immer wieder aktualisiert wird if CheckListBox1.Checked[I] then CheckListBox1.Items.Delete(I) else Inc(I); //weil der Index "nachruchtscht" CheckListBox1.Items.SaveToFile(myPcharcalljob); switchcontent(); end; DANKE ! |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
Bitte, kein Problem aber nächstes mal bitte mit Delphi-Tags ;)
mfg phreax |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
Hallo phreax,
ich leider relativ unerfahren im Umgang mit Pascal, aber arbeite gerade dran, das zu ändern. ;) Momentan habe ich ein Problem, welches Du eventuell lösen kannst, da Du im dem Thread ( ![]() den folgenden Beitrag geschrieben hast: Zitat:
Mein Problem ist jetzt: ich habe eine CheckListBox:
Delphi-Quellcode:
Diese enthält (ähnlich wie im obigen Thread) einige Einträge. Wieviel das sind und wie die aussehen, weiß ich erst zur Laufzeit.
CheckListBox := TNewCheckListBox.Create(MyCheckListPage);
Das Erstellen klappt m.E. ganz gut, nur möchte ich auslesen, welche CheckListBox ausgewählt wurde. Irgendetwas wie:
Delphi-Quellcode:
Du hattest dazu etwas geschrieben, was ich nicht ganz verstehe.
if MyCheckListPage.Values[i] = true; then
NewString[i] := 'ja'; Ich arbeite mit InnoSetup, wo man in der [Code] Sektion selber Pascal Code schreiben kann. Habe versucht Deine Hilfe so umzusetzen:
Delphi-Quellcode:
Jedoch ist die if-Bedingung nie war. :(function NextButtonClick(CurPageID: Integer): Boolean; var text: String; NewString: TArrayOfString; begin if CurPageID = MyCheckListPage.ID then begin setArrayLength(NewString, upperBound); // ** Wenn Haken gesetzt, dann ja in Array ... ansonten '' for i:= 0 to upperBound-1 do begin if CheckListBox.Checked[i] = true then begin MsgBox('i = ' + IntToStr(i), mbInformation, MB_OK); NewString[i] := 'ja'; end; end; end; Inwiefern ich die procedure TForm1.Button1Click(Sender: TObject); einbauen kann, ist mir leider auch nicht klar. Ich kenne nur die NextButtonClick-Funktion von InnoSetup Weitere Einstellungen, die ich vorgenommen habe:
Delphi-Quellcode:
MyCheckListPage := CreateCustomPage(wpWelcome, 'Bitte suchen Sie sich etwas aus:',
'Alles möglich!:'); CheckListBox := TNewCheckListBox.Create(MyCheckListPage); // CheckListBox2 := TNewCheckListBox.Create(MyCheckListPage); CheckListBox.Width := MyCheckListPage.SurfaceWidth; CheckListBox.Height := MyCheckListPage.SurfaceHeight; CheckListBox.Flat := False; CheckListBox.Parent := MyCheckListPage.Surface; CheckListBox.AddCheckBox('HauptBox 1', 'das hier ist wichtig!', 0, True, True, False, False, nil); CheckListBox.Checked[0] := True; if upperBound > 0 then begin CheckListBox.AddCheckBox('HauptBox 2', 'das hier ist auch wichtig!', 0, True, True, False, False, nil); for i:= 0 to upperBound-1 do begin CheckListBox.AddCheckBox(MyArray[i], '', 1, True,True, False, True, nil); CheckListBox.Checked[i+1] := true; end; end; Ich hoffe bei Dir an der richtigen Stelle zu sein, da mich das Problem langsam zum Verzweifeln bringt. Solltest Du irgendwelche hilfreichen Ratschläge haben, würde ich mich sehr über eine Reaktion freuen! In diesem Sinne ... schöne Grüße! #50 |
Re: .txt in checklistbox anzeigen & angehakte zeilen lös
Hi #50,
Ich habe noch nie viel Code im Innosetup geschrieben, das Problem ist dass da eine sehr ähnliche aber trotzdem sich von der VCL-Biblothek (wie sie im normalen Delphi benutzt wird) unterscheidende Bibliothek eingesetzt wurde. Daher kann ich dir nicht genau sagen ob dein Initialisierungscode einen Fehler enthält. Ich sehe aktuell nur zwei Fehlerquellen:
nicht zum gewünschten Ergebnis führen, zu diesem Thema kann man auch einiges in der DP finden. Richtig gehts so:
Delphi-Quellcode:
mfg phreax
if CheckListBox.Checked[i] then
begin //Dein Code hier ;) end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 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