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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    多线程单例模式之立即加载(饿汉模式)
    多线程单例模式之延迟加载(懒汉模式)
    java多线程之ThreadLocal
    java多线程的字符流与字节流
    java多线程生产者消费者
    深入理解多线程三
    深入理解多线程二
    深入java多线程一
    mybatis学习三
    mybatis学习二
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/10194022.html
Copyright © 2011-2022 走看看