Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Zählvariable für labels/editfelder, etc (https://www.delphipraxis.net/147087-zaehlvariable-fuer-labels-editfelder-etc.html)

TM4rkuS 1. Feb 2010 17:45


Zählvariable für labels/editfelder, etc
 
Ich habe bisher ein Programm, dass per Klick auf einen Button, Label, was man auf nehmen will, durch eine Funktion eine weitere Zeile hinzufügt. Eine "Zeile" sind in diesem Fall 1 Label, 1 Edit-Feld, 1 Panel, 2 Edit-Felder, 1 Label, 1 Edit-Feld.
Am Anfang habe ich 5 Zeilen, die so aufgebaut sind. (Versteht man noch, oder?)
Bis da kann ich ja die Edit-Felder einfach zählen, also ich kann sagen edit12.text:='Hallo';
Wenn ich jetzt aber über meine 20 edits hinausgehe, indem ich einmal diese Funktion aufrufe, kriege ich ja insgesamt weitere 4 Edits (Namen sind dann bei Edit21, Edit22, etc.) Wie kann ich da jetzt weitermachen? Also ich kann jetzt immer noch sagen edit22.text:='Hallo', aber ich habe keine Lust 22 mal zu schreiben,
edit1.text:='...';
edit2.text:='...';
außerdem ist das ja beliebig erweiterbar, also man kann beliebig viele Zeilen hinzufügen... Ist es möglich eine Zählvariable in diesen edit-Namen einzubringen? Also quasi edit[x].text:='Hallo'; ?? Jetzt nicht in der Form, aber ist das generell möglich?

Spezi 1. Feb 2010 17:48

Re: Zählvariable für labels/editfelder, etc
 
Es gibt die Funktion: FindComponent
Delphi-Quellcode:
var a:TObject; i:Integer;
for i:=0 to 22 do begin
a:=FindComponent('Edit'+inttostr(i));
(a as TEdit).Text:='Hallo';
end;
Habe ihn nicht getestet, aber müsste so in etwa funktionieren ;)

Matze 1. Feb 2010 17:49

Re: Zählvariable für labels/editfelder, etc
 
Hallo,

was ich schreibe bezieht sich auf Delphi. Ob das so unter Lazarus geht, weiß ich nicht, denke aber schon.

Du kannst die Edits in einem "array of TEdit" verwalten und dieses in einer Schleife durchgehen:

Delphi-Quellcode:
var EdtArray: array of TEdit;

SetLength(EdtArray, 22);

for i := 0 to Length(EdtArray) - 1 do
  EdtArray[i].Text := 'Hallo';
Du kannst jedoch auch Delphi-Referenz durchsuchenFindComponent verwenden:

Delphi-Quellcode:
for i := 1 to 22 do
  (FindComponent('Edit' + IntToStr(i)) as TEdit).Text := 'Hallo';
Oder so ähnlich. ;)

Grüße, Matze

markus5766h 1. Feb 2010 21:04

Re: Zählvariable für labels/editfelder, etc
 
Hallo,

Delphi-Quellcode:
var
 EditArray : array of TEdit;
 n : Integer;

...

n := 22; // für 22 TEdit-Componenten

...
procedure Form1.FormCreate(....
var
 i : Integer;
begin
 SetLength(EditArray, n); // n = Anzahl der verwendeten TEdits
 for i := 0 to n-1 do
  EditArray[i] := FindComponent(Format('Edit%d', [i])) as TEdit;
end;
jetzt kannst Du per Schleife und EditArray[i] auf alle Eigenschaften Deiner Edits zugreifen.
Dies gilt natürlich auch für alle anderen Componenten., die Du entsprechend behandelst.
z.B.
Delphi-Quellcode:
var
 i : Integer;
begin
 for i := 0 to n-1 do
  begin
   if i mod 2 = 0 
    then EditArray[i].Font.Color := clRed     // alle geradzahligen TEdits : Schriftfarbe Rot
     else EditArray[i].Font.Color := clBlack; // alle ungeradzahligen TEdits : Schriftfarbe Schwarz
   EditArray[i].Text := .......               // Textzuweisung
  end;
end;

TM4rkuS 3. Feb 2010 20:25

Re: Zählvariable für labels/editfelder, etc
 
Mhm, ich kann mit der Methode keine neu erstellten Edits finden. Sobald ich ein Edit neu erstelle, ist es total egal, wie es heißt, es wird nicht mit findcomponent gefunden und er bricht mit 'ner Exception ab. Er springt im "control.inc" Quelltext zur Zeile
Delphi-Quellcode:
if TMethod(@Self.GetTextBuf).Code = Pointer(@TControl.GetTextBuf)
und färbt die grau ein...

markus5766h 3. Feb 2010 20:45

Re: Zählvariable für labels/editfelder, etc
 
Hallo,
in den Tutorials ist eine kleine Anweisung zum Umgang mit Controls per Array.
Buttons per Array verwalten / erstellen

ein Demo ist auch dabei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 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