使用Windows 時,在桌面上點擊右鍵,從彈出的快捷菜單中選擇“屬性”,然後可以在彈出的對話框中選擇設置合適的桌面背景。這樣的功能是如何實現的呢?通過本例,你將掌握自定義桌面的方法,本例程序的運行效果如圖3-6 所示。在驅動器列表中選擇合適的盤符,然後選擇該驅動器目錄下的文件夾,該文件夾中的BMP 格式文件將在右邊列出,點擊右邊BMP 文件列表中的文件名,可以將該BMP 文件設置為桌面。
程序還可以實現抓取當前屏幕的功能,用鼠標點擊“抓取屏幕”按鈕,可以將當前屏幕抓為BMP 格式圖片,並在窗體的右下角顯示出來。用鼠標點擊“退出”按鈕,可以退出該程序。
程序主要使用BitBtn 控件、PaintBox 控件、DriveComboBox 控件、DirectoryListBox 控件和FileListBox 控件等來綜合實現。
設計思路及步驟:實現本程序需要解決兩個問題:設置桌面和抓取屏幕。
要實現設置桌面功能,需要利用一個有關注冊表操作的函數SystemParametersInfo(),它可以將選中的圖片作為Windows 新的桌面圖案。要實現抓取屏幕功能,需要運用到相關Windows API 編程,所以要用到句柄:Handle。首先創建一個Canvas 類,接著將當前實例句柄賦值給Windows,將當前的Windows 圖案復制到指定PaintBox 控件中。
1.新建工程:
(1)啟動Delphi 6.0 程序。選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Application 選項,則出現新建工程的Form1 窗口。
(2)選擇“文件”菜單下的“工程另存為”命令,彈出Save Unit1 As 對話框。在“保存在”列表框中選擇需要存放該窗口文件所在的目錄名;在“文件名”編輯框中填寫文件名,這裡填寫“Unit1”,點擊“保存”按鈕,保存上面的選項。
(3)執行上一步後,將彈出“工程另存為”對話框。在“保存在”列表框中選擇需要存放該工程的目錄名,最好和第(2)步選取相同的目錄;在“文件名”編輯框中填寫保存處理該工程的源代碼的文件名,這裡填寫“Project1”,點擊“保存”按鈕,保存上面的選項。
2.修改窗口:
(1)激活Form1 窗口,在“屬性”面板中設置該窗體的Caption 屬性為“設置桌面工具”,Color 屬性設置為“clBtnFace”。
(2)選擇Win 3.1 頁上的DriveComboBox 選項,在窗體中添加DriveComboBox 控件,調整其合適的大小和位置,在“屬性”面板中設置該控件的Name 屬性為DriveComboBox1。
(3)仿照步驟(2),在窗體中合適的位置添加DirectoryListBox 控件和FileListBox控件,在“屬性”面板中設置該控件的Name 屬性分別為DirectoryListBox1 和FileListBox1。
(4)選擇“系統”頁上的PaintBox 選項,在窗體中添加PaintBox 控件,調整其合適的大小和位置,在“屬性”面板中設置該控件的Name 屬性為PaintBox1。
(5)選擇“附加”頁上的BitBtn 選項,在窗體中添加兩個BitBtn 控件,調整其合適的大小和位置。在“屬性”面板上設置該控件的Caption 屬性分別為“退出”和“抓取屏幕”,設置其Name 屬性分別為“BitBtn1”和“BitBtn2”。
(6)選中BitBtn 控件,在“屬性”面板上Glyph 屬性右邊的文本框中點擊打開“圖畫編輯器”對話框,在對話框中點擊“加載”按鈕,從彈出的對話框中選擇合適的BMP 格式文件作為該控件的圖標,點擊“確定”按鈕確定。
相關的代碼分析:
(1)要實現設置桌面功能,需要利用一個有關注冊表操作的函數SystemParameTersInfo(),它可以將選中的圖片作為Windows 新的桌面圖案。代碼如下:
procedure TForm1.FileListBox1Click(Sender: TObject); begin SystemParameTersInfo(SPI_SETDESKWALLPAPER,0,pChar(FileListBox1.FileName), SPIF_UPDATEINIFILE);//將選中的圖片作為Windows 新的桌面圖案 end;
(2)要實現抓取屏幕功能,需要運用到相關Windows API 編程,所以要用到句柄:Handle。首先創建一個Canvas 類,接著將當前實例句柄賦值給Windows,將當前的Windows圖案復制到指定的PaintBox 控件中,最後釋放這個Canvas 類。代碼如下:
procedure TForm1.BitBtn1Click(Sender: TObject); var DeskTop : TCanvas ; //定義一個類 begin DeskTop := TCanvas.Create ; //創建一個TCanvas 類 try with DeskTop do Handle := GetWindowDC (GetDesktopWindow); //得到一個實例句柄 with PaintBox1.Canvas do CopyRect (Rect (0, 0, paintbox1.Width,paintbox1.Height),DeskTop,Rect (0, 0, screen.Width, screen.Height));//復制屏幕圖形到PaintBox 控件中 finally DeskTop.Free //釋放這個TCanvas 類 end; end;
(3)退出程序的運行只需使用Close 語句即可實現。本例中選擇“退出”BitBtn 控件的Kind 為“bkClose”,無需再為其添加任何代碼。
(4)在Windows 中,背景文件一般放置在C 盤的Windows 下。我們可以對該程序進行合適的改進,設置合適的初始路徑,使程序運行時的默認路徑是C:\WinDOS。再添加代碼,使得程序結束後,修改注冊表相關文件,把相應的圖片寫到Windows 的背景圖片目錄下。可以參考如下代碼:
with TiniFile.Create(’Wallpaper.ini ’) do //對注冊表文件進行操作 begin WriteString(’WallPaper ’, ’Path ’, FileListBox1.Directory); WriteInteger(’WallPaper ’, ’Index ’, FileListBox1.ItemIndex); WriteString(’WallPaper ’, ’ Date ’, Today);//將桌面信息寫入注冊表 Free; end;
完整的代碼文件:
vIEw source