![]() |
verschiedene label mittels variable ansteuern/eigenschaften ändern
Hallo Leute, ich bin relativ neu bei Delphi und ich hab gleich mal ne Frage.
Und zwar: kann ich zb. in einer schleife mit der Laufvariablen i verschiedene Label zb. mit label(i).color:=clred auswählen, oder geht das nicht mit einer solchen variablen? Dann müsste ich nicht immer label1.color...label2.color usw. schreiben.. Grüße |
AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
Hallo und Willkommen in der DP :dp:,
da gibt es mehrere Möglichkeiten. Die direkte Antwort auf Deine Frage dürfte ![]() ![]() |
AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
Hallo und willkommen hier in der DP!
Direkt geht das nicht, wenn du die Labels nicht grafisch setzt sondern dynamisch im Code erzeugst geht das schon über ein array of TLabel oder TComponent Um was gehts dir eigentlich? warum so viele Labels im Code umfärben? evtl läst sich das auch anders lösen EDIT : Da war einer schneller :roll: |
AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
Zitat:
|
AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
Hallo,
Du kannst die Komponenten dynamisch zur Laufzeit erstellen. Der Vorteil, Du kannst die dann per for-Schleife durchlaufen und die Properties setzen. Beispiel:
Delphi-Quellcode:
MfG,Komponenten zur Laufzeit erzeugen Normalerweise werden die meisten Komponenten, die ein Programm benötigt, schon zur Entwicklungszeit auf dem Formular platziert. Ist die Anzahl der benötigten Komponenten zur Entwicklungszeit noch nicht absehbar, müssen sie dynamisch erstellt werden. Dieses Beispiel erstellt einen TButton und weist ihm eine OnClick-Routine zu: procedure TForm1.Button1Click(Sender: TObject); var **Button: TButton; begin **Button:=TButton.Create(Self); **Button.Parent := Self; **Button.Caption := 'Alter Titel'; **Button.Left := 100; **Button.Top := 100; **Button.OnClick := Button2Click; end; Wichtig ist, dass die Eigenschaft Parent gesetzt wird, um die Komponente eindeutig einer übergeordneten Komponente zuzuordnen. Dies ist häufig ein Formular oder ein TPanel oder TGroupbox. Self bezieht sich immer auf die aktuelle Klasseninstanz also in diesem Fall auf Form1. Man könnte also statt Self auch Form1 schreiben. Das funktioniert aber dann nicht mehr, wenn es mehr als eine Formularinstanz gibt. Deshalb sollte man self immer vorziehen. In der Behandungsroutine des OnClicks-Ereignis wird die Sender-Variable ausgewertet, um die auslösende Komponente des Klicks zu ermitteln: procedure TForm1.Button2Click(Sender: TObject); begin **if Sender is TButton then ****TButton(Sender).Caption:='Neuer Titel'; end; Die Button2Click-Prozedur muss noch in der Klassendeklaration von TForm1 aufgenommen werden: private **procedure Button2Click(Sender: TObject); Mit einem Klick auf den dynamisch erstellten Button sollte sich der Titel des Buttons ändern. Eine weitere Lösung ist die Verwendung eines dynamischen Arrays. Dadurch wird der Zugriff auf die Komponenten später einfacherer. Im folgenden Beispiel wird eine zufällige Zahl von TEdit-Feldern erstellt und untereinander auf dem Formular platziert. Zunächst muss das Array als Feld-Variable in der Klassendeklaration des Formulars erstellt werden: private **EditArray: array of TEdit; Der Quelltext zum Erstellen sieht folgendermaßen aus: procedure TForm1.Button1Click(Sender: TObject); var **i: Integer; begin **SetLength(EditArray, Count); **for i:=0 to 4 do **begin ****EditArray[i] := TEdit.Create(Self); ****EditArray[i].Parent := Form1; ****EditArray[i].Left := 20; ****EditArray[i].Top := 20 + ((EditArray[i].Height + 10) * i); **end; end; Über den Array-Index lassen sich die einzelnen Controls ansprechen. terence |
AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
Zitat:
|
AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
Wieso zur Laufzeit erzeugen? Nenn mir doch einmal jemand einen rationalen Grund dafür, ich sehe nämlich keinen. Aber da ich sowieso immer ignoriert werde... :roll:
|
AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
Oder, wenn Du die Komponenten schon auf deinem Formular hast,
dann:
Delphi-Quellcode:
MfG,component-change_a_property_in_all_components_of_a_tform change a property in all components of a form procedure TForm1.SetProperties(ClassName, SomeProperty: string; Value: Integer); var i: integer; PropInfo: PPropInfo; Component: TComponent; begin for i := 0 to ComponentCount - 1 do begin Component := Components[i]; if (Component is TControl) and ((Component.ClassName = ClassName) or (ClassName = 'AllComponents')) then begin PropInfo := GetPropInfo(Component.ClassInfo, SomeProperty); if Assigned(PropInfo) then SetOrdProp(Component, PropInfo, Integer(Value)); end; end; end; // Examples, Beispiele: procedure TForm1.Button1Click(Sender: TObject); begin // Make all components readonly SetProperties('AllComponents', 'readonly', 1); // Make all components of Class TEdit invisible SetProperties('TEdit', 'visible', 0); // Set the Height Property of all TLabels SetProperties('TLabel', 'Height', 30); // Set ShowHint to false for all components SetProperties('AllComponents', 'ShowHint', 0); // Disable all TMemo Components SetProperties('TMemo', 'Enabled', 0); // Set Autosize to true for all TLabels SetProperties('TLabel', 'Autosize', 1); end; terence |
AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
Zitat:
siehe #8 :)) MfG, terence PS: Ich ignoriere Dich nicht ! |
AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
Beispiel mit Standardbenennungen (war zu faul, ist ja auch nur ein Beispiel):
Delphi-Quellcode:
type
TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } FLabels: array[1..10] of TLabel; public { Public-Deklarationen } end; ... procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin for i := Low(FLabels) to High(FLabels) do FLabels[i].Font.Color := clRed; end; procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin for i := Low(FLabels) to High(FLabels) do FLabels[i].Font.Color := clGreen; end; procedure TForm1.FormCreate(Sender: TObject); begin FLabels[1] := Label1; FLabels[2] := Label3; FLabels[3] := Label4; FLabels[4] := Label5; FLabels[5] := Label7; FLabels[6] := Label8; FLabels[7] := Label10; FLabels[8] := Label12; FLabels[9] := Label16; FLabels[10] := Label1; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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