標籤:
先看吧。
最近做Web,發現網頁三劍客總是會留下一些“最近開啟項目”這樣的痕迹在軟體的介面上,心裡總是覺得很不舒服,於是萌發了寫一個清除器的念頭。說動手就動手吧!
DW、FW、Fl 的這些痕迹都是存在於註冊表中的,簡單原理就是刪除註冊表裡的值就ok了,這些應該沒有什麼好說的,所以我就不說了。今天我們主要來講一下無標題列的表單拖動問題和使用圖片來簡單的美化介面的問題。
可能有很多人都認為無標題列表單的移動是非常簡單的,網上很多的朋友也給出了一些方法,大多說人給出的方法是在表單的privite部分建立一個私用程序 procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;就像這樣的過程,這個原理就是發送訊息給系統,欺騙滑鼠點擊的地方(也就是表單的客戶區)是表單的標題列,然而經過我的測試如果表單上有其他的控制項,比如一個TButton,那麼TButton的事件是不會被觸發的,不論採用哪種方式都是難以觸發的,最少我的測試如此。所以此思路不可以。還有的人給出了使用MouseMove等一系列事件來進行表單的Top和Left進行運算的。
上面第一種該方法不適合,人比較懶不想打太多的代碼,所以第二種方法也就不適合了。
好了,不說廢話了,我們一步一步來吧:
1。首先建一個表單,將BorderStyle屬性設定為bsSingle
2。放一個TImage,載入一張圖片,如
3。用PS開啟TImage中載入的圖片,來擷取顏色
4。然後雙擊Form1下的Color屬性值,在彈出的顏色對話方塊中點擊“規定自訂色彩”,然後在紅、綠、藍後面的方框裡填寫上PS的拾色器裡面的R、G、B後面對應的數值,如:
5。點擊“添加到自訂色彩”,再在“自訂色彩”的方框上點擊自己定義好的顏色,這時自訂的顏色會出現了一個一個黑色的邊框,然後確定。這樣,表單的簡單美化就完成了。
6。選擇TImage組件,選擇Events選項卡,選擇OnMouseDown事件,為其添加代碼如下:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);
end;
這裡我解釋一下:
ReleaseCapture 釋放滑鼠的捕獲狀態
Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0); 發送滑鼠左鍵擷取到的狀態為表單的標題列的系統訊息,其達到欺騙作業系統所點擊的地方是表單的標題列。
這樣一個既可以拖動又可以響應其他組件的無標題列表單就完成了。
如果你還有耐心的話,也可以繼續為表單添加一些特效,比如表單時圓角的、像MSN那樣慢慢滾動上來的訊息框一樣讓你的表單滾動上來,這裡我就不了,直接給出代碼:
procedure TForm1.FormCreate(Sender: TObject);
var
Hnd: THandle;
begin
Hnd := CreateRoundRectRGN(0, 0, Width, Height, 15, 15);
SetWindowRGN(Handle, Hnd, True);
AnimateWindow(Handle, 1000, AW_SLIDE + AW_VER_NEGATIVE);
end;
【說明】1。先定義一個控制代碼變數Hnd;2。使用Win API函數CreateRoundRectRGN建立圓角矩形地區;3。使用API函數SetWindowRGN設定表單為圓角的;4。AnimateWindow這個函數用來設定表單的出場方式(這裡的表述可能不太精確,還請見諒)這個函數有很多參數的,具體自己查吧。
最後我們再來編寫程式的關閉時的漸隱效果,還是使用AnimateWindow函數來實現的,不過這個函數只是讓表單隱藏了,並沒有真正的關閉,所以你還得使用一句關閉代碼來關閉表單,好了不費話了,直接給代碼了:
AnimateWindow(Handle, 2000, AW_SLIDE + AW_BLEND + AW_HIDE);
Application.Terminate;
到此這篇文章就結束了,對於瞭解Win API 函數的高手來說很簡單了,請不要見笑,謝謝!
http://www.lsworks.net/article/53.html
無標題表單的移動及其簡單美化