国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

創建Borland風格的漂浮式窗口

2019-11-18 18:58:34
字體:
來源:轉載
供稿:網友

創建Borland風格的漂浮式窗口

 

使用過Borland 系列開發工具產品(Delphi, C++Builder, Jbuilder)的朋友一定注意到Borland產品界面風格的特點,即屏棄了MDI(多文檔界面),而采用分離的多窗口,特別是主窗口浮動于屏幕的最上方,當最大化時主窗口并不占滿整個客戶區,而是仍處在屏幕上方,使用戶可以有更多的空間使用。那么如何才能實現類似于主窗口這樣的效果呢?現在就在此介紹一下用Delphi實現的方法。

要實現上面所說的主窗口的效果,必須要做到三點:1、程序啟動時使主窗口位于屏幕的最上方,且寬度充滿整個屏幕;2、當用戶拖動??抗ぞ邨l(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中的成員。

到此,大功告成了!其他一些細節,如是否允許用戶改變窗口大小,是否可以拖動窗口,都可以通過簡單調節而實現,就全看你的需要了。


上一篇:遠程控制篇:服務端程序關機時的處理

下一篇:裝扮工具提示條

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 甘南县| 湖州市| 佛坪县| 邵武市| 凉山| 兰州市| 峨山| 紫阳县| 万年县| 芦溪县| 满洲里市| 宝山区| 多伦县| 龙山县| 苗栗县| 樟树市| 通海县| 舟曲县| 广西| 青河县| 滦南县| 林西县| 来安县| 屏南县| 交城县| 曲水县| 永城市| 盘山县| 平安县| 固镇县| 股票| 仪陇县| 塔河县| 清流县| 临沧市| 黄平县| 台东县| 静宁县| 丽江市| 石首市| 宝山区|