[Delphi] durchnummerierte Labels beschriften

Hi !

Ich hab in einem Programm einen Haufen Labels erstellt die alle Namen von

Mo1
Mo2
Mo3
..
Mo8

Di1
..
Di8

tragen.
(für Wochentage, das gleiche also auch noch für Mi,Do,Fr).

Naja jedenfalls wollte ich die Labels in folgender Art und Weise beschriften:

Code:
For i := 1 TO 8 DO
begin
 Mo[i] := IntToStr(i);
end;

Nun ist das natürlich nicht so einfach zu machen, daher der Umweg über Form1.Components.
Das ganze hätte dann etwa so ausgesehen:

Code:
For a := 0 TO Form1.ComponentCount -1 DO begin
IF (Form1.Components[a] is TLabel) THEN begin 
 for i := 1 TO 8 DO
   begin
    IF (Form1.Components[a].Name = 'Mo'+IntToStr[i]) THEN Form1.Components[a].Caption := IntToStr(i);
   end;
 end;
end;

Das geht allerdings auch nicht so einfach wie ich bei google gelesen hab, da man noch folgenden umweg gehen muss (in dem Thread den ich gelesen hab stand etwas davon das die Eigenschaften der Components protected sind und man deswegen dieses TControlHack braucht):

Code:
type 
  TControlHack = class(TControl); 
  ...
begin 
  for i := 0 to Form1.ComponentCount - 1 do 
    if (Form1.Components[i] is TLabel) then 
      TControlHack(Form1.Components[i]).Caption := 'irgendwas'; 
end;

So hatte jetzt keinen Bock da noch die Schleife einzubauen usw. denke es sollte aber jetzt alles nötige genannt sein...
Gut... also das ganze funktioniert auch eigentlich... bloß ein bisschen zu gut, denn er zerhackt mir dabei auch noch andere Labels (die nichtmal Labels sind), beispielsweise ist dann die Beschriftung von einem Button weg, oder die eines TabSheets... und ich weiß nicht warum. Eigentlich sollten ja durch das "is TLabel" nur noch Labels für das umbeschriften in Frage kommen...
Ist der Ansatz überhaupt richtig oder ist das schon so sehr verpfuscht das ich da gleich was anderes versuchen sollte ? Wenn ja: was denn^^?

Hoffe jemand versteht was ich da jetzt verfasst habe und kennt ne Lösung ;).

mfg,
crack
 
Spontan fällt mir da ein:
Code:
for i:=0 to ComponentCount-1 do
    begin
      if Components[i] is TLabel then
        begin
          TLabel(Components[i]).Caption := IntToStr(i);
        end;
    end;
oder
Code:
for i:= 0 to ComponentCount-1 do
    begin
      TLabel(FindComponent('Label'+IntToStr(i+1))).Caption := IntToStr(i);
    end;
Ich glaub wenn du den zweiten Vorschlag mit FindComponent() für deinen Zweck umbaust, hast du genau was du suchst. ;)

EDIT:
So zum Beispiel:
Code:
  for i:= 1 to 8 do
    begin
      TLabel(FindComponent('Mo'+IntToStr(i))).Caption := 'M-'+IntToStr(i);
      TLabel(FindComponent('Di'+IntToStr(i))).Caption := 'M-'+IntToStr(i);
    end;
 
Danke sehr !!
Genau so funktioniert es ;)

(Ganz schön peinlich wenn man sich das im Vergleich anguckt... vorher hatte ich bestimmt 15 Zeilen um das selbe - und dann auch noch nichtmal komplett richtig - zu erzielen)

Nochmals danke !

mfg,
crack
 
Zurück
Oben