奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> Delphi >> Window画图程序中画曲线的简单实现
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
  • Delphi实现网页表单数

  • 用Delphi开发Web服务数

  • Delphi中利用钩子实现

  • 一个判断定文件是否为

  • 把Flash文件转换为Exe

  • 用Delphi实现文件下载

  • Delphi中保存图像列表

  • 基于Delphi的接口编程

  • Window画图程序中画曲线的简单实现
    字体:

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-22

    下面是很入以前的一个程序,模仿Windows的画图程序中画曲线.其实原理简单得要命 ,就是一个PolyBezier函数.
    那一位有兴趣的可以封装成一个类,方便以后用.
    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;

    type
      TStep=(sStartEnd,sCtrl1,sCtrl2);
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormPaint(Sender: TObject);
      private
        { Private declarations }
        isDown:Boolean;
        isOK:Boolean;  //标识一次Bezier线的绘制是否完成
        Step:TStep; //指示到那个阶段了
        StartP:TPoint;  //以下是四个点坐标
        EndP:TPoint;
        CtrP1:TPoint;
        CtrP2:TPoint;
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      self.DoubleBuffered:=true;
      isDown:=False;
      Step:=sStartEnd;
      isOK:=False;
    end;

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      isDown:=true;
      if Button=mbLeft then
      begin
        if (Step=sStartEnd) then
        begin
          StartP.X:=X;
          StartP.Y:=Y;
          EndP:=Point(X,Y);
          isOK:=False;
        end
        else if (Step=sCtrl1)  then
        begin
          CtrP1:=Point(X,Y);
          CtrP2:=Point(X,Y);
        end
        else if (Step=sCtrl2)  then
        begin
          CtrP2:=Point(X,Y);
        end;
      end;
    end;

    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if isDown and (Shift=[ssLeft]) then
      begin
        if (Step=sStartEnd) then
        begin
          EndP.X:=X;
          EndP.Y:=Y;
        end
        else if Step=sCtrl1 then
        begin
          CtrP1:=Point(X,Y);
          CtrP2:=Point(X,Y);
        end
        else if (Step=sCtrl2)  then
        begin
          CtrP2:=Point(X,Y);
        end;
        self.Invalidate;
      end;
    end;

    procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if isDown and (Button=mbLeft) then
      begin
        isDown:=False;
        if Step=sStartEnd then Step:=sCtrl1
        else if Step=sCtrl1 then Step:=sCtrl2
        else if Step=sCtrl2 then begin Step:=sStartEnd; isOK:=True; end;
      end;
    end;

    procedure TForm1.FormPaint(Sender: TObject);
    begin
      if not isOK then
      begin
        if Step=sStartEnd then
        begin
          self.Canvas.MoveTo(StartP.X,StartP.Y);
          self.Canvas.LineTo(EndP.X,EndP.Y);
        end
        else begin
         Self.Canvas.PolyBezier([StartP,CtrP1,CtrP2,EndP]);
        end;
      end else begin
        Self.Canvas.PolyBezier([StartP,CtrP1,CtrP2,EndP]);
      end;
    end;

    end.

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.