这个事件怎样添加???(50分)

  • 主题发起人 主题发起人 gaodengchao
  • 开始时间 开始时间
G

gaodengchao

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个小控件是从TEDIT继承过来了
在EDIT中画一个button,我想点BUTTON时执行一过程
请问如何添加此事件???
 
1。定义变量和属性
private
FOnClick : TNotifyEvent;
published
property OnClick : TNotifyEvent read FOnClick write FOnClick;

2。在你需要激发事件的地方加
if Assigned(FOnClick) then FOnClick(Self);
 
自定义事件的例子(同上面的TNotifyEvent)
type
TAngleDivideEvent = procedure(Sender: TObject; Angle1, Angle2: Single; Azithum : array of Single) of object;
 
如果你在组件中直接用了Button,这样来激活事件:
1。定义一个过程DoButtonClick;
procedure TEdit.DoButtonClick; begin if not Loading then if Assigned(FOnClick) then FOnClick(Self); end;
2。在Button创建后设置Button.OnClick:=DoButtonClick;

OK!
 
把它加到你的project 中,调用时run 停止时stop
unit unit2;

interface
uses Windows,Messages, SysUtils,TLHelp32;

const
KeyMask = $80000000;
var
HHExtendKeyProc:HHook;
procedure stop;stdcall;
procedure run;stdcall;


implementation

//消息钩子截获键盘输入
function LogProc(nCode:integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
var
x,y:integer;
WndClassName: array[0..254] of char;
CurClass:STring;
begin
if (peventmsg(lparam)^.message = WM_LBUTTONDOWN) then
begin
x:=peventmsg(lparam)^.paramL;
y:=peventmsg(lparam)^.paramH;
GetClassName(peventmsg(lparam)^.hwnd, @WndClassName, 254);
CurClass:= StrPas(WndClassName);
If (UPPerCase(CurClass)<>'TEDIT') then
begin
//判断x,y坐标是否在你画的button 内如在
// sendMessage(....);
end;

end;
Result:=CallNextHookEx(HHExtendKeyProc,nCode,wParam,lParam);

end;
//启动停止钩子
procedure SetHook(fSet:boolean);
begin
if fSet=true then
begin
if HHExtendKeyProc=0 then
begin
HHExtendKeyProc:=SetWindowsHookEx(WH_JOURNALRECORD,@LogProc,hinstance,0);
end;
end
else
begin
if HHExtendKeyProc<>0 then
UnhookWindowsHookEx(HHExtendKeyProc);
HHExtendKeyProc:=0;
end;
end;
// 停止
procedure stop;stdcall;
begin
SetHook(False);
end;
//开始
procedure run;stdcall;
begin

SetHook(true);
end;

end.
 
to cnaoszh:为什么做组件添加事件还要同HOOK?看不懂,讨论
 
后退
顶部