Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.23;
Скачать: CL | DM;

Вниз

Динамическое создание событий   Найти похожие ветки 

 
GrayWolf   (2003-01-13 09:22) [0]

Доброго вам времени суток, уважаемые мастера!
Не могу разобраться как динамически создавать события в dll без создания класса. Т.е. в одной функции создаю, например, пункт меню (через переменную), а вот как назначить ему событие? Просмотрел справку - ничего не нашел. Все алгоритмы не подходят, так как основываются на создании класса компонента (того же пункта меню, например). Может кто подскажет, буду очень признателен...


 
Юрий Зотов ©   (2003-01-13 09:27) [1]

Обработчик события не может быть обычной процедурой. Он должен быть методом класса. Но вот внутри этого метода уже можно вызывать и обычную процедуру.


 
ЮЮ ©   (2003-01-13 09:40) [2]

А что религи не позволяет описать класс, например
TMyMethods = class
protected
procedure MenuItemClick(Sender: TObject);
end;

procedure TMyMethods.MenuItemClick(Sender: TObject);
begin
...
end;

...
if MyMethods = nil then MyMethods := TMyMethods.Create;
...
menu_item.OnClick := MyMethods.onClick;


 
GrayWolf   (2003-01-13 21:06) [3]

Только так? Блин, не хотелось бы строить класс... Конечно, ничего сложного, но все же... А, кстати, проще, наверное, будет создать тогда класс пункта меню? Или я неправ?


 
Моджахед   (2003-01-13 21:12) [4]

А видно, религия, действительно, не позволяет :)


 
GrayWolf   (2003-01-13 21:19) [5]

Причем тут религия? Просто не хочется создавать класс...


 
Моджахед   (2003-01-13 21:30) [6]

Ну, я и говорю, что, вероятно, религия. Некоторым, говорят, и процедуры создавать не хочется.
А бывают люди, которым и программы писать не хочеться. Религия, одним словом.


 
GrayWolf   (2003-01-14 09:19) [7]

А что вы скажете на такой код (откопал в одном из форумов)?

procedure DoOnClick(AFake: TObject; Sender: TObject);
begin
ShowMessage(Sender.ClassName);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
LHandler: TNotifyEvent;
P: Pointer;
begin
P := @DoOnClick;
Move(P, LHandler, SizeOf(Pointer));

Button1.OnClick := LHandler;
end;




 
Моджахед   (2003-01-14 19:16) [8]

Скажу, что не понимаю смысла обманывать компилятор.



Страницы: 1 вся ветка

Текущий архив: 2003.01.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
6-72444
anmartynov
2002-11-26 11:55
2003.01.23
TServerSocket


14-72522
Щькодер
2003-01-07 08:50
2003.01.23
ActionList


3-72053
mamonth
2003-01-05 12:44
2003.01.23
Не создается таблица в рантайм


6-72430
LeReve
2002-11-23 20:35
2003.01.23
Сорри может за несколько глупый вопрос! но что именно такое ПИНГ?


3-72092
sizmrebi
2002-12-27 13:45
2003.01.23
MasterQuery