AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi verschiedene label mittels variable ansteuern/eigenschaften ändern
Thema durchsuchen
Ansicht
Themen-Optionen

verschiedene label mittels variable ansteuern/eigenschaften ändern

Ein Thema von Biotonnenmixxer · begonnen am 15. Jan 2013 · letzter Beitrag vom 15. Jan 2013
Antwort Antwort
Seite 1 von 2  1 2      
Biotonnenmixxer

Registriert seit: 15. Jan 2013
1 Beiträge
 
#1

verschiedene label mittels variable ansteuern/eigenschaften ändern

  Alt 15. Jan 2013, 09:32
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern

  Alt 15. Jan 2013, 09:37
Hallo und Willkommen in der 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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#3

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern

  Alt 15. Jan 2013, 09:39
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
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern

  Alt 15. Jan 2013, 09:42
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
terence14
(Gast)

n/a Beiträge
 
#5

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern

  Alt 15. Jan 2013, 09:43
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
  Mit Zitat antworten Zitat
terence14
(Gast)

n/a Beiträge
 
#6

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern

  Alt 15. Jan 2013, 09:45
...
EDIT : Da war einer schneller
...
Das war ich. Sorry
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern

  Alt 15. Jan 2013, 09:47
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...
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
terence14
(Gast)

n/a Beiträge
 
#8

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern

  Alt 15. Jan 2013, 09:48
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
  Mit Zitat antworten Zitat
terence14
(Gast)

n/a Beiträge
 
#9

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern

  Alt 15. Jan 2013, 09:49
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...
Ja, darum mein zweiter Vorschlag,
siehe #8 )

MfG,
terence

PS: Ich ignoriere Dich nicht !
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern

  Alt 15. Jan 2013, 09:54
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:26 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