• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Delphi窗体置前(设置窗体靠前/激活)的几个方法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Delphi 窗体置前(设置窗体靠前/激活)的几个方法

1、方法一:

function BringWindowToTopEx(hWnd: HWND): Boolean;
begin
  if IsIconic(hWnd) then
    ShowWindow(hWnd, SW_RESTORE);
  if GetForegroundWindow <> hWnd then
    SetForegroundWindow(hWnd); //enabled
//BringWindowToTop(hWnd);//not enabled
//ForceForegroundWindow(hWnd);//enabled
{SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);//enabled}
//SwitchToThisWindow(hWnd, True);//enabled
  Result := GetForegroundWindow = hWnd;
end;

function BringWindowToTopMost(hWnd: HWND; bTopMost: Boolean): Boolean;
begin
  if IsIconic(hWnd) then
    ShowWindow(hWnd, SW_RESTORE);
  if bTopMost then
    SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE)
  else
    SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
end;

function BringWindowToTopXY(hWnd: HWND; X, Y: Integer; hWndInsertAfter: HWND): Boolean;
begin
  Result := BringWindowToTopEx(hWnd);
  Result := SetWindowPos(hWnd, hWndInsertAfter, X, Y, 0, 0, SWP_NOSIZE) and Result;
end;

  

2、方法二:

// 窗体置顶
procedure SetXwForegroundWindow(AHandle: Thandle);
var
  hFgWin: Thandle;
  hFgThread: Thandle;
begin

  ShowWindow(AHandle, SW_NORMAL);

  hFgWin := GetForegroundWindow;
  hFgThread := GetWindowThreadProcessID(hFgWin, nil);

  if AttachThreadInput(GetCurrentThreadID, hFgThread, true) then
  begin
    SetForegroundWindow(AHandle);
    AttachThreadInput(GetCurrentThreadID, hFgThread, false);
  end
  else
    SetForegroundWindow(AHandle);

end;

// 激活窗体
function SetSysFocus(AHandle: Thandle): boolean;
var
  hThreadId: Thandle;
  hFgThreadId: Thandle;
begin
  result := false;
  if not IsWindow(AHandle) then
    exit;
  hThreadId := GetWindowThreadProcessID(AHandle, nil);
  hFgThreadId := GetWindowThreadProcessID(GetForegroundWindow, nil);
  if AttachThreadInput(hThreadId, hFgThreadId, true) then
  begin
    SetFocus(AHandle);
    AttachThreadInput(hThreadId, hFgThreadId, false);
  end
  else
    SetFocus(AHandle);
  result := true;
end;

  

3、方法三:

  窗体函数 WinAPI SwitchToThisWindow

  https://www.cnblogs.com/guorongtao/p/13440024.html

 

 

 

创建时间:2020.08.05  更新时间:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi获取网页所有链接并访问赚取金币发布时间:2022-07-18
下一篇:
Delphi 继承类的构造函数和析构函数的构建顺序发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap