Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   verschiedene label mittels variable ansteuern/eigenschaften ändern (https://www.delphipraxis.net/172637-verschiedene-label-mittels-variable-ansteuern-eigenschaften-aendern.html)

Biotonnenmixxer 15. Jan 2013 09:32

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

DeddyH 15. Jan 2013 09:37

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 Delphi-Referenz durchsuchenFindComponent bzw. Delphi-Referenz durchsuchenFindControl sein. Alternativ könntest Du aber auch alle in Frage kommenden Labels in ein Array oder eine Liste (TComponentlist z.B.) packen und diese dann durchlaufen, das ist wesentlich flexibler.

matashen 15. Jan 2013 09:39

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:

DeddyH 15. Jan 2013 09:42

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
 
Zitat:

Zitat von matashen (Beitrag 1199091)
wenn du die Labels nicht grafisch setzt sondern dynamisch im Code erzeugst geht das schon über ein array of TLabel oder TComponent

Was hat denn das eine mit dem anderen zu tun? Das Array muss im Code deklariert und befüllt werden, klar, aber die Labels kann man doch trotzdem zur Entwurfszeit auf das Formular packen.

terence14 15. Jan 2013 09:43

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:

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.
MfG,
terence

terence14 15. Jan 2013 09:45

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
 
Zitat:

Zitat von matashen (Beitrag 1199091)
...
EDIT : Da war einer schneller :roll:
...

Das war ich. Sorry:)

DeddyH 15. Jan 2013 09:47

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:

terence14 15. Jan 2013 09:48

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
 
Oder, wenn Du die Komponenten schon auf deinem Formular hast,

dann:

Delphi-Quellcode:


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;
MfG,
terence

terence14 15. Jan 2013 09:49

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern
 
Zitat:

Zitat von DeddyH (Beitrag 1199095)
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:

Ja, darum mein zweiter Vorschlag,
siehe #8 :))

MfG,
terence

PS: Ich ignoriere Dich nicht !

DeddyH 15. Jan 2013 09:54

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 03:56 Uhr.
Seite 1 von 2  1 2      

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