Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Компоненты в рантайме (http://www.tehnari.ru/f43/t48764/)

Fenix 13.03.2011 10:22

Компоненты в рантайме
 
Как создать компонент в рантайме? в часности нужно создать кнопку задать ей действие.

Hakmax 13.03.2011 11:20

var
MyButton:TButton;
begin
MyButton:=TButton.create(Form1);
MyButton.caption:='Моя кнопка';

Hakmax 13.03.2011 11:23

а чтобы действие какое то выполняла, надо создать процедурку, например,
[code]procedure Deystvie(Sender:TObject);
begin
ShowMessage('ты нажал кнопку!');
end;

ну и потом уже ссылаешься на эту процедуру при событии Onclick созданной кнопки:
Код:

myButton.onclick:=deystvie;

Fenix 13.03.2011 12:20

Спасибо, разобрался. Еще одно: эта кнопка должна создаваться в каком-то месте. причем место строго не определено. Нужно определить есть ли на форме еще такие кнопки. Как это организовать?

Hakmax 13.03.2011 12:59

Цитата:

Нужно определить есть ли на форме еще такие кнопки.
такие это какие? созданные в ран тайме? или обычные..
а вообще поиск элементов вот так идёт:
Код:

for i:=0 to Componentcount-1 do
 if Components[i].classname='TButton' then что-то делаем..

или же если кнопок всяких много, а надо найти одну-единственную, то можно у неё изменить св-во Tag..
а потом её искать по этому св-ву..
Код:

for i:=0 to Componentcount-1 do
 if Components[i].tag=2 then что-то делаем..


Fenix 13.03.2011 14:03

сама прога это TmainMenu и чистая форма. Подключаются плагины. Каждый плагин должен автоматически добавлять на форму кнопку по нажатию которой открывается форма из плагина. вот и реализовываю случай когда плагин не первый и кнопку плагина N надо поместить относительно кнопи плагина N-1

Long Cat 13.03.2011 14:29

У Delphi должен быть механизм для автоматического размещения кнопок по форме.
Изобретать велосипед нежелательно. Это раз.

Далее, каким образом плагин должен создавать кнопку? Ему передается указатель на главную форму? Это очень плохая идея, так как все плагины придется писать только на Delphi.

И в третьих, вы тестировали то, что вам тут посоветовали? У меня есть основания полагать, что все это работать не будет.

Hakmax 13.03.2011 14:56

MyButton.parent:=Form1;
MyButton.show;
добавьте, а то действительно, не увидите созданных компонент, забыл, когда писал..

Fenix 13.03.2011 15:06

плагины будут тоже на делфи. специфика программы. Попробовал то что советовали. ругается когда объявляю MyButton: Tbutton;

Long Cat может вы предложите как это будет лучше огранизовать?

Long Cat 13.03.2011 15:12

Очень просто - для начала нужно выбросить Delphi куда подальше :-). Нет, ну правда.

С++ в связке с wxWidgets позволяет делать весьма неплохие программы, в том числе и с плагинами.

Каким текстом он ругается?


Часовой пояс GMT +4, время: 07:18.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.