canvas教程

Delphi使用Button 控件、BitBtn 控件、Canvas对象等变换背景画面-类似图片切换

字号+ 作者:H5之家 来源:H5之家 2017-03-23 15:00 我要评论( )

标签:背景变换 更新时间:2014-04-15 本例制作一个背景能够变化的窗体。当点击窗体中的随机背景按钮时,窗体可以产生随机背景;当点击自定背景时,用户可以打开一幅BMP 格式的图像文件,作为该窗体的背景;当点击退出按钮时,窗体关闭。同时,该程序运行时

  • 标签:背景变换 更新时间:2014-04-15
  • 本例制作一个背景能够变化的窗体。当点击窗体中的“随机背景”按钮时,窗体可以产生随机背景;当点击“自定背景”时,用户可以打开一幅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 控件的代码无需编写。以下是完整程序代码:

    unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; OpenDialog1: TOpenDialog; BitBtn1: TBitBtn; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } Procedure CreateParams(var Params:TCreateParams);override; end; var Form1: TForm1; implementation {$R *.DFM} 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; procedure TForm1.Button2Click(Sender: TObject); var i,j:integer; begin begin for i:=0 to Form1.Height do for j:=0 to Form1.Width do Form1.Canvas.Pixels[j,i]:=(($100*i)div Form1.Height)*random(256);//随机 创建一个窗口背景 end; end; 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; procedure TForm1.CreateParams(var Params:TCreateParams); //实现窗体无标题 begin inherited CreateParams(params); params.style:=(Params.style or ws_popup)and not ws_Caption; end; end.
  • 已读: 次 

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • Python中使用Tkinter画图

      Python中使用Tkinter画图

      2017-03-22 15:00

    • Android中Canvas绘图之Shader使用图文详解(2)

      Android中Canvas绘图之Shader使用图文详解(2)

      2017-03-22 10:00

    • 为什么使用html5的十大原因!!!

      为什么使用html5的十大原因!!!

      2017-03-19 12:00

    • Andriod中绘(画)图

      Andriod中绘(画)图

      2017-03-15 09:00

    网友点评