![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое создание событий [D5, D6, D7, Win95/98, WinME, Win2k, WinXP]
GrayWolf © (2003-01-13 09:22:00)Доброго вам времени суток, уважаемые мастера!
Не могу разобраться как динамически создавать события в dll без создания класса. Т.е. в одной функции создаю, например, пункт меню (через переменную), а вот как назначить ему событие? Просмотрел справку - ничего не нашел. Все алгоритмы не подходят, так как основываются на создании класса компонента (того же пункта меню, например). Может кто подскажет, буду очень признателен...
Моджахед (2003-01-14 19:16:00) [1]Скажу, что не понимаю смысла обманывать компилятор.
GrayWolf (2003-01-14 09:19:00) [2]А что вы скажете на такой код (откопал в одном из форумов)?
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-13 21:30:00) [3]Ну, я и говорю, что, вероятно, религия. Некоторым, говорят, и процедуры создавать не хочется.
А бывают люди, которым и программы писать не хочеться. Религия, одним словом.
GrayWolf (2003-01-13 21:19:00) [4]Причем тут религия? Просто не хочется создавать класс...
Моджахед (2003-01-13 21:12:00) [5]А видно, религия, действительно, не позволяет :)
GrayWolf (2003-01-13 21:06:00) [6]Только так? Блин, не хотелось бы строить класс... Конечно, ничего сложного, но все же... А, кстати, проще, наверное, будет создать тогда класс пункта меню? Или я неправ?
ЮЮ (2003-01-13 09:40:00) [7]А что религи не позволяет описать класс, например
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;
Юрий Зотов (2003-01-13 09:27:00) [8]Обработчик события не может быть обычной процедурой. Он должен быть методом класса. Но вот внутри этого метода уже можно вызывать и обычную процедуру.