挑战你的API工夫。解决了我再加100分。

vchoushen6 2003-08-26 09:50:15
我可以获取当前输入焦点所在的窗口,但是我想知道,当前焦点所在控件是否是可以输入文本的控件,如TEDIT等。
千万别告诉我去一个一个判断控件的类名称。
...全文
117 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
vchoushen6 2003-09-07
  • 打赏
  • 举报
回复
确实不错,可以解决俺的问题,不过又产生了一个新问题,那就是输入框中多了个字符,这个俺再想办法吧。
结贴先。
ly_liuyang 2003-09-06
  • 打赏
  • 举报
回复
呵呵,楼上的有理
vchoushen6 2003-09-06
  • 打赏
  • 举报
回复
先去试过,成功即结贴.多谢!
YYQQ 2003-09-06
  • 打赏
  • 举报
回复
Xleep(笑尽天下事) 的方法好啊,简洁方便
liuziran 2003-09-06
  • 打赏
  • 举报
回复
Xleep(笑尽天下事) 的方法不一定行呀
如果输入VCL的 ReadOnly =True的话
SendMessage的返回结果是0,判断结果就错了呀
sy_315 2003-09-06
  • 打赏
  • 举报
回复
支持楼上
~
kuan 2003-09-06
  • 打赏
  • 举报
回复
学习楼上,试一下……
Xleep 2003-09-05
  • 打赏
  • 举报
回复
你试一下下面的吧,不一定都行。
function IsEdit(Handle: HWND): boolean;
begin
if SendMessage(Handle, WM_Char, 65, 0) <> 0 then
Result := True
else
Result := False;
end;

一般来说能够输入文本的窗口都对WM_Char消息进行处理而且返回值都不为零,但其他的都不对WM_Char消息进行处理,所以SendMessage的返回值为零。
debussy 2003-09-05
  • 打赏
  • 举报
回复
呃~对不起,看错你的问题了。其实,系统能够输入文本的就那么几类,其余再变也是从那些窗口类子类化出来的。
debussy 2003-09-05
  • 打赏
  • 举报
回复
function GetSysFocus: Integer;
var
hFgWin, FgThreadID, hFocusWin: Integer;
begin
hFgWin := GetForegroundWindow;
FgThreadID := GetWindowThreadProcessID(hFgWin, nil);
if AttachThreadInput(GetCurrentThreadID, FgThreadID, True) then
begin
hFocusWin := GetFocus;
Result := GetFocus;
AttachThreadInput(GetCurrentThreadID, FgThreadID, False);
end
else
Result := GetFocus;
end;
vchoushen6 2003-09-05
  • 打赏
  • 举报
回复
自己顶一下。
myling 2003-09-05
  • 打赏
  • 举报
回复
Xleep(笑尽天下事) 的方法不错,可以试试
youou 2003-09-05
  • 打赏
  • 举报
回复
~
gaohongru 2003-09-05
  • 打赏
  • 举报
回复
俺同意楼上的.呵呵
eliphe 2003-08-27
  • 打赏
  • 举报
回复
sendmessage
postmessage
pankun 2003-08-27
  • 打赏
  • 举报
回复
我知道楼主的意思了,但我查了一下,具有可输入属性的控件好像没什么特别的风格和扩展风格,类名又不一定.只有试试其它方法了.
vchoushen6 2003-08-27
  • 打赏
  • 举报
回复
首先感谢各位兄弟的建议!
我可能是还没有说明确我的用意.我是想直接根据焦点所在控件的句柄判断出其是不是具有文本输入的特性,如TEDIT,TMEMO等.若根据类名一个一个判断的话,若要不是DELPHI的标准类,或是对其的继承,那就没有作用了.
pankun 2003-08-27
  • 打赏
  • 举报
回复
楼上兄弟只是按类名找,也就是说只能找到DELPHI做的程序中的TEDIT类啊,不行吧。
duxin 2003-08-27
  • 打赏
  • 举报
回复
搂住是判断自己工程中的窗体

还是已经打开的应用程序的窗体? 其他应用程序的窗体可以使这这末做


hForm := FindWindowEx(0, 0, nil,'窗体名');
if hForm <> 0 then
begin
hEdit := FindWindowEx(hForm, 0, 'TEdit', nil);
if hEdit <> 0 then
找不到也就不是TEdit 就为空

现在是只能找到 不能判断焦点是不是在上边 判断焦点一般的api好像解决不了问题

因为它是消息机制的 你可能要用钩子
pankun 2003-08-27
  • 打赏
  • 举报
回复
如果只是判断VCL控件的话,判断它是不是从TEDIT继承下来的就可以了.
if control1 is TEDIT then
加载更多回复(2)

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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