![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с динамически создаваемыми объектами.
KPOT © (2005-01-23 02:26:00)Уважаемые мастера, я прочитал в инете что можно создать программу в основной (и модальных) форме которой нет ни одного уже созданного объекта, а они создаются во время работы программы по мере надобности. Как это делать я в инете не нашел, да и в хелпе тоже, так вот, я пробовал создавать объекты во время работы программы - все прекрастно работает. Загвоздка вот в чем - допустим создаем TListBox :
var
L: TListBox;
P: TWinControl;
begin
L := TListBox.Create(Self);
with TabbedNotebook1 do
begin
P := Pages.Objects[PageIndex] as TWinControl;
L.Parent := P;
L.SetBounds(10, 10, 100, 100);
L.Items.Add(TTabPage(P).Caption);
end;
end;
В программе при нажатии кнопки происходит выполнение некого кода в котором главную роль играет TlistBox. Компилятор ругается - мол нету такого объекта. Как исправить?
KSergey (2005-01-24 09:16:00) [1]Советую прочитать
http://www.delphikingdom.com/helloworld/runtime_comp.htm
Юрий Зотов (2005-01-24 09:12:00) [2]> KPOT (23.01.05 02:26)
> Как исправить?
Сделать переменную L полем формы, а не локальной переменной метода (ведь за пределами метода такая переменная недоступна, а поле формы доступно всем ее методам).
> Dolt © (23.01.05 02:35) [1]
FindComponent придется использовать в каждом методе, где нужен доступ. В итоге получим сильное замедление работы.
ЮЮ (2005-01-24 05:15:00) [3]Когда ты кидаешь компонент на форму, Delphi сама прописывает в uses формы имя модуля, где описан класс этого компонента. В твоем случае это надо сделать самостоятельно, например, посмотрев имя модуля в Help-е по этому компоненту
Piter (2005-01-23 02:36:00) [4]KPOT (23.01.05 2:26)
В программе при нажатии кнопки происходит выполнение некого кода в котором главную роль играет TlistBox
ну и где этот код?
Dolt (2005-01-23 02:35:00) [5]L.name:='myListBox';
-----
Там, где обработчик нажатия кнопки пишем:
Var
L:TListBox;
begin
L:=findComponent('myListBox');
If L<>nil Then Begin
чего-то делаем...
end;