我有一個主程序,啟動後1分鐘將會用showmodal彈出一個dialog。我先把這個主程序最小化,然後打開其它程序,例如IE,一分鐘後將會自動彈出dialog,我想這個dialog在所有窗口前顯示并獲得焦點,我查了一些代碼,都一一試過,但還是不行。以下是我的代碼,在 dialog 的 onshow 事件中,我加入SetForegroundWindow( Self.Handle ); // 將本窗體移到前景
SetWindowPos( Self.Handle, HWND_TOPMOST, Self.Left, Self.Top, Self.Width, Self.Height, SWP_NOMOVE or SWP_NOSIZE); // 把它移到最前
SetFocus( Self.Handle ); // 使它獲得焦點這段代碼可以將dialog移到最前面,但還是獲取不了焦點,不知如何解決

解决方案 »

  1.   

    你那代码不行,看这一段
    var 
      hForegdWnd: THandle; 
      dwCurID: THandle; 
      dwForeID: THandle; 
    begin 
      hForegdWnd := GetForegroundWindow(); 
      if hForegdWnd  <> Handle then 
      begin 
        if IsIconic(Application.Handle) then 
          Application.Restore; 
        dwCurID := GetCurrentThreadId(); 
        dwForeID := GetWindowThreadProcessId(hForegdWnd, nil); 
        AttachThreadInput(dwCurID, dwForeID, TRUE); 
        SetForegroundWindow(Handle); 
        AttachThreadInput(dwCurID, dwForeID, FALSE); 
      end; 
    end;