在Windows95/98中,都是使用注冊(cè)表對(duì)系統(tǒng)數(shù)據(jù)進(jìn)行管理,有關(guān)壁紙的設(shè)置數(shù)據(jù)保存在Hkey_Current_User\Control Panel\Desktop的Wallpaper和TileWallpaper 等鍵值中,只要成功修改了這兩個(gè)鍵值,然后發(fā)消息給Windows即可更換壁紙。在本例的程序中,使用了一個(gè)Tform;兩個(gè)Tspeedbutton(Speedbutton1用于接受用戶(hù)的瀏覽命令,Speedbutton2用于接受用戶(hù)的更換壁紙命令);一個(gè)Timage(用于顯示圖片)。另外,還用到一組文件控件:Tfilelistbox,Tdrivecombobox,Tdirectorylistbox,用于選擇圖片文件,可以設(shè)置FileListBox的mask屬性,篩選顯示在FileListBox 中的文件類(lèi)型(如只顯示.bmp文件)。下面的兩個(gè)程序段是實(shí)現(xiàn)瀏覽圖片和更換壁紙的關(guān)鍵代碼。
Procedure Tform1.SpeedButton1Click(Sender:Tobject);
Begin
If (filelistbox1.FileName=
′′) Then {判斷Filelistbox1中文件有沒(méi)有被選中}
Messagedlg(′請(qǐng)先選擇一幅位圖′,mtInformation,[mbOK],0)
Else
Image1.Picture.LoadFormFile(Filelistbox1.FileName);{加載圖片文件并顯示}
End;
ProcedureTform1.SpeedButton2Click(Sender:TObject);
Var
Reg:Tregistry;{Tregistry 對(duì)象在Registry 單元中聲明,需用Uses令引用Registry單元}
}
Begin
If (Filelistbox1.FileName=′′) Then
Messagedlg(′請(qǐng)先選擇一幅位圖′,mtinformation,[mbOK],0)
Else
Begin
Reg:=Tregistry.Create;{創(chuàng)建Tregistry對(duì)象的實(shí)例}
Reg.Rootkey:= Hkey_Current_User;{設(shè)置根鍵名稱(chēng)}
Reg.OpenKey′Control Panel\Desktop′,False); {打開(kāi)Control Panel\Desktop 路徑對(duì)應(yīng)的主鍵}
Reg.WriteString (′TileWallPaper′,
′0′);
Reg.WriteString
′Wallpaper′,fileli
stbox1.FileName);{向TileWallpaper 和Wallpaper串覆蓋寫(xiě)入新值}
Systemparametersinfo(SPI_SETDESKWallpaper,0,Nil,SPIF_SendChange);{向Windows發(fā)送消息,通知Windows更換壁紙}
Reg.CloseKey;{將更改內(nèi)容寫(xiě)入注冊(cè)表并關(guān)閉}
Reg.Free;{釋放對(duì)象}
End;
End;
代碼中用到的一些函數(shù)可以察看Delphi的聯(lián)機(jī)幫助。需要注意的是:調(diào)用打開(kāi)子鍵的函數(shù)OpenKey時(shí),第二個(gè)參數(shù)一定要設(shè)為False。