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

时间: 2024-10-07 07:04:19

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

一、Ubuntu Server上安装Matlab,利用X11和Putty输出窗口到Windows桌面(环境选择)

最近有点迷上Server版的Ubuntu,内存占用实在是太低了,系统稳定.反应快.这种环境下,运行Matlab应该是最完美的. 网上随便搜搜也会发现,Linux的Matlab要普遍比Windows的快,毕竟单纯从系统环境看,后者是要臃肿得多.我个人还挺喜欢Windows 8的,但经老婆测试发现,Windows 8下Matlab速度明显比Windows 7慢,有时候i7处理器甚至跑不过年迈的Core2--由此可见,系统对Matlab的影响是十分大的. 看电影也都知道了,高阶运算/并行运算都是基于L

delphi 遍历窗口

function EnumWindowsProc(hwnd: HWND; lparam: LPARAM): Boolean; stdcall; var buf: array[Byte] of Char; begin Result:= True; GetWindowText(hwnd, buf, SizeOf(buf)); Form1.Memo1.Lines.Add(buf); Form1.Memo1.Lines.Add(IntToStr(hwnd)); end; procedure TForm1

Delphi 悬浮窗口、浮动窗口的实现

源:Delphi 悬浮窗口.浮动窗口的实现 浮动窗体的实现 http://blog.tianya.cn/blogger/post_show.asp?BlogID=68097&PostID=806089 需要一个这样的窗体:a:没有标题栏; b:可以改变大小; c:不在任务栏上显示图标; d:如果不是主窗体,它的最小化不受主窗体的限制; e:在最顶端显示 处理:a:不在任务栏出现的,只要设置窗体的属性为ToolWindow就可以了.b:要想使窗体脱离主窗体的限制,必须修改它的ParentWnd,使

在Delphi的窗口单元中,如何调用其它窗口的单元。

在Delphi的窗口单元中,如何调用其它窗口的单元.(转载) . 在Delphi中简单的调用单元 unit实例 一,新建一个工程文件,默认的文件是unit1,代码如下:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton;

Android 真机 程序安装后手机桌面或应用/窗口小部件视图里不显示程序图标

本文主要介绍android应用程序安装后图标不显示的几个可能原因. 自己写的程序突然安装后图标不见了,在应用程序安装中能找到,但是桌面上就是没有图标,启动只能从最近列表中其中..一般这种情况只会在服务类程序和测试程序中出现,因为不需要图标. 手机是中兴手机,在试过更改Android api版本.图标图片等方法后依然无果,又试了修改程序名称,问题解决.原名称是voter,被中兴和谐了...和谐了...谐了...了....又试了习大大的名字,依然不显示图标....欲哭无泪.... 附带网络上其他可能

控制桌面的图标显示

如何控制桌面的图标显示 通常很多用户还是习惯于在桌面上保留“我的文档”及其他经常访问文件夹快捷方式以及经常使用的程序快捷方式.如果你想在桌面上显示“我的电脑”.“我的文档”.“网上邻居”.IE浏览器的快捷方式图标,只需进行如下操作 :在桌面单击鼠标右键,在右键菜单中选择“属性”命令,在打开的“显示 属性”对话框中选择“桌面”选项卡,单击“自定义桌面”按钮,打开“桌面”项目对话框.在“常规”选项卡的“桌面图标”栏中选择所需项目的复选框,然后单击“确定”返回上一级对话框,再单击“应用”按钮即可. 如

dephi XE - 实现主窗口在任务栏上不显示 (转)

方法一 以前的代码不能用.貌似在Delphi2010后就开始不行了,搜索了一下,得到办法: 1 修改工程文件添加一句:Application.MainFormOnTaskbar := False; 2 在主窗体的 OnShow 事件中写下 varStyle: Integer;beginStyle := GetWindowLong(Handle, GWL_EXSTYLE);SetWindowLong(Handle, GWL_EXSTYLE, Style and (not WS_EX_APPWIND

窗体的Alpha通道透明色支持(一旦 Form 被定义为利用 LayeredWindow ,窗口的绘图不再响应沿用多年的 WM_Paint 消息)

参考: http://www.delphibbs.com/delphibbs/dispq.asp?lid=2190768 Windows 2000后,为了支持类似MAC界面的Alpha通道混合效果,提供了GDI+,提供了很多的界面功能函数,可以实现很好的界面效果.例如可以使用UpdateLayeredWindow来实现窗体的颜色透明.但是一旦 Form 被定义为利用 LayeredWindow ,窗口的绘图不再响应沿用多年的 WM_Paint 消息. UpdateLayeredWindow(hw

在Delphi中处理数据库日期型字段的显示与输入

delphi进行数据库设计时,不可避免的会涉及到日期型字段的输入问题.不过与Microsoft的Access 97中文版等相比,Delphi本身提供的日期型字段的显示和输入方式并不适合中国人的习惯.因此对于日期型字段的处理,大家提出了不少解决方法,但是处理结果在显示和输入上并不统一,例如显示时可以实现“yyyy年mm月dd日”的格式,但是在输入时还是要按照国外的习惯用“yyyy-mm-dd”的形式进行输入:而使用TdateTimePicker进行选择输入总嫌麻烦:有些方法还要修改系统的一些设置属