关于操作另一个程序的Button

imho888 2008-10-27 08:51:27

我利用FindWindowEx 查找到了Button 的 Handle

我用EnableWindow(Handle,True); 想让Enable为false 的按键变为Enable为true

如果Button的类是TButton 这种操作是没有问题的

但是如果Button的类是TRzButton 这种操作不起作用

如果使用SendMessage 改变TRzButton的Caption 是起作用的.

想请问这是什么原因,为什么Enable 改变不过来? 有其它的办法吗? 非常感谢!
...全文
201 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
imho888 2008-11-04
  • 打赏
  • 举报
回复
不太明白,能否具体点
swayi21 2008-10-31
  • 打赏
  • 举报
回复
楼上的,如果已经Disabled, 这样的操作有可能被忽略。


看过源码了,里面有一段

procedure TRzCustomButton.CMEnabledChanged( var Msg: TMessage );
begin
if not Enabled and (Parent <> nil) then
RemoveFocus( False );
if HandleAllocated and not ( csDesigning in ComponentState ) then
EnableWindow( Handle, Enabled );
Invalidate;
end;


通过这个CM消息找到它处理的消息编号,再试试吧。
无条件为你 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 imho888 的回复:]
我试过了,还试过SendMessage(按扭句柄,BM_CLICK,0,0);都是不行的
[/Quote]

那你再试试这个:

PostMessage(按扭句柄,WM_KEYDOWN,VK_RETURN,0);//在该句柄上按回车键

tjg5202 2008-10-31
  • 打赏
  • 举报
回复
ding ....
无条件为你 2008-10-28
  • 打赏
  • 举报
回复
该按扭的Enable状态并不重要,直接发一个postmessage (按扭句柄,BM_CLICK,0,0);
zhao_yong 2008-10-28
  • 打赏
  • 举报
回复
幫你頂一下
imho888 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 mwy654321 的回复:]
该按扭的Enable状态并不重要,直接发一个postmessage (按扭句柄,BM_CLICK,0,0);
[/Quote]


我试过了,还试过SendMessage(按扭句柄,BM_CLICK,0,0);都是不行的
CaiBirdy 2008-10-27
  • 打赏
  • 举报
回复
有办法,自定义消息,外部程序向本程序发送,在本程序的消息处理中控制TRzButton的属性,
genispan 2008-10-27
  • 打赏
  • 举报
回复
这个 其实我也想知道 哈哈
imho888 2008-10-27
  • 打赏
  • 举报
回复
大家可以一起讨论一下
imho888 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hmzgz81 的回复:]
感觉楼主在破解啊
[/Quote]
呵呵
现在有点空闲时间,所以就研究一下WIN API 
gwhdaxia 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 imho888 的回复:]
看过源码了,里面有一段

procedure TRzCustomButton.CMEnabledChanged( var Msg: TMessage );
begin
if not Enabled and (Parent <> nil) then
RemoveFocus( False );
if HandleAllocated and not ( csDesigning in ComponentState ) then
EnableWindow( Handle, Enabled );
Invalidate;
end;


难道其它就没有什么办法了吗?
[/Quote]

看写的应该没问题啊
hmzgz81 2008-10-27
  • 打赏
  • 举报
回复
感觉楼主在破解啊
imho888 2008-10-27
  • 打赏
  • 举报
回复
看过源码了,里面有一段

procedure TRzCustomButton.CMEnabledChanged( var Msg: TMessage );
begin
if not Enabled and (Parent <> nil) then
RemoveFocus( False );
if HandleAllocated and not ( csDesigning in ComponentState ) then
EnableWindow( Handle, Enabled );
Invalidate;
end;


难道其它就没有什么办法了吗?
oushengfen 2008-10-27
  • 打赏
  • 举报
回复
可能控件本身对某些消息进行了屏蔽,如果要深究,看一下源码就知道了。
imho888 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 unsigned 的回复:]
就是为了防止这样随意修改Enabled属性,而进行的技术处理.
[/Quote]


只是想研究一下,为什么这样不可以,难道没有其它办法了吗?

或者说可以强制执行RzButton 的 Click 事件

[Quote=引用 3 楼 D_Q 的回复:]
TGraphicControl继承下来的控件是没有Handle的。TRzButton 应该是吧
[/Quote]

TRzButton 是有Handle 的,要不然怎么可以更改Caption 呢?

zhouyu5241 2008-10-27
  • 打赏
  • 举报
回复
就是为了防止这样随意修改Enabled属性,而进行的技术处理.
程序是有设计逻辑和业务逻辑的,不要随意去改变,否则得到的结果将会与本意相违背.
顶了!
fangsp 2008-10-27
  • 打赏
  • 举报
回复
我觉得也是这个道理
有些东西也要符合程序的设计逻辑和业务逻辑
有时候自己的想法固然是好 但它并不符合真正的逻辑
哪怕真的实现了 但利也远小于弊
D_Q 2008-10-27
  • 打赏
  • 举报
回复
TGraphicControl继承下来的控件是没有Handle的。TRzButton 应该是吧
僵哥 2008-10-27
  • 打赏
  • 举报
回复
程序是有设计逻辑和业务逻辑的,不要随意去改变,否则得到的结果将会与本意相违背.
加载更多回复(2)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧