![]() |
Viele Labels, viel Code?
Moin Moin,
ich hätte mal ne Frage bezüglich Labels, aber auch andere Codeteile aus Proceduren sind damit gemeint. Und zwar habe ich ein Programm mit 64 (später sogar 128) sichtbaren Labels, per Klick auf einen Button müssen diese alle auf Font-Farbe "Grün" gesetzt werden, bin ich nun gezwungen 64mal Label(x).Font.Color:= clgreen zu schreiben (die Labels sind aber nicht alle der Reihe nach durchnummeriert) oder gibt es dafür Abkürzungen? Gruß Patrick |
Re: Viele Labels, viel Code?
Du könntest die Referenzen in einen Array ablegen, über den du dann eine Schleife laufen lassen kannst.
|
Re: Viele Labels, viel Code?
Wie müsste das dann aussehen?
Wie ich ein Array ablaufen lassen kann ist klar, aber in Verbindung mit dem Label? Gruß Patrick |
Re: Viele Labels, viel Code?
...oder auf Components, die Property von TForm zurückgreifen. Die kannst du dann durchlaufen und bei allen Instanzen von TLabel mit Tag=irgendwas Font.Color auf clGreen stellen. Mit Tag=irgendwas meine ich, dass du dir einen beliebigen Wert aussuchen kannst (high(Integer) zum Beispiel) und den allen zu verändernden Labels zuweist.
|
Re: Viele Labels, viel Code?
Du könntest aber auch all deinen Labels einen Namenspräfix verpassen inklusive fortlaufender Nummer, dann kannst du toll mit
![]() |
Re: Viele Labels, viel Code?
Delphi-Quellcode:
var
meineLabels : array[1..10] of TLabel; //fixe Größe meineLabelsdyn : array[1..10] of TLabel; //dynamische Größe //füllen (fix) meineLabels[1] := label1; //füllen (dyn) setlength(meinelabelsdyn,length(meineLabelsDyn)+1); //array um 1 verlängern. meineLabelsDyn[high(meineLabelsDyn)] := labelX; //Das neu angefügte Element füllen ... |
Re: Viele Labels, viel Code?
Du könntest z.B. die labels dynamisch erzeugen:
Delphi-Quellcode:
var
lar: Array of TLable; i, n: Integer; ... begin ... n := 64; setLength( lar, n); for i := 0 to n-1 do begin lar[i] := TLabel.Create(self); lar[i].Owner := self; lar[i}.Top := ... ... end; ... for i := 0 to n-1 do begin lar[i].Font.Color := clgreen ; end; |
Re: Viele Labels, viel Code?
Hi,
wie wäre es hiermit
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); var I: Integer; begin for I := 0 to ComponentCount-1 do if Components[I] is TLabel then TLabel(Components[I]).Font.Color := clGreen; end; |
Re: Viele Labels, viel Code?
Oder mit FindComponent, das wäre noch besser, wenn man nicht ALLE Labels färben möchte, sondern nur bestimmte.
Dafür muss man dann aber alle Labels mit dem gleichen Prefix versehen. z.B. "Label" und dahinter dann eine fortlaufende Nummer. So könnte man dann über eine Schleife auch auf jedes Label zugreifen. -> "Label"+IntToStr(i). |
Re: Viele Labels, viel Code?
Hallo,
ich habe hier noch eine Lösung, die eine Mischung aus anderen Lösungsvorschlägen ist. Sie findet alle Labels, deren Name mit 'label' beginnt.
Delphi-Quellcode:
Viele Grüße,
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ContNrs, StrUtils; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Edit1: TEdit; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); private Labels : TObjectList; public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var lk : Integer; begin // Objekt-Liste für alle Labels erstellen. Labels := TObjectList.Create; // Suche alle Komponenten, deren Namen mit label beginnt. for lk := 0 to ComponentCount - 1 do begin if (Components[lk] is TLabel) and (StartsText('label', Components[lk].Name)) then begin Labels.Add(Components[lk]); end; end; // for lk end; // FormCreate procedure TForm1.Button1Click(Sender: TObject); var lk : Integer; begin // Schriftfarbe der Labels auf Grün setzen. for lk := 0 TO Labels.Count - 1 do begin TLabel(Labels[lk]).Font.Color := clGreen; end; // for lk end; // Button1Click procedure TForm1.FormDestroy(Sender: TObject); begin // Freigabe der Label-Liste. FreeAndNil(Labels); end; // FormDestroy end. pszopp |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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