如何给Label控件发送消息?(300分)(300分)

  • 主题发起人 主题发起人 lookingin
  • 开始时间 开始时间
L

lookingin

Unregistered / Unconfirmed
GUEST, unregistred user!
如何给Label控件发送消息?
 
PostMessage(Label1.Handle,WM_User+$300,0,0); //发送信息
 
不知道label的句柄如何获取??
 
FindWindowEx得到句柄。
参考这个:
var wnd:hwnd;
URL:string;
begin
wnd:=findwindow('IEFrame',nil);
wnd:=findwindowex(wnd,0,'ComboBox',nil);
wnd:=findwindowex(wnd,0,'Edit',nil);
 
to happycyp:
label好像没有句柄,不知道如何解决?
 
label沒有句柄,Label1.Perform()
這樣就可以了
 
是的,它没有句柄,也不能得到焦点,我错了。
如果这个Label是你自己程序里的,你可以用TEdit(设置成类似Label的显示样式)替换。
 
label不在我的程序里,不知道如何解决?
 
你要实现什么功能?
估计是没戏。它没有句柄,不能接收消息。
 
这好办,写个有句柄的Label控件这不就有句柄了
 
我查了好多资料,也没找到解决方法,看来真是没戏了,:(
 
请问,你想做什么用
 
要修改另一个程序中的label的内容
不知道大家还有什么好的问题来解决?
 
从TWinControl继承写一个新的Label控件,这样就有句柄了
如果只显示文件且宽度固定,几十行代码就搞定了
想不出还有什么更好的办法了
 
这个问题估计不能从消息句柄方面来考虑了。
因为这是别人的程序。从它的资源文件想办法吧。
 
同意 happycyp
即使写了消息,别人程序中的LABEL又不接收和处理,还是不行的呢
 
发送了,你还要处理这些信息。。。
 
没有高人指点一下。。。。
 
方法一:
看发送的是什么消息,如果WINDOWS标准的消息,这机使用POSTMESSAGE就可以了。
PostMessage(Label1.Handle,WM_SETCHAR,0,0);
这样lable1能够自动处理。
第二:
比如这个LABLE放在了窗口上,干脆你就让窗口接收你的自定义消息。
CONST
CM_MYLABLE=WM_USER+$200;
type
TForm1=class(TForm)
Lable1:TLABEL
Private
procedure cmmylable(var msg:tmessage);CM_MYLABLE;
end;
之后你处理这个函数就 可以了
发送消息的方法呢:
postMessage(lable1.handle,cm_mylable,0,0);
就可以了。

方法三:直接修改TLable组件,开发新的组件,响应这个消息。
方法就是上面的演化 。
让消息转换为事件都可以。
还有其他的方法。看具体的情况而定。
 
如果是自己编的程序,用TStaticText代替Tlabel
话题1763746的标题是: 知道一个lable得句炳,如何得到它的Caption或name的文本内容,getwindowtext不行? (100分)
分类:Windows API 路远 (2003-04-13)
请教

Derlin (2003-04-13 2:07:00)
好象没有吧,用TStaticText

路远 (2003-04-13 8:38:00)
GetDlgltemText获取对话框中与控制有关的文本或标题。
控制文本是什么?

张无忌 (2003-04-13 8:59:00)
lable没有句柄的,他是由他的父类画出来的,因此无法通过WIN API得到他的CAPTION,
或许通过DELPHI的RTT得到他的内容

路远 (2003-04-13 10:54:00)
spp++和WinSight32看好像每一个lable都有句炳?
DELPHI的RTT是什么,函数原型?

路远 (2003-04-13 10:55:00)
有一个GetDlgltemText获取对话框中与控制有关的文本或标题,
与控制有关的文本或标题是什么?比方说是一个保存对话框,是保存按钮还是保存时的路径文件名?

knmfkr (2003-04-13 13:32:00)
也许你要这样:

if (FindComponent('label1') is TLabel) then
begin
edit1.Text :=TLabel(FindComponent('label1')).Caption;
edit2.Text :=TLabel(FindComponent('label1')).name;
end;

张无忌 (2003-04-13 13:35:00)
我的意思就是knmfkr的,要用FindComponent来查着,不过速度慢呀,用GetWindowsText之类
的函数是什么都的不到,他没有Handle你如何查找他的标题了?你用Spy++看到的,应该不是
TLabel!

路远 (2003-04-13 16:35:00)
用Spy++看,它的类是 static。

张无忌 (2003-04-13 16:57:00)
那他不是TLabel!

xianjun (2003-04-14 1:52:00)
TStaticText是可以用GetWindowText取得它的标题的。
另: Label是没有handle的

路远 (2003-04-15 20:05:00)
多人接受答案了。


knmfkr-50,张无忌-50,的回答最终被接受。
 

Similar threads

回复
0
查看
825
不得闲
D
回复
0
查看
844
DelphiTeacher的专栏
D
D
回复
0
查看
933
DelphiTeacher的专栏
D
后退
顶部