程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi使用Button 控件、BitBtn 控件、Canvas對象等變換背景畫面-類似圖片切換

Delphi使用Button 控件、BitBtn 控件、Canvas對象等變換背景畫面-類似圖片切換

編輯:Delphi

本例制作一個背景能夠變化的窗體。當點擊窗體中的“隨機背景”按鈕時,窗體可以產生隨機背景;當點擊“自定背景”時,用戶可以打開一幅BMP 格式的圖像文件,作為該窗體的背景;當點擊“退出”按鈕時,窗體關閉。同時,該程序運行時的窗體沒有標題欄,使這個可變背景的窗體顯得別致而精巧。程序運行如下圖所示。

 Delphi變換背景畫面-類似圖片切換

本程序利用的主要知識點包括Button 控件、BitBtn 控件、OpenDialog 控件和Canvas對象,還用到了虛擬函數CreateParams()。在Delphi 中,BitBtn 控件不僅可以顯示圖標,而且內置了相關代碼,添加該控件可以直接實現許多操作。OpenDialog 控件可以實現打開文件功能。在Delphi 中,許多控件都有Canvas(畫布)屬性,在Canvas 上可以顯示圖樣。Delphi 中FormStyle 等屬性表示窗體的邊框類型和邊框圖標等,改變這些屬性可以改變窗體的界面和窗口的狀態。

設計步驟:

實現本程序需要解決三個問題:給窗體添加隨機背景,打開圖像BMP 文件使其成為窗體的背景和實現窗體的無標題狀態。通過系統產生隨機顏色,然後賦值給Form.Canvas.Pixels[j,i]可實現添加隨機背景。然後利用bitmap.loadfrom“文件”(OpenDialog1.“文件”Name)函數導入BMP 圖像文件,利用Form1.Canvas.stretchdraw(rect1,bitmap)函數按照BMP 圖像對窗體的Canvas 進行重繪來解決第二個問題。第三個問題只需利用CreateParams(params) 函數並改變窗體的params.style 屬性即可。

1.新建工程
(1)啟動Delphi 6.0 程序。選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Application 選項,則出現新建工程的Form1 窗口。
(2)選擇“文件”菜單下的“工程另存為”命令,彈出Save Unit1 As 對話框。在“保存在”列表框中選擇需要存放該窗口文件所在的目錄名;在“文件名”編輯框中填寫文件名,這裡填寫“Unit1”,點擊“保存”按鈕,保存上面的選項。
(3)執行上一步後,將彈出“工程另存為”對話框。在“保存在”列表框中選擇需要存放該工程的目錄名,最好和第(2)步選取相同的目錄;在“文件名”編輯框中填寫保存處理該工程的源代碼的文件名,這裡填寫“Project1”,點擊“保存”按鈕,保存上面的選項。

2.修改窗口:
(1)激活Form1 窗口,在“屬性”中設置該窗體的Caption 屬性為“可變背景窗體”,Color 屬性設置“clBtnFace”。
(2)在構件選項板上選擇“對話框”頁上的OpenDialog 選項,將鼠標移到窗口中點擊,生成OpenDialog 控件,在“屬性”中設置其Name 屬性為OpenDialog1,設置其Option屬性為ofHideReadOnly 和ofEnableSizing。
(3)選擇“標准”頁上的Button 選項,在窗體中添加三個Button 標簽,調整其合適的大小和位置。按下Shift 鍵,同時選中這三個按鈕,選擇“編輯”菜單下的“對齊”命令,在彈出的對話框中為Button 按鈕選擇合適的對齊方式。然後設置其Caption 屬性分別為“隨機背景1”、“隨機背景2”和“自定背景”。
(4)選擇“附加”頁上的BitBin 選項,在窗體中添加BitBin 控件,調整其合適的大小和位置。在“屬性”面板中設置其Caption 屬性為退出,設置其Kind 屬性為bkClose,在kind 屬性中有多種Windows 常用操作選項。

代碼分析:
(1)Delphi 的許多控件都有Canvas(畫布)屬性,在Canvas 上可以顯示圖樣。窗體Form 也具有該屬性,可以靈活地通過數學運算來控制畫布的顏色和樣式,從而得到合適的窗體背景。隨機背景的產生可以通過系統產生隨機顏色, 然後賦值給Form.Canvas.Pixels[j,i]。

procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
for i:=0 to Form1.Height do
for j:=0 to Form1.Width do
Form1.Canvas.Pixels[j,i]:=$100*random(256);
//隨機創建一個窗口背景
end;

(2)利用bitmap.loadfrom“文件”(OpenDialog1.“文件”Name)函數導入BMP 圖像文件,然後利用Form1.Canvas.stretchdraw(rect1,bitmap)函數按照BMP 圖像樣式對窗體的Canvas 進行重繪,即可實現利用圖像作為窗體背景功能。

procedure TForm1.Button3Click(Sender: TObject);
var
bitmap:Tbitmap;
rect1:trect;
begin
rect1.left:=0; //在窗體的顯示區域上設置圖像
rect1.right:=Width;
rect1.top:=0;
rect1.bottom:=Height;
bitmap:=Tbitmap.Create; //創建對象
OpenDialog1.filter:=’bitmap file(*.bmp)|*.bmp’;//設置打開圖像類型的過濾
if OpenDialog1.Execute then
begin
bitmap.loadfromfile(OpenDialog1.“文件”Name);//導入BMP 圖像文件
Form1.Canvas.stretchdraw(rect1,bitmap);//畫布重繪
bitmap.freeImage;
end;
end;

(3)Delphi 中FormStyle 等屬性表示窗體的邊框類型和邊框圖標等,改變這些屬性可
以改變窗體的界面和窗口的狀態。下面實現窗體無標題功能。

procedure TForm1.CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(params);
params.style:=(Params.style or ws_popup)and not ws_Caption;
end;

(4)窗體中BitBin 控件的代碼無需編寫。以下是完整程序代碼:

vIEw source print? 01 unit Unit1; 02 interface 03 uses 04 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 05 StdCtrls, Buttons; 06 type 07 TForm1 = class(TForm) 08 Button1: TButton; 09 Button2: TButton; 10 Button3: TButton; 11 OpenDialog1: TOpenDialog; 12 BitBtn1: TBitBtn; 13 procedure Button1Click(Sender: TObject); 14 procedure Button2Click(Sender: TObject); 15 procedure Button3Click(Sender: TObject); 16 private 17 { Private declarations } 18 public 19 { Public declarations } 20 Procedure CreateParams(var Params:TCreateParams);override; 21 end; 22 var 23 Form1: TForm1; 24 implementation 25 {$R *.DFM} 26 procedure TForm1.Button1Click(Sender: TObject); 27 var 28 i,j:integer; 29 begin 30 for i:=0 to Form1.Height do 31 for j:=0 to Form1.Width do 32 Form1.Canvas.Pixels[j,i]:=$100*random(256); //隨機創建一個窗口背景 33 end; 34 procedure TForm1.Button2Click(Sender: TObject); 35 var 36 i,j:integer; 37 begin 38 begin 39 for i:=0 to Form1.Height do 40 for j:=0 to Form1.Width do 41 Form1.Canvas.Pixels[j,i]:=(($100*i)div Form1.Height)*random(256);//隨機 42 創建一個窗口背景 43 end; 44 end; 45 procedure TForm1.Button3Click(Sender: TObject); 46 var 47 bitmap:Tbitmap; 48 rect1:trect; 49 begin 50 rect1.left:=0//在窗體的顯示區域上設置圖像 51 rect1.right:=Width; 52 rect1.top:=0; 53 rect1.bottom:=Height; 54 bitmap:=Tbitmap.Create; //創建對象 55 OpenDialog1.filter:=’bitmap file(*.bmp)|*.bmp’; //設置打開圖像類型的過濾 56 if OpenDialog1.Execute then 57 begin 58 bitmap.loadfromfile(OpenDialog1.“文件”Name); //導入BMP 圖像文件 59 Form1.Canvas.stretchdraw(rect1,bitmap); //畫布重繪 60 bitmap.freeImage; 61 end; 62 end; 63 procedure TForm1.CreateParams(var Params:TCreateParams); //實現窗體無標題 64 begin 65 inherited CreateParams(params); 66 params.style:=(Params.style or ws_popup)and not ws_Caption; 67 end; 68 end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved