我用delphi开发一个小程序,通过双击树节点调用某个exe应用程序,有时桌面窗体比较多,如,窗体A,B,C,但此时最前端的窗体是C,请教当我在此双击树节点,想调用A窗体,如果A不是最前端的,请教怎么让A窗体返回到最前端?

解决方案 »

  1.   

    1。让C最小化
    SendMessage(C.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0); 
    2。让A在最前
    BringWindowToTop(A.Handle);
    SetForeGroundWindow(A.Handle);
    SetWindowPos(A.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE); 
    上面三个功能一样,你选择一个自己合适的即可,另外如果A窗体是最小化的用
    SendMessage(A.Handle,WM_SYSCOMMAND,SC_RESTORE,0); 恢复窗口
      

  2.   

    伴水大牛的代码,一直在用function ForceForegroundWindow( // 将窗体设置为最前端,并获得焦点
      mHandle: THandle // 窗体句柄
    ): Boolean; // 返回设置是否成功
    var
      vHandle: THandle;
      vResult: Longword;
    begin
      if IsIconic(mHandle) then
        SendMessageTimeOut(mHandle, WM_SYSCOMMAND, SC_RESTORE, 0, SMTO_NORMAL,
          1000, vResult)
      else                                                                          //2006-10-13 ZswangY37 No.1
      begin
        vHandle := GetWindow(mHandle, GW_OWNER);
        if IsIconic(vHandle) then
          SendMessageTimeOut(vHandle, WM_SYSCOMMAND, SC_RESTORE, 0, SMTO_NORMAL,
            1000, vResult);
      end;
      vHandle := GetForegroundWindow;
      AttachThreadInput(GetWindowThreadProcessId(vHandle, nil),
        GetCurrentThreadId, True);
      Result := SetForegroundWindow(mHandle);
      AttachThreadInput(GetWindowThreadProcessId(vHandle, nil),
        GetCurrentThreadId, False);
    end; { ForceForegroundWindow }