automatyczna zmiana nazwy elementu

0

Witam.
Chciałem zautomatyzować proces przypisywania różnych wartości do elementów typu label. Labele nazywają się po prostu label1, label2, label3........ itd. Przypisywania po kolei do każdego dane wartości zajmie mi dużo miejsca.
próbowałem tak:

n:=1;
{jakaś pętla}
w:='label' + inttostr(n);
w.Caption:=wstaw;
n:=n+1;
{koniec pętki}

gdzie wstaw to ciągle zmieniająca się dana przypisywana dużej ilości elementów label po kolei czyli label1, label2, label3......... Niestety ta metoda nie działa.
Czy jest może jakiś sposób na zautomatyzowanie tego procesu?
Pozdrawiam.

0

Skorzystaj z funkcji FindComponent().

0

nie wiem czy o to dokładnie chodziło:

var
 i :Integer;
begin
    for i :=0 to ComponentCount -1 do
    if Components[i] is TLabel then
      TLabel(Components[i]).Caption :='text';

pozdrawiam

0

Dzięki wszystko działa. A jak by ktoś był ciekawy jak to zrobić to podaje poniżej:

{var całego programu}
Labels: array[1..8] of TLabel;
{/var}

{procedura np.: oncreate}
for i := 1 to 8 do
Labels[i] := TLabel(FindComponent('label' + IntToStr(i)));
{/procedura}

{nasza procedura}
l:=1 ;
linie:=0;
wstaw:='';
i:=1;
linia:=memo1.Lines[linie];
repeat
repeat
d:=linia[l];
l:=l+1;
if d<>'|' then
begin
wstaw:=wstaw + d;
end;
until d='|';
labels[i].Caption:=wstaw;
i:=i+1;
wstaw:='';
until i=9;
{/procedura}

jest to przykład dla labeli do 1 do 8.
W pierwszej części deklarujemy tablicę na nazwy labeli. W drugiej części wypełniamy tablicę najlepiej na oncreate aby dziłała od początku. W trzeciej części możemy już urzywać naszych nazw.
Jeszcze raz dzięki za podpowiedź.
Pozdrawiam.

0

Tak się zapytam - co ta procedura robi? Bo widzę, że sprawdza znaki w pierwszej linii Memo i przypisuje ten sam tekst do wszystkich Labeli.

I na przyszłość: nie musisz deklarować tej tablicy TLabel. Wystarczy, że zamienisz labels[i].caption na TLabel(FindComponent('label' + IntToStr(i))).Caption.

1 użytkowników online, w tym zalogowanych: 0, gości: 1