Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stringlist, FindComponent und Edit Felder inkl deren inhalt (https://www.delphipraxis.net/23097-stringlist-findcomponent-und-edit-felder-inkl-deren-inhalt.html)

sharkx 28. Mai 2004 18:05


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 :)

alcaeus 28. Mai 2004 18:07

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:
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;
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...

sharkx 28. Mai 2004 18:33

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:
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;
funktioniert jedoch noch immer nicht


[edit] Wäre es nich sinnvoller das ganze in einen Stream zu laden?

alcaeus 28. Mai 2004 18:46

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:
  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;
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:
Delphi-Quellcode:
  for i := 1 to 4 do
    begin
      s := FindComponent('Edit' + IntToStr(i));
      List.Add(s.Name); //Jetzt gibts keinen Error
    end;
Bezüglich dem Stream: k.A., welche Idee hsst du denn dazu?

Greetz
alcaeus

Jens Schumann 28. Mai 2004 19:16

Re: Stringlist, FindComponent und Edit Felder inkl deren inh
 
Zitat:

Zitat von alcaeus
List.Strings[x] := Copy(List.Strings[x], 0, length(List.Strings[x]));

Erreicht man in einem String über den Index 0 wirklich das erste Zeichen im String?

Jens Schumann 28. Mai 2004 19:22

Re: Stringlist, FindComponent und Edit Felder inkl deren inh
 
Zitat:

Zitat von sharkx
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 :(

Ich kann den Code der Buchstaben aus einem String entfernen soll nicht sehen :shock:
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;

alcaeus 28. Mai 2004 19:58

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