我举个例子,其他你照着做就行了, 加OnMouseDown事件
TB2Item.pas:
在TTBCustomItem的Public最后一行加
property OnMouseDown: TMouseEvent read FOnMouseDown write SetOnMouseDown;
可用Ctrl + Shift + C自动生成变量定义及SetOnMouseDown过程。
在TTBItem的Published最后加上下面一行
property OnMouseDown;
把这个属性Published出来。
TB2Toolbar.pas:
在过程
procedure TTBCustomToolbar.MouseDown (Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
var
OldParent: TWinControl;
P: TPoint;
Item: TTBCustomItem;
begin
OldParent := Parent;
inherited;
if Parent <> OldParent then
{ if the inherited handler (TTBDockableWindow.MouseDown) changed the Parent
(due to the toolbar moving between docks), nothing else should be done }
Exit;
if not(csDesigning in ComponentState) and (Button = mbLeft) then begin
P := ClientToScreen(Point(X, Y));
FView.UpdateSelection (@P, True);
if Assigned(FView.Selected) then begin
Item := FView.Selected.Item;
if not(tbisClicksTransparent in TTBCustomItemAccess(Item).ItemStyle) then begin
FIgnoreMouseLeave := True;
try
FView.EnterToolbarLoop ([tbetMouseDown]);
finally
FIgnoreMouseLeave := False;
end;
end;
//下面两句是新加的,响应OnMouseDown事件
if Assigned(Item.OnMouseDown) then
Item.OnMouseDown(Item, Button, Shift, X, Y);
end;
end;
end;
重新编译包,打开ToolBar的编辑器,选定某一个Item,在新加的OnMouseDown写代码测试一
下,一切搞定。 其他的OnMouseUp,OnMouseDoubleClick类似改就OK了。
原则就是在TTBCustomItem中只是增加各种属性, 属性对应的事件则在TTBCustomToolbar的
相就事件或方法或消息中执行。