![]() |
Probleme mit Checklistbox und Indexof bzw Indexofname
Delphi-Quellcode:
Bsp eines newlist eintrages "Titan: enabled",
procedure TForm1.ExecuteAddons(aktuell: string);
var newlist: TStringlist; i,o,u: integer; a,b: string; begin newlist := TStringlist.Create; newlist.LoadFromFile(aktuell+'AddOns.txt'); for i := 0 to newlist.count-1 do begin a := copy(newlist[i],0,pos(':', newlist[i])-1); b := copy(newlist[i],pos(':', newlist[i])+2,length(newlist[i])-pos(':', newlist[i])-2); o := Checklistbox1.Items.IndexOf(a); if (pos('enabled',b) >=0) then Checklistbox1.Checked[o] := true; end; end; wenn dahinter ein enabled steht soll er quasi den namen davor in der Checklistbox suchen und wenn er da vorhanden ist aktivieren. Nur irgendwie funktioniert das mit dem IndexOf bzw IndexOfName nicht. a und b sind richtig gefüllt, einmal mit dem namen und einmal mit dem enabled/disabled, nur o ist halt meißt -1 oder extrem hoch jenachdem welche IndexOf funktion ich nehme. Kann mir da zufällig jemand weiter helfen ? Zur Frage des Sinns dieses Codes: Das ganze hat mit World of Warcraft zu tun. Ich will die Addon Datei eines Charakters auslesen und bearbeiten. Daher das ganze mit dem suchen den sobald man einen Charakternamen anklickt soll der anzeigen welche addons bei diesem Charakter aktiviert sind. P.S.: Hab nach mehreren Jahren nun das erste mal wieder angefangen mit Delphi zu programmieren sollten also diverse kleine Fehler drin sein bitte ich das zu entschuldigen. Mfg Holger alias Capa :closed: hab das script umgebastelt und nun gehts |
Re: Probleme mit Checklistbox und Indexof bzw Indexofname
Hallo,
das sollte statt
Delphi-Quellcode:
lieber
a := copy(newlist[i],0,pos(':', newlist[i])-1);
Delphi-Quellcode:
heißen, Strings beginnen bei 1 und nicht bei 0.
a := copy(newlist[i],1,pos(':', newlist[i])-1);
Hieraus
Delphi-Quellcode:
kannst Du ruhig
b := copy(newlist[i],pos(':', newlist[i])+2,length(newlist[i])-pos(':', newlist[i])-2);
Delphi-Quellcode:
machen, Du benötigst ja den gesamten "Rest", wenn der kürzer ist als Length(newlist[i]), dann macht das nichts aus.
b := copy(newlist[i],pos(':', newlist[i])+2,length(newlist[i]));
Dashier
Delphi-Quellcode:
könntest Du in
if (pos('enabled',b) >=0) then Checklistbox1.Checked[o] := true;
Delphi-Quellcode:
verwandeln, damit ein eventuell auf True stehender Schalter auf False gestellte werden kann.
Checklistbox1.Checked[o] := (pos('enabled',b) >=0);
|
Re: Probleme mit Checklistbox und Indexof bzw Indexofname
Schau dir mal die Variablen a und b an.
Delphi-Quellcode:
Dieser Code ist zu kompliziert und könnte auch Fehler enthalten.
a := copy(newlist[i],0,pos(':', newlist[i])-1);
b := copy(newlist[i],pos(':', newlist[i])+2,length(newlist[i])-pos(':', newlist[i])-2); Die Lösung ist eine eigene Funktion, um den Eintrag in zwei Teile zu zerlegen:
Delphi-Quellcode:
Dadurch wird der Sourcecode deutlich vereinfacht.
procedure SplitEintrag(const eintrag:string; var a,b:string);
begin // bitte selbst lösen end;
Delphi-Quellcode:
Wenn du an der markierten Zeile einen Breakpoint setzt, dann kann du den Inhalt der Variablen
procedure TForm1.ExecuteAddons(aktuell: string);
var newlist: TStringlist; i,o,u: integer; a,b: string; begin newlist := TStringlist.Create; newlist.LoadFromFile(aktuell+'AddOns.txt'); for i := 0 to newlist.count-1 do begin SplitEintrag(newlist[i], a, b); o := Checklistbox1.Items.IndexOf(a); // hier Breakpoint setzen if (o>=0) and (pos('enabled',b) >=0) then Checklistbox1.Checked[o]; // neue Version end; newlist.Free; // hat gefehlt end; a und b überprüfen. (einfach Mauszeiger drüber halten) => Probleme in kleinere Teile zerlegen - das ist der Schlüssel zum Erfolg beim Programmieren |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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