У вас небольшая путаница в голове, вызванная работой в IDE Delphi. Объясню: при создании метки в design-time ей присваивается имя, например, 'Label1', и одновременно в теле класса формы IDE создает переменную, указывающую на эту ссылку и называет переменную так же - Label1. Потом, если вы дадите метке другое имя, IDE автоматически переименует переменную. Но это все делает IDE, это
не является функциональностью языка Delphi.
При работе в run-time от того, что вы дали компоненту метки имя 'Label1' переменная Label1
не появляется. Все переменные вам нужно объявлять явно. Еще раз посмотрим на ваш код:
Код:
procedure TForm1.CreateLabel (x : integer);
var LabelAr : array of TLabel;
k : byte;
Begin
For k := 1 to x do
Begin
SetLength(LabelAr,k);
LabelAr[k] := TLabel.Create(self);
LabelAr[k].Name := 'MyLabel'+inttostr(k);
LabelAr[k].Left := 50;
LabelAr[k].Top :=k * 50;
LabelAr[k].Parent := Text.Panel1;
End;
End;
В этой процедуре вы объявляете массив LabelAr, заполняете его метками (кстати, неправильно используя индекс - открытые массивы нумеруются с нуля) и на этом процедура завершается. Поскольку LabelAr у вас объявлен как локальная переменная, после завершения процедуры вся информация о нем утеряна. Поэтому, в данном случае, вообще непонятно - зачем он нужен в программе.
Дальше вы пытаетесь обратится к метке, используя
имя, которое вы присвоили, в качестве
переменной. Компилятор не обнаруживает такой переменной и сообщает вам об ошибке.
Чтобы найти метку по имени, как совершенно правильно тут написали, нужно вызвать FindComponent:
Код:
var
L: TLabel;
begin
...
L := Text.FindComponent('MyLabel1');
if L <> nil then
...
...
end;
FindComponent - это метод класса TComponent, т.е. когда вы в методе формы пишете FindComponent, вы вызываете
метод формы. Если метка лежит на фрейме, то форма ее не найдет, нужно вызывать метод FindComponent
фрейма. Я надеюсь, что правильно догадался, что Text у вас - это фрейм?
Вот в таком вот аксепте
