如果我在StdCtrls单元中的TComBoBox加了一个属性,
property OnMouseDown;
但是如何让它出来在属性面板中?好像加了跟没加一样?
是不是要编译一下,怎么编译? 我现在要捕获TComboBox的鼠标右键,怎么做呀?它没有MouseDown事件。当右键单击ComboBox时,我要显示另外一个窗体
急,,,求大家帮帮忙,UP一下也好。
在线等。。
property OnMouseDown;
但是如何让它出来在属性面板中?好像加了跟没加一样?
是不是要编译一下,怎么编译? 我现在要捕获TComboBox的鼠标右键,怎么做呀?它没有MouseDown事件。当右键单击ComboBox时,我要显示另外一个窗体
急,,,求大家帮帮忙,UP一下也好。
在线等。。
你需要在published中声明这些属性的...
然后再消息函数里面写代码。 TComboBoxEx = class(TComboBox)
private
FRButtonDown: TNotifyEvent;
procedure WMRButtonDown(var Message: TWMLButtonDown); message WM_RBUTTONDOWN;
published
property OnRButtonDown: TNotifyEvent read FRButtonDown write FRButtonDown;
......
end;procedure TComboBoxEx.WMRButtonDown(var Message: TWMLButtonDown);
begin
if Assigned(FRButtonDown) then
FRButtonDown(Self);
end;
private
FRButtonDown: TNotifyEvent;
procedure WMRButtonDown(var Message: TWMMouse); message WM_RBUTTONDOWN;
published
property OnRButtonDown: TNotifyEvent read FRButtonDown write FRButtonDown;
......
end;procedure TComboBoxEx.WMRButtonDown(var Message: TWMMouse);
begin
if Assigned(FRButtonDown) then
FRButtonDown(Self);
end; procedure Register;
begin
RegisterComponents('Standard', [TComboBoxEx]);
end;然后把这个控件注册了
可我新建一个控件,还是不行呀,只是在combobox最边上时单击右键才有用的,
如果右击combobox中间,就没有用,它出来的是window的那个copy,past那些功能。。
麻烦大侠您再帮我看看,要如何做才能触发右键????
好急。。
但是必须要使ComboBox能编辑的,没办法。
现在网上有的第三方控件都是没源码的,不敢用。
全部源码:unit ComboBoxExx;interfaceuses
SysUtils, Classes, Forms, Windows, Messages, Controls, StdCtrls;type
TComboBoxExx = class(TComboBox)
private
FOnEditMouseDown: TMouseEvent;
protected
procedure ComboWndProc(var Message: TMessage; ComboWnd: HWnd;
ComboProc: Pointer); override;
published
property OnEditMouseDown: TMouseEvent read FOnEditMouseDown write FOnEditMouseDown;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('ComEx', [TComboBoxEX]);
end;{ TComboBoxEX }procedure TComboBoxEX.ComboWndProc(var Message: TMessage; ComboWnd: HWnd;
ComboProc: Pointer);
begin
if (ComboWnd = EditHandle) then
with Message do
begin
if (Msg = WM_LBUTTONDOWN) or (Msg = WM_RBUTTONDOWN) then
if Assigned(OnEditMouseDown) then
OnEditMouseDown(self, TMouseButton(WParam), [ssLeft], LParamLo, LParamHi);
end;
inherited;
end;end.
你说得对,他是判断了左右键,只是下面的语句中:
if Assigned(OnEditMouseDown) then
OnEditMouseDown(self, TMouseButton(WParam), [ssLeft], LParamLo, LParamHi);
在运行只能有左键单击有效,而右键的单击还是捕获不到。
不过WinProc 我还不是很清楚它的处理机制。