外部如何点击TToolButton ? 网上找了一下,还是没有明白的答案. 这真是个难问题吗? 200分(BCB部分也有100). 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先获取ToolButton的范围,再模拟鼠标点击uses CommCtrl;procedure TForm1.Button1Click(Sender: TObject);var t:TRect;begin SendMessage(ToolBar1.Handle,TB_GETITEMRECT,0,integer(@t));//ID是0的ToolButton SendMessage(ToolBar1.Handle,WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(t.Left,t.Top)); SendMessage(ToolBar1.Handle,WM_LBUTTONUP,MK_LBUTTON,MAKELPARAM(t.Left,t.Top));end; SendMessage(ToolBar1.Handle,WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(t.Left+1,t.Top+1));SendMessage(ToolBar1.Handle,WM_LBUTTONUP,MK_LBUTTON,MAKELPARAM(t.Left+1,t.Top+1)); 呵呵,每个ToolButton范围内的每个点的位置都不会重复,加1岂不多此一举?用鼠标模拟点击的方法不一定最好,但TB_PRESSBUTTON又不会触发点击事件 liangqingzhi(老之), 帮忙翻译成BCB吧: 下面这样对不对: RECT TBRect; // ???? SendMessage( hToolBarWindow,TB_GETITEMRECT,1,(int)&TBRect); SendMessage( hToolBarWindow,WM_LBUTTONDOWN, MK_LBUTTON,MAKELPARAM( TBRect.left,TBRect.top )); SendMessage( hToolBarWindow, WM_LBUTTONUP,MK_LBUTTON,MAKELPARAM( TBRect.left,TBRect.top ) ); 如果没有翻译错,还是不行:调试发现,TBRect.left的数值很大! 我用你的代码在BCB6下调试没有问题,TBRect.left很大,是不是用了第三方控件? 原程序是.net的.用VS开发的. 我在Down和Up之间加了一个延时,原程序出现错误: "Object reference not set to an instance of an object. 点"确定"后,原程序被关闭. 唉,与控件应该没关系,可能这个用鼠标模拟点击方法本来就有问题。我测试就用本程序的ToolBar的句柄没问题,但用到外部的ToolBar句柄就不行了。看看别人还有没有好的方法。 你先找到句柄,再用postmessage()发送点击消息. 我发现问题就在TB_GETITEMRECT这里,对于内部的ToolBar.handle,它能够获取正确的Rect,可以实现点击。但对于外部的ToolBar.handle,它的Rect全是0。用PostMessage也不行,TB_GETRECT也不行。 Why? I'm going to sleep. 动态数组为类的时候的元素删除 关于EOT文件! 求一组数字中,全部逐个相加的算法的所有结果 一个困绕我很久的问题,不吐不快!(Delphi 的不足) >>1000分寻RealMagic API 详细资料 这两条try语句有什么区别 try...finally...except 和 try...except...finally 你好:) yanghx2000,请教!! 请问怎么在DBGrid每条记录前加一个序号 请教radiobutton的问题 编制几十k的程序,还要有窗体,不用Tform类怎么遍? 为了爱,我在广州-上海徘徊,值得吗? 如何用delphi发送文件?
var t:TRect;
begin
SendMessage(ToolBar1.Handle,TB_GETITEMRECT,0,integer(@t));//ID是0的ToolButton
SendMessage(ToolBar1.Handle,WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(t.Left,t.Top));
SendMessage(ToolBar1.Handle,WM_LBUTTONUP,MK_LBUTTON,MAKELPARAM(t.Left,t.Top));
end;
SendMessage(ToolBar1.Handle,WM_LBUTTONUP,MK_LBUTTON,MAKELPARAM(t.Left+1,t.Top+1));
用鼠标模拟点击的方法不一定最好,但TB_PRESSBUTTON又不会触发点击事件
帮忙翻译成BCB吧:
下面这样对不对:
RECT TBRect; // ???? SendMessage(
hToolBarWindow,TB_GETITEMRECT,1,(int)&TBRect);
SendMessage(
hToolBarWindow,WM_LBUTTONDOWN,
MK_LBUTTON,MAKELPARAM( TBRect.left,TBRect.top ));
SendMessage( hToolBarWindow,
WM_LBUTTONUP,MK_LBUTTON,MAKELPARAM( TBRect.left,TBRect.top
)
);
如果没有翻译错,还是不行:调试发现,TBRect.left的数值很大!
我在Down和Up之间加了一个延时,原程序出现错误:
"Object reference not set to an instance of an object.
点"确定"后,原程序被关闭.
我测试就用本程序的ToolBar的句柄没问题,但用到外部的ToolBar句柄就不行了。
看看别人还有没有好的方法。
I'm going to sleep.