程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi設置桌面背景(更換壁紙)程序

Delphi設置桌面背景(更換壁紙)程序

編輯:Delphi

使用Windows 時,在桌面上點擊右鍵,從彈出的快捷菜單中選擇“屬性”,然後可以在彈出的對話框中選擇設置合適的桌面背景。這樣的功能是如何實現的呢?通過本例,你將掌握自定義桌面的方法,本例程序的運行效果如圖3-6 所示。在驅動器列表中選擇合適的盤符,然後選擇該驅動器目錄下的文件夾,該文件夾中的BMP 格式文件將在右邊列出,點擊右邊BMP 文件列表中的文件名,可以將該BMP 文件設置為桌面。

Delphi設置桌面背景

程序還可以實現抓取當前屏幕的功能,用鼠標點擊“抓取屏幕”按鈕,可以將當前屏幕抓為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 print? 01 unit Unit1; 02 interface 03 uses 04 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 05 Dialogs, StdCtrls, Buttons, FileCtrl, ExtCtrls; 06 type 07 TForm1 = class(TForm) 08 DriveComboBox1: TDriveComboBox; 09 DirectoryListBox1: TDirectoryListBox; 10 FileListBox1: TFileListBox; 11 BitBtn2: TBitBtn; 12 PaintBox1: TPaintBox; 13 BitBtn1: TBitBtn; 14 procedure FileListBox1Click(Sender: TObject); 15 procedure BitBtn1Click(Sender: TObject); 16 private 17 { Private declarations } 18 public 19 { Public declarations } 20 end; 21 var 22 Form1: TForm1; 23 implementation 24 {$R *.dfm} 25 procedure TForm1.FileListBox1Click(Sender: TObject); 26 begin 27 SystemParametersInfo(SPI_SETDESKWALLPAPER,0,Char(FileListBox1.Filenam 28 e),SPIF_UPDATEINIFILE);//將選中的圖片作為Windows 新的桌面圖案 29 end; 30 procedure TForm1.BitBtn1Click(Sender: TObject); 31 var 32 DeskTop : TCanvas ; //定義一個類 33 begin 34 DeskTop := TCanvas.Create ; //創建一個TCanvas 類 35 try 36 with DeskTop do 37 Handle := GetWindowDC (GetDesktopWindow); //得到一個實例句柄 38 with PaintBox1.Canvas do 39 CopyRect (Rect (00, paintbox1.Width,paintbox1.Height),DeskTop,Rect (00, 40 screen.Width, screen.Height)); //復制屏幕圖形到PaintBox 控件中 41 finally 42 DeskTop.Free //釋放這個TCanvas 類 43 end; 44 end; 45 end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved