Delphi实现窗口一直在桌面工作区内显示(重写WM_WINDOWPOSCHANGING消息)

有的时候我们要实现一个悬浮窗口,并使该窗口一直显示在桌面的工作区内。即整个窗口要一直显示在屏幕上,不能超出屏幕的上下左右边缘。此功能的实现也不难,我们需要自己写代码来响应窗口的WM_WINDOWPOSCHANGING消息,话不多说,详细代码如下供参考:

新建一个工程,并把下面代码拷贝到工程中,运行……

 
 
 
 
 

Delphi/Pascal

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type
  TForm1 = class(TForm)
  private
    procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
  inherited;
  if (Message.WindowPos.y + Message.WindowPos.cy  > Screen.WorkAreaHeight) then begin
    Message.WindowPos.Y := Screen.WorkAreaHeight - Height ;
  end;
  if (Message.WindowPos.x + Message.WindowPos.cx > Screen.WorkAreaWidth) then begin
    Message.WindowPos.X := Screen.WorkAreaWidth - Width ;
  end;
 
  if Message.WindowPos.x < 0 then
    Message.WindowPos.x := 0;
 
  if Message.WindowPos.y < 0 then
    Message.WindowPos.y := 0;
end;
 
end.

http://bcoder.com/delphi/make-the-window-always-shows-in-desktop-workarea-in-delphi

上一篇:int 和 Integer 有什么区别


下一篇:Deep Learning系统实训之三:卷积神经网络