• --:)欢迎访问锋网源码(:--
  • 首页
  • RSS订阅
  • 常用软件
  • 网页模板
  • 网站运作
  • 锋网学院
  • 繁體中文

  • 学院首页
  • 新闻资讯
  • 网站运营
  • 网站开发
  • 美工设计
  • 数据库类
  • 服务器类
  • 网络应用
  • 操作系统
  • 软件教学
编程开发   认证考试   网络安全   文章搜索: 高级搜索
会员登录/控制面版 您的位置: 学院首页 >> 编程开发 >> Delphi >> 文章内容
 

精彩推荐

 
 

本类推荐文章

 
 

本类阅读排行

  • 用Delphi编写DelTree程序
  • 远程控制篇:模拟按键
  • DELPHI中动态调用dll
  • 远程控制篇:通过IP地址得到..
  • 直接访问WebBrowser控件中的..
  • 在delphi把字符串分割成一维..
  • dbgrideh如何实现点击标题排..
  • INI文件的读写
  • Delphi字符串函数大全
  • 远程控制篇:服务端程序的隐..
  • 在delphi字符中包括单引号('..
  • 用Delphi制作中国式报表
  • 用DEPHI为应用软件建立注册机..
  • 怎样让程序延时
  • 创建Borland风格的漂浮式窗口..
  • 压缩图像文件并转换成BMP格式..
  • 一个四舍五入函数
  • 从当前的浏览器取得当前URL
  • fileStream
  • 获得Memo、RichEdit的光标位..
 
 

创建Borland风格的漂浮式窗口

  • 日期:2007-10-21     人气:     出处:     作者:
  • 字体大小:
  • 小
  • 中
  • 大

创建Borland风格的漂浮式窗口

 

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

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

现在假设当前项目的主窗口(frmMain)中含有一个名为cbMain的CoolBar(一般主窗口只包含菜单和工具条)。将TfrmMain的Autosize属性设为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); 这是由于Tform是VCL控件,在此消息处理句柄中不可以直接引用Tform中的成员。

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

相关文章
  • QQ帮你突破网吧硬盘访问限制
  • 局域网内盗用IP的安全问题
  • 邮件安全攻略:只要糖衣不要炮弹
  • 手机病毒的分类及其防范措施
  • 如何防止黒客远程盗取QQ密码
  • 始料未及,谁在控制电脑重新启动
  • 网络常见木马的手工清除方法
  • 魔高一尺 道高一丈
  • 防火墙日志记录让蠕虫病毒无处可逃
  • 提防他人动用电脑另有妙招
相关软件

  • 网友评论:
  • 查看所有评论
  • 我要发表评论
 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 加入收藏 | 帮助中心 |

Copyright © 2006-2007 fwvv.net  程序支持:木翼  皖ICP备06004916号