![]() |
Viele Komponenten schneller in den Eigenschaften ändern
Hallo Delphifreunde,
habe bereits die Boardsuche bemüht, aber nicht DIE Lösung für mich gefunden. Folgendes: Ich habe auf einer Form 64 Buttons und 64 Edits, die sich immer wieder in der Grösse und im Text ändern müssen. Jetzt meine Frage als Newbie: Kann man diese Komponenten irgendwie in einer Schleife verändern. Als ehemaliger Basic-Geschädigter :wall: weiß ich noch, das man das in Basic machen konnte. Da konnte man die Komponenten über einen Index ansprechen. Gibt es hier auch eine Möglichkeit ? Wäre für jeden Hinweis dankbar. Pseudocode:
Delphi-Quellcode:
Gruss LingNeu
for i = 1 to 64 do
begin button[i].caption := 'Neues Spiel'; button[i].width := 120; edit[i].width := 60; end; [edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit] |
Re: Viele Komponenten schneller in den Eigenschaften ändern
mann kann z.b. TControl.ControlCount+TControl.Controls verwenden...
Delphi-Quellcode:
HTH Frank
for i:=0 to ControlCount-1 do
begin Controls[i].Width:=100; if (Controls[i] is TEdit) then (Controls[i] as TEdit).Text:='Blah'; end; |
Re: Viele Komponenten schneller in den Eigenschaften ändern
Beispiel:
Delphi-Quellcode:
EDIT: Das darf nicht wahr sein ! Schon wieder einer eher :mrgreen:
procedure TfrmMain.FormCreate(Sender: TObject);
var i : Integer; begin for i := 0 to ComponentCount - 1 do begin if Components[i] is TPanel then (Components[i] as TPanel).ParentBackground := False; end; end; |
Re: Viele Komponenten schneller in den Eigenschaften ändern
Vielen Dank für diesen Tipp.
Leider hab ich dann das Problem, das andere Komponenten vom selben Typ auch verändert werden. Schade, wäre echt eine Erleichterung gewesen. Gruss LingNeu |
Re: Viele Komponenten schneller in den Eigenschaften ändern
Du kannst diesen Komponenten ja einen bestimmten tag zuweisen, z.b. 1. das ginge dann so:
Delphi-Quellcode:
oder, wenn die Kompos alle einen Namen à la Button1 bis Button20 haben (was aber ein schlechter Stil wäre), könnte man es auch so machen:
procedure TfrmMain.FormCreate(Sender: TObject);
var i : Integer; begin for i := 0 to ComponentCount - 1 do begin if (Components[i] is TButton) and (tbutton(components[i].tag=1)) then TButton(Components[i]).caption := 'Klick mich'; end; end;
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
var i : Integer; btn: TComponent; begin for i := 1 to 20 do begin btn := FindComponent('Button'+inttostr(i)); if (btn <> nil) and (btn is TButton) then TButton(btn).caption := 'Klick mich'; end; end; |
Re: Viele Komponenten schneller in den Eigenschaften ändern
Oder gleich die gesamten Button in ein Array packen
Delphi-Quellcode:
Allerdings nur ratsam wenn sich die Position leicht festlegen lässt
var Buttons: Array [1..64] of TButton
//Erzeugen for i := 1 to 64 do begin Buttons[i]:=TButton.Create(self); with Buttons[i] do begin Parent:=self; Left:=i*Width; Top:=0; Caption:='43?'; end; end; //Caption ändern for i := 1 to 64 do Buttons[i].Caption:='42!' |
Re: Viele Komponenten schneller in den Eigenschaften ändern
Hallo Zusammen,
vielen Dank für Eure unermüdlichen Vorschläge. Habe alle durchprobiert. Die eine Lösung von NamenLozer gefällt mir sehr gut und funktioniert bis jetzt auch bestens. Habe nur noch eine Klammer machen müssen, sonst kommt ein Error. Besten Dank nochmals an alle LingNeu
Delphi-Quellcode:
@inherited
procedure TForm1.Button4Click(Sender: TObject);
// Test mit 4 Buttons, 3 Edits, dabei sind Button1 bis Button3 mit tag=1 versehen // Button4 hat tag= 0 und bleibt unberührt var i: integer; begin for i := 0 to ComponentCount - 1 do begin if ((Components[i] is TButton) and (components[i].tag=1)) then begin TButton(Components[i]).caption := 'Klick mich'; end; if ((Components[i] is TEdit) and (Components[i].tag=1)) then begin TEdit(Components[i]).Width := 100; end; end; end; die Idee finde ich gut. Leider hab ich die Sachen an unterschiedlichsten Stellen usw. Daher ist es vielleicht doch etwas aufwändiger. Trotzdem - merci! |
Re: Viele Komponenten schneller in den Eigenschaften ändern
ich würde aber in dem Fall trotzdem auf ControlCount+Controls zurückgehen, da dies die Schleife verkürzt.
Alle sichtbaren Komponenten (Wie TButton, TEdit, etc.) sind Controls, so sparst du dir da sinnlose Durchläufe. Gruß Frank |
Re: Viele Komponenten schneller in den Eigenschaften ändern
@_frank_
danke für den Hinweis - das hab ich als Anfänger nicht gewusst. Habe den Code nochmals abgeändert. Funktioniert auch prächtig. Gruss LingNeu
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var i: integer; begin for i := 0 to ControlCount - 1 do begin if ((Controls[i] is TButton) and (Controls[i].tag=1)) then begin TButton(Controls[i]).caption := 'Klick mich'; end; if ((Controls[i] is TEdit) and (Controls[i].tag=1)) then begin TEdit(Controls[i]).Width := 100; end; end; end; |
Re: Viele Komponenten schneller in den Eigenschaften ändern
Achtung Falle!
Zitat:
![]() Zitat:
onlinekater |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 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 by Thomas Breitkreuz