![]() |
|
|
#1
|
||||
|
||||
|
Как реализовать в TShape OnDblClick?
|
|
#2
|
|||
|
|||
|
Поскольку:
TShape = class(TGraphicControl) TGraphicControl = class(TControl) А у TControl есть соотв.обработчик: property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick; То можно сделать наследника от TShape и "проявить" это свойство. Примерно так: Код:
Type
TMyShape = class(TShape)
published
property OnClick;
property OnDblClick; //вот это оно и есть
end;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
public
MyShape1 : TMyShape;
procedure MyShape1DblClick(Sender: TObject); //это объявление на уровне формы
end;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
//-----------------------------
//Тест
MyShape1:=TMyShape.Create(Self);
MyShape1.Parent:=Self;
MyShape1.OnDblClick:=MyShape1DblClick;
//-----------------------------
end;
procedure TForm1.MyShape1DblClick(Sender: TObject);
//это реализация на уровне формы
begin
ShowMessage('Двойной щелчок мышкой по MyShape1');
end; |
|
#3
|
||||
|
||||
|
если на форме уже лежит Shape1, то:
Код:
unit Unit1;
interface
uses
Dialogs,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
ExtCtrls;
type
TForm1 = class(TForm)
Shape1: TShape;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FWndMethod: TWndMethod;
procedure Lost(var Message: TMessage);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FWndMethod:=Shape1.WindowProc;
Shape1.WindowProc:=Lost;
end;
procedure TForm1.Lost(var Message: TMessage);
begin
FWndMethod(Message);
if Message.Msg=WM_LBUTTONDBLCLK then
MessageBox(Handle, 'WM_LBUTTONDBLCLK', 'TForm1', MB_OK);
end;
end. |
|
#4
|
||||
|
||||
|
NumLock
Большое спасибо! все работает!!! |