AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Probleme mit Checklistbox und Indexof bzw Indexofname
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Checklistbox und Indexof bzw Indexofname

Ein Thema von Capa · begonnen am 4. Jan 2010 · letzter Beitrag vom 4. Jan 2010
Antwort Antwort
Capa

Registriert seit: 26. Okt 2003
102 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Probleme mit Checklistbox und Indexof bzw Indexofname

  Alt 4. Jan 2010, 09:40
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
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

Re: Probleme mit Checklistbox und Indexof bzw Indexofname

  Alt 4. Jan 2010, 17:28
Hallo,

das sollte statta := copy(newlist[i],0,pos(':', newlist[i])-1); liebera := copy(newlist[i],1,pos(':', newlist[i])-1); heißen, Strings beginnen bei 1 und nicht bei 0.
Hierausb := copy(newlist[i],pos(':', newlist[i])+2,length(newlist[i])-pos(':', newlist[i])-2); kannst Du ruhigb := 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.
Dashierif (pos('enabled',b) >=0) then Checklistbox1.Checked[o] := true; könntest Du in Checklistbox1.Checked[o] := (pos('enabled',b) >=0); verwandeln, damit ein eventuell auf True stehender Schalter auf False gestellte werden kann.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Probleme mit Checklistbox und Indexof bzw Indexofname

  Alt 4. Jan 2010, 17:46
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
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:18 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