Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Probleme mit Checklistbox und Indexof bzw Indexofname (https://www.delphipraxis.net/145551-probleme-mit-checklistbox-und-indexof-bzw-indexofname.html)

Capa 4. Jan 2010 09:40


Probleme mit Checklistbox und Indexof bzw Indexofname
 
Delphi-Quellcode:
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;
Bsp eines newlist eintrages "Titan: enabled",
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

nahpets 4. Jan 2010 17:28

Re: Probleme mit Checklistbox und Indexof bzw Indexofname
 
Hallo,

das sollte statt
Delphi-Quellcode:
a := copy(newlist[i],0,pos(':', newlist[i])-1);
lieber
Delphi-Quellcode:
a := copy(newlist[i],1,pos(':', newlist[i])-1);
heißen, Strings beginnen bei 1 und nicht bei 0.
Hieraus
Delphi-Quellcode:
b := copy(newlist[i],pos(':', newlist[i])+2,length(newlist[i])-pos(':', newlist[i])-2);
kannst Du ruhig
Delphi-Quellcode:
b := copy(newlist[i],pos(':', newlist[i])+2,length(newlist[i]));
machen, Du benötigst ja den gesamten "Rest", wenn der kürzer ist als Length(newlist[i]), dann macht das nichts aus.
Dashier
Delphi-Quellcode:
if (pos('enabled',b) >=0) then Checklistbox1.Checked[o] := true;
könntest Du in
Delphi-Quellcode:
 Checklistbox1.Checked[o] := (pos('enabled',b) >=0);
verwandeln, damit ein eventuell auf True stehender Schalter auf False gestellte werden kann.

sx2008 4. Jan 2010 17:46

Re: Probleme mit Checklistbox und Indexof bzw Indexofname
 
Schau dir mal die Variablen a und b an.
Delphi-Quellcode:
a := copy(newlist[i],0,pos(':', newlist[i])-1);
b := copy(newlist[i],pos(':', newlist[i])+2,length(newlist[i])-pos(':', newlist[i])-2);
Dieser Code ist zu kompliziert und könnte auch Fehler enthalten.
Die Lösung ist eine eigene Funktion, um den Eintrag in zwei Teile zu zerlegen:
Delphi-Quellcode:
procedure SplitEintrag(const eintrag:string; var a,b:string);
begin
  // bitte selbst lösen
end;
Dadurch wird der Sourcecode deutlich vereinfacht.
Delphi-Quellcode:
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;
Wenn du an der markierten Zeile einen Breakpoint setzt, dann kann du den Inhalt der Variablen
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 15:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz