Indeksering af objekter

Tags:    delphi

Hej

Jeg har en applikation hvor jeg har flere objekter, i dette konkrete tilfælde labels, som jeg gerne ville kunne ændre Caption på ved brug af en For-løkke. Kan dette i det hele taget lade sig gøre?

Noget a la:

For I:=0 to N do
Label[I].Caption:=Ary[I];

Mik D.




6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Hej

Jeg har en applikation hvor jeg har flere objekter, i dette konkrete tilfælde labels, som jeg gerne ville kunne ændre Caption på ved brug af en For-løkke. Kan dette i det hele taget lade sig gøre?

Noget a la:

For I:=0 to N do
Label[I].Caption:=Ary[I];

Mik D.


Noget i stil med nedenstående burde kunne klare det:

Fold kodeboks ind/udKode 




Hej Lasse M

OK, ja dette er en mulighed. Dog giver den lidt problemer med at holde Index op mod hinanden (Som i Label[I].Caption:=Ary[I]).

Nu har jeg ikke prøvet at lave mine egne objekter, og har heller ingen ambitioner om det. Men måske kunne man lave et array af objekter?

Mik



... Det jeg er i gang med at lave et en slags 16 kanals-VU-meter, og det er lidt klodset at skulle tage fat på hvae "kanal" for sig.

Mik



Hej Lasse M

OK, ja dette er en mulighed. Dog giver den lidt problemer med at holde Index op mod hinanden (Som i Label[I].Caption:=Ary[I]).

Nu har jeg ikke prøvet at lave mine egne objekter, og har heller ingen ambitioner om det. Men måske kunne man lave et array af objekter?

Mik


Det er ikke det store problem at lave et array med labels. Følgende laver et dynamisk array med plads til 10 labels:

<pre>
var
lblArray: array of TLabel;
x: Integer;
begin
SetLength(lblArray, 10);
for x := 0 to Length(lblArray) - 1 do
begin
lblArray[x] := TLabel.Create(Form1);
lblArray[x].Parent := Form1;
lblArray[x].Width := 100;
lblArray[x].Height := 25;
lblArray[x].Left := 10;
lblArray[x].Top := Random(Form1.Height);
lblArray[x].Caption := IntToStr(x);
end;
end;
</pre>

Når du vil ændre caption på dem kan du f.eks. bruge

<pre>
for x := 0 to Length(lblArray) - 1 do
lblArray[x].Caption := 'bla';
</pre



Boing!

50 stærke til Lasse M.

Mik



Hej Lasse M

Dit trick med at lave et array fungerer helt fint og er nemme at indeksere.

Jeg har dog et problem. Jeg laver mit objekt-array i en procedure, og arbejder med dem i en anden procedure. Men jeg kan kun arbejde med dem i den procedure, hvori de er skabt (Create). Ellers får jeg en Access Violation.

Begge procedurer er erklæret under Private og objektarray under Var inden Implementation.

Har du nogen ide til hvad jeg gør galt?

Mik



t