宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 4234|回复: 0

Delphi 6.0下的几个编程例子

[复制链接]
  • TA的每日心情
    奋斗
    2020-6-5 22:18
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    潇潇 发表于 2011-8-4 08:49:41 | 显示全部楼层 |阅读模式

    欢迎您注册加入!这里有您将更精采!

    您需要 登录 才可以下载或查看,没有账号?注册

    x
    第一章  Delphi6图形知识--------------------------------------------------------------------------------
    1.1Delphi6简介
        Delphi6是国际上流行的大型工具软件,既可以用来开发大型图形设计软件,也可以用来制作
    辅助数学教学的课件。本书中所讲的图形算法和相应课件都是用Delphi6设计的,因此在阅读之前
    必须掌握相应的Delphi6技术,下面是需要的技术的列表:
    1、理解窗口(Form1)和基本组件(如:Panel1,Image1)的使用方法;
    2、Integer类型和Float类型之间的互相转换,TPoint的使用;
    3、TImage的使用方法;
    4、TBitmap的使用方法;
    5、TCanvas的函数和属性的使用方法;
    6、数学函数,例如:ArcCos(),ArcTan(),ArcTan2(),tan(),sin(),cos(),ArcSec();
        在使用delphi6开发软件或者课件的时候,不明白的技术问题,可以通过网上的搜
    索引擎搜索相关知识,优秀的搜索引擎如下:
    http://www.google.com/
    http://www.baidu.com/
    搜索关键字:delphi 教程,TCanvas,TBitmap
    假如你对TCanvas.Arc()画弧函数不了解,可以直接搜索:".arc(" 或者 ".arc"
    在网上有许多好文章,对delphi6图形技术进行了十分详细的说明,而且还是免费的,
    因此,学精delphi6十分容易。
        运行delphi6后,就可以在屏幕右边看到标题是Form1的窗口,在这个窗口中,你可以随意
    添加组件到Form1,设置好组件的属性并编写完程序代码之后,按下F9即可生成".EXE"文件。
    用delphi6开发图形软件大致需要经过如下三步:
    一、设计程序界面;
    二、设置组件属性并且编写程序代码;
    三、保存和编译程序。
        下面是一个实例:
    (1、运行delphi6,在Form1中添加一个Panel1(在Standard组件夹),按照如下格式设置属性:
      object Panel1: TPanel
        Left = 80
        Top = 80
        Width = 75
        Height = 25
        Caption = '单击我!'
        TabOrder = 0
      end
    (2、在它的OnClick事件中写入如下代码:
    procedure TForm1.Panel1Click(Sender: TObject);
    begin
    Form1.Canvas.TextOut(10,50,'这是我的第一个图形设计软件!');
    file://Canvas.TextOut()用来在画布上面输出文字,前面两个参数是输出文字的位置(x,y坐标)。
    end;
    (3、调试完成以后,按下Ctrl+Shift+s保存文件成:Project1.dpr
    (4、按下F9键编译程序(创建Project1.exe文件)

    1.2计算机绘画技术入门
        在delphi6图形绘画技术中,TCanvas是十分重要的!通过Canvas可以在许多组件
    的表面进行绘画。
    实例1:在Form1窗口输出一行文字:
    Form1.Canvas.TextOut(10,50,'这是我的第一个图形设计软件!');
    实例2:在Form1窗口输出一行红色的文字(蓝色背景):
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Form1.Canvas.Brush.Color:=clblue;//设置蓝色背景
    Form1.Canvas.Font.Color:=clred;//设置红色文字
    Form1.Canvas.Font.Size:=15;//设置字体大小,可以省略
    Form1.Canvas.Font.Name:='新宋体';//设置字体,可以省略
    Form1.Canvas.TextOut(10,50,'这是我的第一个图形设计软件!');
    end;
        Canvas通常是某些组件的属性,但是要想在那些没有Canvas属性的组件表面画图,
    就应该按照如下格式编写程序代码:
    实例3:在Panel2上面写字
    procedure TForm1.Button2Click(Sender: TObject);
    var S:TControlCanvas;
    begin
    s:=TControlCanvas.Create;
    s.Control:=Panel2;
    file://写文字
    s.TextOut(0,0,'这是我的第一个图形设计软件!');
    //
    s.FreeHandle;
    s.Free;
    end;
    实例4:在Button2表面画图
    procedure TForm1.Button3Click(Sender: TObject);
    var S:TControlCanvas;
    begin
    s:=TControlCanvas.Create;
    s.Control:=Button2;
    file://把Image1中的图像画到Button2
    s.Draw(0,0,Image1.Picture.Graphic);
    //
    s.FreeHandle;
    s.Free;
    end;

    1.3几何图形绘画函数

    1.画线段
    有两个画线段的函数,在作图中经常被使用:
    procedure MoveTo(X, Y: Integer);
    procedure LineTo(X, Y: Integer);
    MoveTo():把画笔移动到屏幕上的指定位置
    LineTo(X,Y):从画笔位置(由PenPos指定)画一条线到指定位置(X,Y),
    并把画笔的位置移动到X,Y。
      在调用LineTo之前,一般要设置画笔的位置(使用MoveTo函数),默认情况下PenPos
    的值是:(0,0)。
    2.画圆弧线
    函数:Arc(x1,y1,x2,y2,x3,y3,x4,y4 : Integer);
    使用Arc函数可以在画布上画一段弧,椭圆由(x1,y1),(x2,y2) 两点所确定的矩形所决
    定。(x1,y1),(x2,y2)分别是矩形的对角坐标,椭圆是该矩形的内切椭圆。
    看下图,弧的起点是椭圆圆周和椭圆中心与(x3,y3)连线的交点。弧的终点是椭圆圆周
    和椭圆中心与(x4,y4)连线的交点,以逆时针方向画弧。
    分析:A(x1,y1);C(x2,y2);E(x3,y3);F(x4,y4);
    椭圆中心(O.X,O.Y)
    代码:
          Canvas.Arc(A.Left,A.Top,C.Left,C.Top,
                     E.Left,E.Top,F.Left,F.Top);
    还有一个经常被用来画闭合圆弧的函数:
    Chord(x1,y1,x2,yx,x3,y3,x4,y4 : Integer);
    Chord函数连接椭圆上的两点,椭圆由(x1,y1),
    (x2,y3) 两点所确定的矩形决定,(x3,y3)是
    始点,(x4,y4)是终点。

    3.画椭圆
    函数:Ellips(x1,y1,x2,y2 : Integer);
    Ellips函数在画布指定的矩形边界上画一个椭圆,(x1,y1)是矩形左上角的坐标,
    x2,y2是矩形右下角的坐标。
    4.画多边形
    函数:Polygon(Points : array of TPrint);
    Polygon方法在画布上绘制一系列的点,各点依次连成线,最后将首尾两点
    相接形成一个区域,并用当前笔刷填充此区域。
    5.画不闭合的多边形
    函数:Polyline(Ports : array of TPort);
    Polyline函数在画布上用当前画笔绘制一系列的点,各点依次连成线。
        TCanvas有一个Brush属性,只要把Brush.style设置成bsclear,那么调用画图函数
    (Polygon()、Ellips()等)画出来的几何图形,就只显示图形的边框,例如:
        procedure TForm1.Button1Click(Sender: TObject);
    begin
    with Image1.Picture.Bitmap do
    begin
    Width:=200;
    Height:=200;
    Canvas.Brush.Color:=clsilver;
    Canvas.FillRect(rect(0,0,200,200));
    Canvas.Brush.Color:=clyellow;
    Canvas.Brush.Style:=bsclear;
    Canvas.Rectangle(10,10,50,50);
    end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    with Image1.Picture.Bitmap do
    begin
    Width:=200;
    Height:=200;
    Canvas.Brush.Color:=clsilver;
    Canvas.FillRect(rect(0,0,200,200));
    Canvas.Brush.Color:=clyellow;
    Canvas.Brush.Style:=bssolid;
    Canvas.Rectangle(10,10,50,50);
    end;
    end;


    1.4图像文件的制作

        Delphi6支持位图的显示和制作,位图是指:以".bmp"为扩展名的图像文件。
    TBitmap也有一个Canvas属性,通过TBitmap.Canvas就可以在位图表面绘画。
    实例5:创建TBitmap
    procedure TForm1.FormCreate(Sender: TObject);
    var bmp: TBitmap;
    begin
    file://必须步骤1:创建位图
    bmp := TBitmap.Create;
    file://必须步骤2:设置位图的宽度和高度
    bmp.Width:=Image1.Width;
    bmp.Height:=Image1.Height;
    file://必须步骤3:调用Canvas中的绘画函数在空白的位图上面画画或者写字
    bmp.Canvas.Draw(0,0,Image1.Picture.Graphic);
    file://必须步骤4:保存位图或者赋给Image1(或者其它组件的图形属性)
    Image1.Picture.Bitmap:=bmp;
    file://必须步骤5:释放位图占用的内存空间
    bmp.free;
    end;
    实例6:下面的函数的功能:在窗口Form1的指定区域画图
    procedure Form1.DrawBitmap(const Filename: String; const x,y: Integer);
    var
      Bmp: TBitmap;
    begin
      if not FileExists(Filename) then
      begin
        ShowMessage('没有找到"' + Filename + '"位图文件!');
        Exit;//退出DrawBitmap()函数,不会执行下面的程序行。
      end;
      Bmp := TBitmap.Create;
      try
        Bmp.LoadFromFile(Filename);
    file://下面的语句:在窗口Form1上面画Bmp中的图像
        Canvas.Draw(x, y, Bmp);//默认情况下,Canvas指的是窗口Form1的Canvas(画布)。
      finally
        Bmp.Free;
      end;
    end;

    1.5TImage组件

        TImage组件用来显示图像文件,例如:*.ico,*.bmp...
    这个"图像显示组件"重要的属性如下:

    property AutoSize: Boolean;
    说明:如果AutoSize=true,那么组件的Width和height都会被自动设置成图像的宽和高。
    property Picture: TPicture;
    说明:设置这个属性,可以指定显示在组件中的图像。
    property Stretch: Boolean;
    说明:如果图像的宽高小于组件的宽高,是否拉伸显示图像。
    拉伸显示图像会给人一种"缩放图像"的感觉。
    property Transparent: Boolean;
    说明:设置图像透明色。
          如果Transparent=true,且Picture属性中的图像的背景色是白色的,
    把TImage组件放到灰色Form1中时,图像中白色的部分自动隐藏。
    TImage组件使用实例:
    image1.Picture.Graphic.LoadFromFile('d:\1.bmp');//打开并装入图像
    image1.Canvas.RoundRect(0,0,50,50,10,10);//在image1上画一个圆角矩形


    1.6常用数学函数


    函数:function Abs(X);
    说明:计算参数X的绝对值。如果X是实型,那么返回实型的值;如果X是整型,
    那么返回整型的值。例如:

    abs(-45)=45
    abs(-1.9)=1.9
    abs(8.2)=8.2
    abs(-8.2)=8.2
    abs(45)=45

    函数:function Tan(const X: Extended): Extended;
    说明:计算参数X的正切值。如果x是角度,那么必须转换成为弧度。
    1度=PI/180弧度 1弧度=180/PI度
    实例:计算45度的正切,45度=45*(PI/180)弧度=0.785398163397448弧度。
    VAR I:Extended;
    begin
    i:=tan(45*(PI/180));
    showmessage('Tan(45度)='+floattostr(i));
    end;
    函数:function ArcTan(X: Extended): Extended;
    说明:计算参数X的反正切值。
    实例:
    procedure TForm1.Label5Click(Sender: TObject);
    VAR I:Extended;
    begin
    i:=tan(45*(PI/180));
    showmessage('Tan(45度)='+floattostr(i));
    showmessage('问:多少度的正切值等于1?'+#13+'答:'+floattostr(arctan(I)*180/PI)+'度');
    end;
    结果显示如下:
    ---------------------------
    Tan(45度)=1
    ---------------------------
    问:多少度的正切值等于1?
    答:45度
    ---------------------------
    函数:function Frac(X: Extended): Extended;
    说明:返回X的小数点右边的部分。
    实例:showmessage(floattostr(frac(5.2)));//显示:0.2
    函数:function FloatToStr(Value: Extended): string;
    说明:把浮点数转换成字符串
    实例:FloatToStr(-5.6)='-5.6'
    FloatToStr(-5.0)='-5'
    函数:function StrToFloat(const S: string): Extended;
    说明:把数字字符串转换成浮点数
    实例:StrToFloat('-5.6')=-5.6
    StrToFloat('-5')=-5
    函数:function InRange(AValue, AMin, AMax:Integer,Int64或Double):Boolean;
    说明:测试AValue是否大于等于AMin,小于等于AMax,是的话,返回TRUE
    实例:
    if InRange(2,1.0,5.0) then
    showmessage('2在1-5之间');
    函数:function IntPower(const Base: Extended; const Exponent: Integer): Extended;
    说明:相当于如下语句:Base^Exponent .'^'代表乘方。
    showmessage('5的2次幂等于'+floattostr(IntPower(5,2)));
    showmessage('5的2次幂等于'+floattostr(5*5));
    函数:function Ldexp(const X: Extended; const P: Integer): Extended;
    说明:相当于如下语句:x*(2^p)
    实例:showmessage('5*(2^3)等于'+floattostr(Ldexp(5,3)));
    函数:function Power(const Base, Exponent: Extended): Extended;
    说明:相当于如下语句:Base^Exponent
    实例:showmessage('5^3等于'+floattostr(power(5,3.0)));
    函数:function Int(X: Extended): Extended;
    说明:返回x的整数部分。
    实例:showmessage(floattostr(int(5.2)));
    上面的语句最好不要写成如下形式:
    showmessage(inttostr(int(5.2)));
    函数:function ArcTan2(const Y, X: Extended): Extended;
    说明:计算线段(0,0)-(p.x,p.y)与x轴的夹角。
    实例:
    Function CalPointAngle(P:TPoint):Extended;
    begin
    file://功能:计算线段(0,0)-(p.x,p.y)与x轴的夹角,返回角度
    file://返回值:逆时针是负值;顺时针是正值。
    result:=arctan2(p.Y,p.X)*(180/pi);//乘以(180/pi)可以把弧度转换成角度。
    end;
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    免责声明

    本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

    QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

    Copyright © 2001-2023 Discuz! Team. GMT+8, 2024-12-23 01:47 , File On Powered by Discuz! X3.49

    快速回复 返回顶部 返回列表