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/)
-   -   Delphi Viele Labels, viel Code? (https://www.delphipraxis.net/71718-viele-labels-viel-code.html)

dcg 19. Jun 2006 22:24


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

mkinzler 19. Jun 2006 22:28

Re: Viele Labels, viel Code?
 
Du könntest die Referenzen in einen Array ablegen, über den du dann eine Schleife laufen lassen kannst.

dcg 19. Jun 2006 22:29

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

3_of_8 19. Jun 2006 22:31

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.

Dax 19. Jun 2006 22:31

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 Hier im Forum suchenFindComponent durch die Labels iterieren.

gordon freeman 19. Jun 2006 22:31

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
...

mkinzler 19. Jun 2006 22:35

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;

uwewo 20. Jun 2006 06:01

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;

Sascha L 20. Jun 2006 07:41

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).

pszopp 20. Jun 2006 09:25

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:
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.
Viele Grüße,
pszopp


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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