zoukankan      html  css  js  c++  java
  • 解析Delphi 窗口置顶,及非主窗口置顶

    方法一:

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Form2.Show;
    Application.NormalizeTopMosts;
    SetWindowPos(Form2.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
    end;

    方法二:

    https://blog.csdn.net/xiaowei_sql/article/details/50829178?tdsourcetag=s_pcqq_aiomsg

    窗口置顶

    setwindowpos(self.handle,HWND_TOPMIOST,0,0,0,0,SWP_NOMOVE  or  SWP_NOSIZE);//窗口置顶

    setwindowpos(self.handle,HWND_NOTOPMIOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);//取消窗口置顶

    非主窗口置顶

    在Delphi中,非主窗体如何置顶
    SetWindowPos(Form1.Handle, HWND_TOPMIOST, Left, Top, Width, height, SWP_SHOWWINDOW)可以将窗口放在所有窗口的最前面,但是这仅对一个应用程序的主窗口有效,非主窗口只能在这个应用程序的内部被置前,但是其他应用程序的窗口仍然会盖住他。

      解决方法是将Form1的父窗口设为桌面,如:


    procedure TForm1.CreateParams(var Params: TCreateParams);


    begin
      inherited;
      with Params do
      begin
        WndParent := GetdesktopWindow(); 
      end;
    end;

    但是这样会在进程管理器中的应用程序中多出一个Form1,怎样才能不让出现这个Form1了,其实解决方法很简单的,只需要将Form1的caption属性设为空就可以:Form1.Caption := '';


    //下面这一种我使用过了,比较喜欢这种 ,很方便
    还有另外一种可以不用将Form1的父窗口设为桌面也可以置前,那就是在窗体创建置前调用
    Application.NormalizeTopMosts;
    然后再调用SetWindowPos也可以实现将窗口置前的效果 
    ---------------------
    作者:CherryDuth
    来源:CSDN
    原文:https://blog.csdn.net/xiaowei_sql/article/details/50829178
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    MySQL:批量修改表的排序规则
    Python黑客编程3网络数据监听和过滤
    springboot redis 项目实战 完整篇
    C#读取U盘序列号
    AS3,ReferenceError: Error #1056: 无法为 ×× 创建属性 ×××。
    知道挖掘机如何从货车上下来吗?
    一次进销存软件架构的实践(二)——业务外观层设计
    重构你的软件企业
    遇到了火狐扩展全部丢失的问题
    分布式系统设计原理与方案
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/10194022.html
Copyright © 2011-2022 走看看