ToolBar2000的问题(200分)

  • 主题发起人 主题发起人 Rik
  • 开始时间 开始时间
R

Rik

Unregistered / Unconfirmed
GUEST, unregistred user!
我是个新手,对控件不熟悉,谁可以帮我修改一下这个控件?
给TTBItem增加OnMouseDown,OnMouseUp,OnMouseDoubleClick?谢谢!
 
没有的朋友在此下载:http://www.jrsoftware.org/files/site1/tb2k.zip
 
拜托各位高手,我很急,帮帮忙,分不够可以在领啊
 
没用过
不过可以帮你看看。
 
我举个例子,其他你照着做就行了, 加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的
相就事件或方法或消息中执行。
 
xianjun,我按照你的方法做了,可是为什么在TBItem的事件里栏里没有OnMouseDown呢?
但是TBItem1.OnMouseDown有,我试了一下,为什么只能响应左键,中键和右键不行呢?
 
*/. . . * . * 祝
./* . [] * .__ 你
? */ . .//~~~~~~~~~~~~'/. | ◆ 快
/* ,/,./,...........,/.| ◆ . 乐
|| ..▎# ▎田 田 ▎ | ▎◆ !
|| &&▎ ▎ ▎'|'▎ o ..
|| ##■■■■■■■■■■〓▄▃▂▁
祝事业有成!
 
>>为什么只能响应左键,中键和右键不行呢?
这就要自己动手去做了!
看看下面这句就知道了:
if not(csDesigning in ComponentState) and (Button = mbLeft) then begin
只有(Button = mbLeft) 才响应嘛
你看看怎么改一下了
 
好,我试一试
 
xianjun,谢谢,解决了。
不过还有一个问题麻烦你一下
能不能给这个控件中增加像TabControl中的IndexOfTabAt()属性?
我好利用这个来判断我右击到了哪一个Item
 
其实不用再加什么方法
你看它的代码:
P := ClientToScreen(Point(X, Y));
FView.UpdateSelection (@P, True);
if Assigned(FView.Selected) then begin
Item := FView.Selected.Item;
这其实就是在判断当前鼠标位置下的是哪个Item了。
 
THX
搞定,谢谢提醒!我在QQ上加你为好友了,Ray:841016
 
后退
顶部