Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi viele ähnliche Befehle zusammenfassen (https://www.delphipraxis.net/102710-viele-aehnliche-befehle-zusammenfassen.html)

cRayZo 2. Nov 2007 19:59


viele ähnliche Befehle zusammenfassen
 
nicht unbedingt wie ihr jetzt denkt
for to und all das kenn ich, nur ich hab ein anderes Problem.

Wenn ich sagen wir mal Label01.Caption, label02.Caption,...,Label20.Caption habe, wie kann ich in einer schleife bestimmen dass sich ein Teil des Namens der Bezeichnung ändert, um nicht immer hintereinander irgendwelche ähnlichen Labeldefinitionen schreiben zu müssen.
Iwie so vll :gruebel:
Delphi-Quellcode:
for x:=1 to 20 do begin
(label+'x').Caption:='Hallo'+inttostr(x);
end;
aber das klappt nicht, wär ja auch zu einfach dann^^
wie geht das richtig? lg cRayZo

sirius 2. Nov 2007 20:03

Re: viele ähnliche Befehle zusammenfassen
 
Findcomponent ist dein Freund.
Aber wäre es vielleicht nicht besser (je nach deinem Konzept) alles in eine array oder, noch besser, in eine TobjectList zu packen?

oki 2. Nov 2007 22:56

Re: viele ähnliche Befehle zusammenfassen
 
Hi,

eine weitere Möglichkeit ist es, die Liste Components des Owner nach den Labels zu durchsuchen. Das macht natürlich nur Sinn, wenn du alle Labels oder einen mathematisch eingrenzbaren Bereich bearbeiten möchtest.

In meinem Bsp. soll der Owner ein Panel (Panel1) sein.
Delphi-Quellcode:
  For Counter := 0 to Panel1.ComponentCount - 1 do
    IF Panel1.Components[Counter] is TLable then
      (Panel1.Components[Counter] as TLable).Caption := 'Hallo';
Du kannst natürlich auch auf den Componentennamen mittels (Panel1.Components[Counter] as TLable).Name als String zugreifen und für die Bearbeitung die entsprechenden Labels "filtern".

Sirius Methode läuft sozusagen anders herum. Du bildest wie in deinem Beispiel einen Namen und übergibst diesen FindComponent. Wird das passende Label gefunden, so liefert FindComponent dieses zurück. Damit kannst du dann auch auf die Caption zugreifen.

Delphi-Quellcode:
var Lable : TLable;
    LableName : String;
...
  For Counter := 0 to 20 do begin
    LableName := Format('Lable%d', [Counter]);
    Lable := self.FindComponent(LableName);
    If Assigned(Lable) then
      Lable.Caption := 'Hallo';
  end;
Gruß oki

Die Muhkuh 2. Nov 2007 23:15

Re: viele ähnliche Befehle zusammenfassen
 
Hi oki,

ich hoffe doch mal, dass dein Lable ein schlimmer Tippfehler ist...

oki 3. Nov 2007 08:53

Re: viele ähnliche Befehle zusammenfassen
 
Upppps :oops:

Kann man das irgentwie löschen? :-D

P.S. War doch Absicht! Wollte nur testen ob jemand aufpasst!

Gruß oki

cRayZo 3. Nov 2007 18:05

Re: viele ähnliche Befehle zusammenfassen
 
Zitat:

Zitat von oki (in Beitrag 3)
In meinem Bsp. soll der Owner ein Panel (Panel1) sein.

jo das Prinzip hab ich verstanden ;)
wenn ich jetzt aber bei diesem Beispiel werden ja einfach alle Components mit Tlabel umbenannt.
Was ich ja ursprünglich wollte, ist, dass ich pro schleifendurchgang jeweils ein anderes Label anspreche, dessen caption ich verändern möchte. Die labels sind numerisch, mit dem Wort "Label" davor, sortiert.
Kann man das nicht genauso einfach machen, wie mit deiner Lösung?
Zitat:

Zitat von oki (in Beitrag 3)
Delphi-Quellcode:
For Counter := 0 to Panel1.ComponentCount - 1 do
    IF Panel1.Components[Counter] is TLable then
      (Panel1.Components[Counter] as TLable).Caption := 'Hallo';

halt einfacher, wär einfach zu schön, wenns so wie in meinem ersten Post ginge :wink:
lg cRayZo

sirius 3. Nov 2007 20:27

Re: viele ähnliche Befehle zusammenfassen
 
Zitat:

Zitat von cRayZo
halt einfacher, wär einfach zu schön, wenns so wie in meinem ersten Post ginge :wink:

Nee, das geht nicht. Weil Pascal ist je ne ordentliche Programmiersprache, wo solcher Hokuspokus nicht geht :mrgreen:
Variablennamen werden zur Laufzeit nicht mitgenommen.

Die Varianten von oki und mir funktionieren nur, weil die Klasse TComponent (und alle Nachfahren) den Komponentennamen dann doch mitspeichert.

Hador 3. Nov 2007 20:46

Re: viele ähnliche Befehle zusammenfassen
 
Für soetwas würde ich die n Label in ein Array packen und dynamisch erzeugen, ober aber automatisch erzeugen lassen und dann in ein array schreiben (das kannst du dann wiederum mit findcomponents bzw. Panel1.Components machen).

Dynamisch erzeugen:

Delphi-Quellcode:
type
  Form1 = class(Tform)
    [...]
    Label : array[1..20] of TLabel;

[...]

  for i:=1 to 20 do
    Label[i] := TLabel.Create(Self);
  // Dann noch Parent zuweisen und positionieren
  for i:=1 to 20 do
    Label[i].Caption := 'Hallo ' + IntToStr(i);
[...]


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