![]() |
Stringlist, FindComponent und Edit Felder inkl deren inhalt
Hallo !
Folgendes Problem: Ich habe 4 Edit Felder mit dem inhalt (bsp) 4A569 5f433 3t598 6g5f4 nun möchte ich in einer for schleife die buchstaben entfernen. dazu habe ich folgendes gebastelt, funktioniert jedoch nicht :(
Delphi-Quellcode:
function CheckKey(List: TStringList): boolean;
var i,x: Integer; begin Result := false; for x := 1 to 4 do begin for i := length(List.Strings[x]) downto 1 do delete(List.Strings[x],i,1); ShowMessage(List.Strings[x]); end; end; procedure TForm1.Button2Click(Sender: TObject); var List: TStringList; i: Integer; s: TComponent; begin for i := 1 to 4 do begin s := FindComponent('Edit' + IntToStr(i)); List := TStringList.Create; List.Add(s.Name); List.Free; end; CheckKey(List); end; wäre nett wenn mir jemand da zum ende helfen könnte :) |
Re: Stringlist, FindComponent und Edit Felder inkl deren inh
Dein Problem ist, dass du die Indezes bei 1 beginnen lässt. Die beginnen in Delphi aber bei 0. Richtig wäre also das hier:
Delphi-Quellcode:
function CheckKey(List: TStringList): boolean;
var i,x: Integer; begin Result := false; for x := 1 to 4 do begin for i := length(List.Strings[x-1]) downto 1 do delete(List.Strings[x-1],i,1); ShowMessage(List.Strings[x-1]); end; end;
Delphi-Quellcode:
Diese Prozedur macht für mich keinen Sinn, da du 4 mal eine Stringlist erstellst, dann etwas hinzufügst, wieder freigibst und anschließend versuchst, die Zeichen zu löschen. Erstelle die Liste einmal und gib sie auch nur einmal frei...
procedure TForm1.Button2Click(Sender: TObject);
var List: TStringList; i: Integer; s: TComponent; begin for i := 1 to 4 do begin s := FindComponent('Edit' + IntToStr(i)); List := TStringList.Create; List.Add(s.Name); List.Free; end; CheckKey(List); end; |
Re: Stringlist, FindComponent und Edit Felder inkl deren inh
ok ..
warum bei 0 anfangen? es gibt doch garkei Edit0 bei mir, also kann ich doch bei 1 anfangen? das eine mal durchlaufen habe ich mir doch gespart ! aber nichts desto trotz ...
Delphi-Quellcode:
funktioniert jedoch noch immer nicht
procedure TForm1.Button2Click(Sender: TObject);
var List: TStringList; i: Integer; s: TComponent; begin List := TStringList.Create; for i := 0 to 4 do begin s := FindComponent('Edit' + IntToStr(i)); List.Add(s.Name); // <--- hier gibts nen error end; List.Free; CheckKey(List); end; function CheckKey(List: TStringList): boolean; var i,x: Integer; begin Result := false; for x := 0 to 4 do begin for i := length(List.Strings[x]) downto 1 do List.Strings[x] := Copy(List.Strings[x], 0, length(List.Strings[x])); ShowMessage(List.Strings[x]); end; end; [edit] Wäre es nich sinnvoller das ganze in einen Stream zu laden? |
Re: Stringlist, FindComponent und Edit Felder inkl deren inh
Also nochmal, ich hab mich dabei vielleicht nicht ganz klar ausgedrückt: Überall bei den Kompos etc. wo es arrays gibt (außer bei deinen eigenen, dynamische von diesem wiederum ausgenommen), beginnen die Arrayindezes bei 0. Also sieht die erste Prozedur (CheckKey) folgendermaßen aus:
Delphi-Quellcode:
Das Problem mit der unteren (Button2Click) hast du dir selbst gemacht, da du mich falsch verstanden hast. Beginne mit den Indezes bei den Edits bei 1, und es wird funktionieren:
for x := 0 to 3 do //Wichtig: 4 Elemente, Index geht von 0 bis 3!
begin for i := length(List.Strings[x]) downto 1 do List.Strings[x] := Copy(List.Strings[x], 0, length(List.Strings[x])); ShowMessage(List.Strings[x]); end;
Delphi-Quellcode:
Bezüglich dem Stream: k.A., welche Idee hsst du denn dazu?
for i := 1 to 4 do
begin s := FindComponent('Edit' + IntToStr(i)); List.Add(s.Name); //Jetzt gibts keinen Error end; Greetz alcaeus |
Re: Stringlist, FindComponent und Edit Felder inkl deren inh
Zitat:
|
Re: Stringlist, FindComponent und Edit Felder inkl deren inh
Zitat:
Der oben diskutierte Code entfernt mit Sicherheit keine Buchstaben. Ich habe gerade eine function von Hagen Reddmann gefunden. Die entfernt Buchstaben aus einem String. Und zwar ziemlich fix.
Delphi-Quellcode:
function DeleteNonNumbers(const Value: String): String;
var I: Integer; P: PChar; begin SetLength(Result, Length(Value)); P := PChar(Result); for I := 1 to Length(value) do if Value[I] in ['0'..'9'] then begin P^ := Value[I]; Inc(P); end; SetLength(Result, P - PChar(Result)); end; |
Re: Stringlist, FindComponent und Edit Felder inkl deren inh
Ja, man bekommt das erste Zeichen, welches normalerweise das ASCII-Zeichen für die Länge ist. Das erste Nutzzeichen ist jenes mit dem Index 1.
|
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