鼠标点击TStatusBar时如何判断点的是哪一个panels,例如panels[1],或panels[2]等(30分)

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

resun

Unregistered / Unconfirmed
GUEST, unregistred user!
鼠标点击TStatusBar时如何判断点的是哪一个panels,例如panels[1],或panels[2]等,
我现在是用statusbar的onMouseUp或onMouseDown中的X坐标来实现的,有没有其它的方法?
 
对你的问题我也不懂
 
好像也只有这个办法了
 
需要自己写一个控件
重写TCollection让他接受onmousedown
 
下面的代码,展示了如何在一个包含多个panel的状态栏中检测其中某个Panel受到鼠标双击。
在单元的uses部分加上对CommCtrl的引用。

procedure TMainForm.StatusBar1DblClick(Sender: TObject);
var MouseCor : TPoint;
PanelRect: TRect;
lp0 : integer;
SB : TStatusBar;
begin
if Assigned(sender) then
begin
if Sender is TStatusBar then
begin
GetCursorPos(MouseCor);
SB := TStatusBar(Sender);
for lp0 := 0 to SB.Panels.Count-1 do
begin
SendMessage(SB.Handle, SB_GETRECT, lp0, Integer(@PanelRect));
if PtInRect(PanelRect,SB.ScreenToClient(MouseCor)) then begin
// 在这里添加处理代码
// SB.Panels[lp0]被点击
break;
end;
end;
end;
end;
end;
 
procedure StatusBarDblClick(Sender: TObject);
begin
Form1.caption := (sender as Tpannel).name;
end;
 
to 老人家
Form1.caption := (sender as Tpannel).name
不行啊,:-&
 
Form1.caption := (sender as Tpanel).name;
行了
留下你的qq和mail
 
vine的方法是可以的,不过需要加入commctrl单元
老人家的方法不行,TstatusPanels与Tpanel不是一个类
还有没有更简单的方法啊?
 
vine的方法实际上好像还是通过坐标判断
 
难道就没有更好的办法了?先到此结束吧
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部