本人想做个类似软键盘的东东,但遇到个头痛的问题
就是当我在我的程序窗体上点击后,目标窗体(不一定是自己的程序窗体)就会失去焦点
导致目标窗体无当接收到输入.我在自己的程序里加了
procedure Ttest.WMActivate(var Message: TMessage);
begin
  SetActiveWindow(message.lParam);
end;
之后可以暂解決,其實就是根據消息,如果自己的窗體被激活,就把焦點設置迴目標窗體
這樣並不能真正解決問題,因為有些目標一旦重新獲得焦點就會讓內容全部選中,
其實,后面那个情况不多,而且我也可以用API取得它的SelStart,重新设置它的输入光标位置,但我想要的是:能不能让用户点我的窗体时,目标窗体不失去焦点,
而又可以点击我窗体上的SpeedButton请各位高手们指点,分不够就说.在线=

解决方案 »

  1.   

    每点一下SpeedButton都将焦点重新设定到目标窗口:)
      

  2.   

    procedure Ttest.WMActivate(var Message: TMessage);
    begin
      SetActiveWindow(message.lParam);
    end;
    这个我已经写好了,但我就是不想这样做,这样做对那些重新得到焦点就全选的目标没用请回答的朋友看清内容。
      

  3.   

    >>如果自己的窗體被激活,就把焦點設置迴目標窗體
    你的做法错了,有正规的方法解决,
    我必须找下,才给你答复
      

  4.   

    用 
    HWND CreateWindowEx(          DWORD dwExStyle,
        LPCTSTR lpClassName,
        LPCTSTR lpWindowName,
        DWORD dwStyle,
        int x,
        int y,
        int nWidth,
        int nHeight,
        HWND hWndParent,
        HMENU hMenu,
        HINSTANCE hInstance,
        LPVOID lpParam
    );
    加入 WS_EX_NOACTIVATE 这个参数看看
      

  5.   

    截获WM_MOUSEACTIVATE消息并返回MA_NOACTIVATE
      

  6.   

    to aiirii(ari-http://spaces.msn.com/members/aiirii/) 
    你的办法可行,但我在用了 Self.Show 或 Self.Hide 后就不管用了。有什么方法解决。
      

  7.   

    Self.Show 和 Self.Hide 的问题解决了,
    新问题出现了,右键弹出菜单之后目标焦点不变,选中菜单点击后焦点就变了,
    用同样的办法能解决吗?
      

  8.   

    http://www.chinaitpower.com/A/2002-09-27/36226.html
      

  9.   

    其实,你是要做个输入法类似的窗口,那你应该找找输入法相关的api实现,一些消息的处理,和普通的程序的不同
      

  10.   

    to aiirii(ari-http://spaces.msn.com/members/aiirii/) 
    你说的对,确实是像个输入法窗体,但我就是找不到相关的资料,苦啊!!!我改了窗体的样式后,可以不被激活了,但一用下面的代码就又没用了:
    AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessId(GetForegroundWindow(), nil), True);
    FFocusHandle := GetFocus;
    AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessId(GetForegroundWindow(), nil), False);用了之后焦点就变了。烦燥中…………
      

  11.   

    to aiirii(ari-http://spaces.msn.com/members/aiirii/) 
    晕倒,那个被盗的人是你啊???