![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
|||
|
|||
|
Цитата:
Цитата:
|
|
#17
|
|||
|
|||
|
пробовал при создании явно указывать простейшее имя Test чтобы уж явно без ошибок, результат NIL
![]() |
|
#18
|
|||
|
|||
|
Ну показывайте весь код тогда снова.
|
|
#19
|
|||
|
|||
|
создаем, тут все нормально. Компонент появляется
Код:
procedure TForm1.CreateLabel(X : Integer);
var
l : TLabel;
begin
while X > 0 do begin
l := TLabel.Create(Self);
l.Name := 'test';
l.Left := 50;
l.Top := X * 50;
l.Parent := Text.Panel1;
Dec(X);
end;
end;Код:
CreateLabel(1);
Text.Visible := true;
l := TLabel(Text.FindComponent('test'));
if l <> nil then begin
l.Caption := predmet;
l.Left := (Text.Panel1.Width - l.Width)Div 2;
end; |
|
#20
|
|||
|
|||
|
Код:
while X > 0 do begin
l := TLabel.Create(Text); |
|
#21
|
|||
|
|||
|
есть, заработало. Я пока мало в этом понимаю но чтоб на будущее, что именно мы переделали ?
|
|
#22
|
|||
|
|||
|
Create - это конструктор. В качестве параметра для большинства компонентов VCL ему передается указатель на владельца. Владелец отвечает за:
1) Освобождение памяти, распределенной под компоненты, которыми он владеет. Происходит это при уничтожении самого владельца; 2) Загрузку и сохранение компонентов. Когда в IDE вы создаете форму, а потом в программе обращаетесь к ней, именно владелец сохраняет и загружает компоненты на форме в том виде, в котором вы их создали. Обычно владельцем выступает всегда форма. Здесь вы используете TFrame; на вышеуказанную функциональность не влияет, кто будет владельцем - форма или TFrame, но вот поиск компонента должен осуществлять его владелец. Т.е. вызывать нужно метод FindComponent того, кто указан внутри вызова Create(...) Имеено это я и сделал - заменил владельца. А можно было убрать "Text." из вызова "Text.FindComponent", результат получился бы тот же. |