Delphi下QQ窗體自動隱藏探索--3(轉帖)

--3導讀:
Data);
case AppBarData.uEdge of
ABE_TOP : begin
Cur_Top := AppBarData.rc.Bottom + 1;
Cur_Bottom := Screen.Height - 1;
end;
ABE_LEFT : begin
Cur_Top := 1;
Cur_Bottom := Screen.Height - 1;
end;
ABE_RIGHT : begin
Cur_Top := 1;
Cur_Bottom := Screen.Height - 1;
end;
ABE_BOTTOM : begin
Cur_Top := 1;
Cur_Bottom:=Screen.Height -
(AppBarData.rc.Bottom - AppBarData.
rc.Top) - 1;
end;
end;
end;
end; SetBarHeight用於計算矩形高度,計算後的結果通過Cur_Top和Cur_Bottom兩個全局變量傳遞給矩形的Top和Bottom參數。 在該過程中使用了一個Windows API 函數SHAppBarMessage。SHAppBarMessage 的作用是向系統傳遞系統工具欄消息,其函數原型爲: WINSHELLAPI UINT APIENTRY SHAppBarMessage(DWORD dwMessage,PAPPBARDATA pData); 其中dwMessage 是發送給系統的工具欄消息; pData是指向PAPPBARDATA結構的指針,PAPPBARDATA結構返回的內容依據發出的消息而定。 在過程中,我們首先傳遞ABM_GETSTATE參數去獲取系統工具欄的狀態是自動隱藏還是總在最前顯示。 然後我們再利用ABM_GETTASKBARPOS參數去獲取系統工具欄的位置,此時AppBarData的返回值中將會是系統工具欄的位置ABE_TOP 、ABE_LEFT、ABE_RIGHT、ABE_BOTTOM四者之一。最後我們利用系統工具欄自身的拖動矩形參數計算出工具欄的高度。 使用了SetBarHeight令窗體在屏幕兩邊隨系統工具欄的位置和高度的改動而發生相應的變化。當然,你也可以直接給Cur_Top和Cur_Bottom這兩個變量設置固定值以實現QQ效果。在測試中,Cur_Top可以是1,而Cur_Bottom 則是Screen.Width-30(Windows系統工
具欄的高度在默認情況下是30,這是不隨分辨率改變的)。 由於要使窗體在屏幕兩邊的高度與位置可以隨系統工具欄的位置和高度的改動而發生相應的變化,因此OnTimer事件中的處理也要相應的改動,主要是顯示窗體的時候要注意對窗體Top和Height屬性的設置必須跟隨與系統工具欄的位置和高度相協調,代碼如下: ..
if akLeft in FAnchors then
begin
Left := -Width + cOffset;
SetBarHeight;
Top := Cur_Top;
Height := Cur_Bottom;
end;
if akRight in FAnchors then
begin
Left := Screen.Width - cOffset;
SetBarHeight;
Top := Cur_Top;
Height := Cur_Bottom;
end;
.. 最後,爲了保證窗體在屏幕兩邊隱藏後高度保持不變,我們再添加一個WMSizing過程對WM_Sizing消息進行攔截處理。WMSizing過程的代碼如下: procedure TForm1.WMSizing(var Msg: TMessage);
begin
inherited;
if (akRight in FAnchors) then
begin
with PRect(Msg.LParam)^ do
begin
Left := Screen.Width - Width;
Top := Cur_Top;
Right := Screen.Width;
Bottom := Cur_Bottom
end;
end else if (akLeft in FAnchors) then
begin
with PRect(Msg.LParam)^ do
begin
Left := 0;
Top := Cur_Top;
Right := Width;
Bottom := Cur_Bottom;
end;
end;
end;
        WM_Sizing消息的語法結構與WM_MOVING消息相似,也包含了一個對矩形的指針。通過該指針我們可以對矩形的Top、Left、Right和Bottom參數進行設置,從而保證矩形高度不受用戶操作影響。 至此,一個窗體自動隱藏的程序就基本完成了,其實際效果已經和QQ相當接近了。運行效果如圖七至圖十所示。當然,從實際運行效果看還存在着一些小瑕疵,並且代碼中並沒有對窗體在隱藏後的寬度設置上進行處理,或者讀者可以考慮繼續進行完善此程序。
200572194135519.gif
        圖七 窗體向屏幕右方移動
200572194135731.gif
        圖八 窗體充滿屏幕右方
200572194135358.gif
        圖九 窗體位置隨工具欄位置變化
200572194135406.gif
        圖十 窗體離開屏幕右方恢復隱藏前大小
        本文轉自
http://www.cnsoft.cn/Exploiture/Programme/Delphi/200507/4335_3.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章