![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание события [D6, WinXP]
webpauk © (2004-09-16 13:30:00)Для пункта меню создано событие:
type
TOnItemMouseClick = procedure of object;
TMenuItem = class
private
fOnItemMouseClick: TOnItemMouseClick;
public
constructor Create(aCaption, ffShortCut: String; ItemNumber, fLeft: Integer; aEnable: Boolean = True);
destructor Destroy; override;
procedure DoOnItemMouseClick; virtual;
property OnItemMouseClick : TOnItemMouseClick read fOnItemMouseClick write fOnItemMouseClick;
end;
procedure TMenuItem.DoOnItemMouseClick;
begin
if Assigned(fOnItemMouseClick) then fOnItemMouseClick;
end;
А фишка:Menu.Items[0].Items[4].OnItemMouseClick:=DoQuit;- не работает
где DoQuit -
procedure DoQuit;
webpauk (2004-09-16 13:55:00) [1]> Rem
TMyProc = procedure!!! Cool!!!
спсб
Rem (2004-09-16 13:47:00) [2][6]
Вообще-то объектно-ориентированное программирование в том и заключается, что программисты пишут новые/наследованные классы и логику их взаимодействия. Так что класс действительно надо переписать. Как? - решать Вам.
Rem (2004-09-16 13:44:00) [3]Если Вам не нужно, чтобы указанный обработчик события отображался в инспекторе объектов - можете указать свойство - указатель на процедурный тип в секции public.
TMyProc = procedure; // без of object
TMyClass = class
private
m_MyProc: TMyProc;
public
property MyProc: TMyProc read m_MyProc write m_MyProc;
...
end;
Rem (2004-09-16 13:41:00) [4][4]
Читайте про "делегирование методов".
Rem (2004-09-16 13:40:00) [5]procedure Form1.DoQuit;
или метод любого другого класса; естественно, прежде чем вызывать метод, необходимо создать экземпляр этого класса, а потом назначить метод этого экземпляра свойству.
webpauk (2004-09-16 13:40:00) [6]может надо как то переписать класс?
webpauk (2004-09-16 13:37:00) [7]>begin...end ©
дык все процедуры, которые надо привязывать к событиям не запишешь как методы. Да и смысла в этом мало.
begin...end (2004-09-16 13:34:00) [8]Объяви DoQuit как метод.
webpauk (2004-09-16 13:34:00) [9]Может кто подскажет, как правильно определить событие, чтобы к нему можно было подвязать нужную процедурку
webpauk (2004-09-16 13:31:00) [10]Выдает ошибку: Incompatible types: 'method pointer and regular procedure'