Delphi制作一個可愛的桌面寵物,運行程序後,有一個小動物的圖像在桌面窗口中不斷地向右移動。不論該程序是否為當前活動窗口,這個小動物的圖像都出現在桌面上。在動物圖像上點擊鼠標右鍵,可以選擇不同的動物圖像,還可以控制它向右移動的速度,以及控制它是否同時在豎直方向上移動。在右鍵菜單中選擇退出命令,即可退出該程序。
設計思路及步驟:要實現桌面寵物,首先需要隱藏標題欄,制作透明窗體效果,接下來需要設置窗體的各項屬性。利用Timer 控件來控制圖像和窗體的移動,因為可以控制圖像在水平方向或豎直方向上移
動,所以需要用到兩個Timer 控件。
1.新建工程文件:
(1)啟動Delphi 6.0 程序。選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Application 選項,則出現新建工程的Form1 窗口。
(2)選擇“文件”菜單下的“工程另存為”命令,彈出Save Unit1 As 對話框。在“保存在”列表框中選擇需要存放該窗口文件所在的目錄名;在“文件名”編輯框中填寫文件名,這裡填寫“Unit1”,點擊“保存”按鈕,保存上面的選項。
(3)執行上一步後,將彈出“工程另存為”對話框。在“保存在”列表框中選擇需要存放該工程的目錄名,最好和第(2)步選取相同的目錄;在“文件名”編輯框中填寫保存處理該工程的源代碼的文件名,這裡填寫“Project1”,點擊“保存”按鈕,保存上面的選項。
2.修改窗口參數:
(1)激活Unit1 窗口,在“屬性”面板中設置該窗體的Caption 屬性為“桌面小精靈”,Name 屬性為“Form1”。
(2)選擇“附加”頁上的Image 選項,在窗體中添加一個Image 控件,在“屬性”面板中設置該控件的Align 屬性為alClIEnt,使圖像充滿整個窗體,Name 屬性設置為“Image1”,用鼠標點擊Picture 屬性右邊的文本框,從彈出的對話框中導入合適的圖像文件,設置Stretch 屬性為False。
(3)選擇“系統”頁上的Timer 選項,在窗體中添加2 個Timer 控件,在“屬性”面板中設置其Name 屬性分別為Timer1 和Timer2,設置其Interval 屬性分別為10 和20。設置Timer1 的Enable 屬性為True,Timer2 的Enable 屬性為False。
(4)選擇“標准”頁上的PopupMenu 選項,在窗體中添加PopupMenu 控件,雙擊該控件,進入右鍵菜單編輯窗口,設置右鍵菜單如下:退出,速度(快速、中速、慢速)、上下移動(快速、中速、慢速、停止上下移動)、圖案(猴子、駿馬、小猴)、背景音樂(播放音樂、停止播放)。
對具體代碼進行分析:
(1)程序運行時,需要隱藏標題欄,同時需要初始化窗體制作透明窗體,這需要用到一些Windows API 函數:
procedure TForm1.FormCreate(Sender: TObject); //隱藏窗體的標題欄 Var Save : LongInt; begin If BorderStyle=bsNone then Exit; Save:=GetWindowLong(Handle,gwl_Style); If (Save and ws_Caption)=ws_Caption then begin Case BorderStyle of bsSingle, bsSizeable : SetWindowLong(Handle,gwl_Style,Save and (Not(ws_Caption)) or ws_border); bsDialog : SetWindowLong(Handle,gwl_Style,Save and (Not(ws_Caption)) or ds_modalframe or ws_dlgframe); end; Height:=Height-getSystemMetrics(sm_cyCaption); Refresh; end; brush.style:=bsClear;//隱藏背景,使窗體變為透明 Inherited; speed:=1; //設置初始速度 end;
(2)兩個Timer 控件的OnTimer 事件控制小動物圖像在豎直方向或水平方向上運動,同時選擇不同的速度時,小動物圖像移動的速度也需要發生變化,這需要用到IF 語句,代碼如下:
procedure TForm1.Timer1Timer(Sender: TObject); begin if Form1.Left>=screen.Width then //當窗體移動到屏幕之外時 Form1.Left:=0 else if speed=4 then //窗體快速移動 Form1.Left:=Form1.Left+4 else if speed=2 then //窗體中速移動 Form1.Left:=Form1.Left+2 else //窗體慢速移動 Form1.Left:=Form1.Left+1; end; procedure TForm1.Timer2Timer(Sender: TObject); begin if Form1.Top>=screen.Height then //當窗體移動到屏幕之外時 Form1.Top:=0 else if speedu=15 then //窗體快速移動 Form1.Top:=Form1.Top+15 else if speedu=8 then //窗體中速移動 Form1.Top:=Form1.Top+8 else //窗體慢速移動 Form1.Top:=Form1.Top+2; end;
(3)程序運行時,點擊鼠標右鍵可以選擇不同的圖案作為桌面小精靈的圖像,這需要用到Image 的Picture 屬性,代碼如下:
procedure TForm1.M2Click(Sender: TObject);//選擇猴子圖案 begin Image1.Picture.Bitmap.LoadFromFile(’monkey.bmp’); end; procedure TForm1.N2Click(Sender: TObject);//選擇駿馬圖案 begin Image1.Picture.Bitmap.LoadFromFile(’horse.bmp’); end; procedure TForm1.S3Click(Sender: TObject);//選擇小蛇圖案 begin Image1.Picture.Bitmap.LoadFromFile(’snake.bmp’); end;
(4)同時我們可以調用相關函數,控制桌面小精靈是否播放背景音樂:
procedure TForm1.P1Click(Sender: TObject);//播放背景音樂 begin MCISendString(’OPEN spring.mid TYPE SEQUENCER ALIAS NN’, ’’, 0, 0); MCISendString(’PLAY NN FROM 0’, ’’, 0, 0); MCISendString(’CLOSE ANIMATION’, ’’, 0, 0); end; procedure TForm1.S4Click(Sender: TObject);//停止播放背景音樂 begin MCISendString(’OPEN spring.mid TYPE SEQUENCER ALIAS NN’, ’’, 0, 0); MCISendString(’STOP NN’, ’’, 0, 0); MCISendString(’CLOSE ANIMATION’, ’’, 0, 0); end;