创建Borland风格的漂浮式窗口

 

创建Borland风格的漂浮式窗口

 

使用过Borland 系列开发工具产品(Delphi, C++Builder, Jbuilder)的朋友一定注意到Borland产品界面风格的特点,即屏弃了MDI(多文档界面),而采用分离的多窗口,特别是主窗口浮动于屏幕的最上方,当最大化时主窗口并不占满整个客户区,而是仍处在屏幕上方,使用户可以有更多的空间使用。那么如何才能实现类似于主窗口这样的效果呢?现在就在此介绍一下用Delphi实现的方法。

要实现上面所说的主窗口的效果,必须要做到三点:1、程序启动时使主窗口位于屏幕的最上方,且宽度充满整个屏幕;2、当用户拖动停靠工具条(Dockable ToolBar/CoolBar)时,窗口能自动调整大小;3、当用户点击最大化按钮时,窗口保持在屏幕最上方,且大小保持不变。

现在假设当前项目的主窗口(frmMain)中含有一个名为cbMainCoolBar(一般主窗口只包含菜单和工具条)。将TfrmMainAutosize属性设为False

具体步骤如下:

1、 为主窗口添加OnCreate事件,代码如下:

procedure TfrmMain.FormCreate(Sender: TObject);

begin

 Top:=0; //设定主窗口左上角到屏幕左上角

 Left:=0; //

 Width:=Screen.Width; //设定主窗口宽度为屏幕宽度

end;

Screen为系统预定义的类实例,对应与系统桌面,从其中可获取屏幕的一些参数。

 

2、 TfrmMain的定义部分添加私有成员:

private

   H:integer ;

为主窗口添加OnResize事件代码如下

procedure TfrmMain.FormResize(Sender: TObject);

begin

 ClientHeight:=cbMain.Height; //将窗口客户区高度设为CoolBar的高度

 H:=Height;     //将当前的窗口高度保存在变量H

end;

 

由于窗口初始化时或点击最大化按钮时都会触发OnResize事件,因此可以保证窗口高度始终正确。

 

3、 这是最关键的一步,我们必须改变Windows默认的最大化例程,来控制最大化后的窗口大小和位置。因此,我们重新映射响应WM_ GETMINMAXINFO的句柄。WM_GETMINMAXINFO消息在lparam中返回一个指向MINMAXINFO结构的指针,MINMAXINFO的结构如下:

tagMINMAXINFO =record 

    ptReserved : TPoint;                //系统保留

    ptMaxSize : TPoint;          //最大化后的大小

    ptMaxPosition : TPoint;                 //最大化后的位置

    ptMinTrackSize : TPoint;          //窗口的最小尺寸

    ptMaxTrackSize : TPoint;          //窗口的最大尺寸

End;

                     MINMAXINFO : tagMINMAXINFO;

 

针对我们的目的,只需要ptMaxSize,ptMaxPosition两个成员就够了。Windows在最大化窗口通过调用这个结构作为参数,来取代默认的最大化参数。

具体操作如下:

TfrmMain的定义部分添加私有成员定义:

   private

procedure FormMaximum(var Msg:TMessage);Message WM_GETMINMAXINFO;

以定义WM_GETMINMAXINFO的消息处理句柄。

Implementation部分添加实现代码:

procedure TfrmMain.FormMaximum(var Msg:TMessage);

var

    lpmmi:^tagMINMAXINFO;

begin

 lpmmi:=Pointer(Msg.LParam); //获取指向tagMINMAXINFO的指针

 lpmmi^.ptMaxSize:=Point(Screen.width,H); //设定窗口的长宽

 lpmmi^.ptMaxPosition:=Point(0,0); //设定窗口左上角的位置

end;

有一点要注意:lpmmi^.ptMaxSize:=Point(Screen.width,H);一句不能写成lpmmi^.ptMaxSize:=Point(Screen.width,frmMain.Height); 这是由于TformVCL控件,在此消息处理句柄中不可以直接引用Tform中的成员。

到此,大功告成了!其他一些细节,如是否允许用户改变窗口大小,是否可以拖动窗口,都可以通过简单调节而实现,就全看你的需要了。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
<p style="color:#666666;"> <span style="font-size:14px;">本门课程重实战,将基础知识拆解到项目里,让你在项目情境里学知识。</span> </p> <p style="color:#666666;"> <span style="font-size:14px;">这样学习方能让你保持兴趣、充满动力,时刻知道学东西能用在哪、能怎么用。</span> </p> <p style="color:#666666;"> <span style="font-size:14px;">平时不明白知识点,放在项目里去理解就恍然大悟了。</span> </p> <p style="color:#666666;"> <span></span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="color:#FF0000;font-size:14px;"><strong>一、融汇贯通</strong></span> </p> <p style="color:#666666;"> <span style="font-size:14px;">本视频采用了前后端分离开发模,前端使用Vue.js+Element UI实现了Web页面呈现,后端使用Python Django框架实现了数据访问接口,前端通过Axios访问后端接口获得数据。在学习完本章节后,真正理解前后端各自承担工作。</span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="color:#FF0000;font-size:14px;"><strong>二、贴近实战</strong></span> </p> <p style="color:#666666;"> <span style="font-size:14px;">本系列课程为练手项目实战:学生管理系统v4.0开发,项目包含了如下几个内容:项目总体介绍、基本功能演示、Vuejs初始化、Element UI使用、在Django中实现针对数据增删改查接口、在Vuejs中实现前端增删改查调用、实现文件上传、实现表格分页、实现导出数据到Excel、实现通过Excel导入数据、实现针对表格批量化操作等等,所有功能都通过演示完成、贴近了实战</span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="color:#FF0000;font-size:14px;"><strong>三、课程亮点</strong></span> </p> <p style="color:#666666;"> <span style="font-size:14px;">在本案例中,最大亮点在于前后端做了分离,真正理解前后端各自承担工作。前端如何和后端交互</span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="color:#FF0000;font-size:14px;"><strong>适合人群:</strong></span> </p> <p style="color:#666666;"> <span style="font-size:14px;">1、有Python语言基础、web前端基础,想要深入学习Python Web框架朋友;</span> </p> <p style="color:#666666;"> <span style="font-size:14px;">2、有Django基础,但是想学习企业级项目实战朋友;</span> </p> <p style="color:#666666;"> <span style="font-size:14px;">3、有MySQL数据库基础朋友</span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="font-size:14px;"><img alt="" src="https://img-bss.csdnimg.cn/202009070752197496.png" /><br /> </span> </p> <p style="color:#666666;"> <span style="font-size:14px;"><br /> </span> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值