我可以获取当前输入焦点所在的窗口,但是我想知道,当前焦点所在控件是否是可以输入文本的控件,如TEDIT等。
    千万别告诉我去一个一个判断控件的类名称。

解决方案 »

  1.   

    判断窗体控件是不是tedit,如果是判断是否为空,是则提示之,不知道你要的是不是这样的
    var 
      i : Integer;
    begin
    for i := 0 to ComponentCount - 1 do
    begin
            if Components[i] is TEdit then
            begin
                if (Components[i] as TEdit).Text= '' then
                begin
                    ShowMessage((Components[i] as TEdit).Name +'is Null!')
                    Continue;
                end;
            end;
    end;
    end;
      

  2.   

    唉,我又一个非常好的例子。但是是cpp写的,看来不适合你。算了。
      

  3.   

    如果只是判断VCL控件的话,判断它是不是从TEDIT继承下来的就可以了.
    if control1 is TEDIT then
      

  4.   

    搂住是判断自己工程中的窗体还是已经打开的应用程序的窗体? 其他应用程序的窗体可以使这这末做
     hForm := FindWindowEx(0, 0, nil,'窗体名');
      if hForm <> 0 then
      begin
        hEdit := FindWindowEx(hForm, 0, 'TEdit', nil);
        if hEdit <> 0 then
             找不到也就不是TEdit 就为空现在是只能找到 不能判断焦点是不是在上边 判断焦点一般的api好像解决不了问题因为它是消息机制的 你可能要用钩子
      

  5.   

    楼上兄弟只是按类名找,也就是说只能找到DELPHI做的程序中的TEDIT类啊,不行吧。
      

  6.   

    首先感谢各位兄弟的建议!
    我可能是还没有说明确我的用意.我是想直接根据焦点所在控件的句柄判断出其是不是具有文本输入的特性,如TEDIT,TMEMO等.若根据类名一个一个判断的话,若要不是DELPHI的标准类,或是对其的继承,那就没有作用了.
      

  7.   

    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;
      

  8.   

    你试一下下面的吧,不一定都行。
    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的返回值为零。
      

  9.   

    Xleep(笑尽天下事) 的方法不错,可以试试
      

  10.   

    Xleep(笑尽天下事) 的方法好啊,简洁方便
      

  11.   

    Xleep(笑尽天下事) 的方法不一定行呀
    如果输入VCL的 ReadOnly =True的话
    SendMessage的返回结果是0,判断结果就错了呀