Показать сообщение отдельно
  #5  
Старый 15.03.2008, 16:26
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

У вас небольшая путаница в голове, вызванная работой в 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 у вас - это фрейм?

Вот в таком вот аксепте
Ответить с цитированием