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

Вниз

Создание события   Найти похожие ветки 

 
webpauk   (2004-09-16 13:30) [0]

Для пункта меню создано событие:


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:31) [1]

Выдает ошибку:  Incompatible types: "method pointer and regular procedure"


 
begin...end ©   (2004-09-16 13:34) [2]

Объяви DoQuit как метод.


 
webpauk   (2004-09-16 13:34) [3]

Может кто подскажет, как правильно определить событие, чтобы к нему можно было подвязать нужную процедурку


 
webpauk   (2004-09-16 13:37) [4]

>begin...end ©
дык все процедуры, которые надо привязывать к событиям не запишешь как методы. Да и смысла в этом мало.


 
Rem   (2004-09-16 13:40) [5]

procedure Form1.DoQuit;

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


 
webpauk   (2004-09-16 13:40) [6]

может надо как то переписать класс?


 
Rem   (2004-09-16 13:41) [7]

[4]
 Читайте про "делегирование методов".


 
Rem   (2004-09-16 13:44) [8]

Если Вам не нужно, чтобы указанный обработчик события отображался в инспекторе объектов - можете указать свойство - указатель на процедурный тип в секции 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:47) [9]

[6]
 Вообще-то объектно-ориентированное программирование в том и заключается, что программисты пишут новые/наследованные классы и логику их взаимодействия. Так что класс действительно надо переписать. Как? - решать Вам.


 
webpauk   (2004-09-16 13:55) [10]

> Rem
TMyProc = procedure!!! Cool!!!
спсб



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

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

Наверх




Память: 0.48 MB
Время: 0.021 c
1-1095157928
SNV-Soft
2004-09-14 14:32
2004.10.03
Альтернатива OnMouseMove.....


6-1091011983
Nikolay
2004-07-28 14:53
2004.10.03
Передача буфера большего чем ~270kb


14-1095342975
Константинов
2004-09-16 17:56
2004.10.03
Сроду не догадаетесь!!!


1-1095237628
Black
2004-09-15 12:40
2004.10.03
Почему delete(q, 0, 8) выдаёт ошибку?


4-1093528246
RagE
2004-08-26 17:50
2004.10.03
ALT+key