亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? unitpaintpanel.pas

?? delphi開發(fā)矢量圖的源代碼
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
unit UnitPaintPanel;
{
  Create Date :2003.09.21;
  Create Authoer :WXZH
  E_Mail :lanya99@hotmail.com

  本源代碼代開,希望哪位同仁加以改進(jìn)后能給本人發(fā)一份源代碼,謝謝
  功能介紹:
    本組件繼承于TCustomControl,功能包括:
    1、圖形的繪制,包括線條,多邊型,多點曲線,圓形,橢圓形
    2、注釋的繪制,包括帶指向點的繪制和不帶指向點的繪制
    3、圖形的存取:從自已定義的文件格式中讀入文件,
      寫入的文件格式有自己定義的文件格式或位圖格式。也可以從流數(shù)據(jù)中
      進(jìn)行存取。
      4、F5可以進(jìn)行刷新圖面,DELETE鍵可以刪除當(dāng)前選擇的圖形,F(xiàn)6可以刪除填充的地方。
      5、在進(jìn)行編譯時要進(jìn)行堆棧的改動,這是由于查找多邊形的算法不好,希望哪位能改進(jìn)
}
interface
uses
   Classes,Windows,Messages,ExtCtrls,Graphics,SysUtils,
   Controls,Dialogs,Menus,StdCtrls,Math,UnitGlobal,ZLib;
type
   TGraphClass =(gcLine,gcCurve,gcArc,gcRect,gcNotice);


   TGraphObject = class(TObject)
   private
     FSelected: Boolean;
     FGraphClass: TGraphClass;
     FPointList: TPointList;
     FColor: TColor;
     FFill: Boolean;
     procedure SetPointList(const Value: TPointList);
     procedure SetGraphClass(const Value: TGraphClass);
     procedure SetSelected(const Value: Boolean);
     procedure SetColor(const Value: TColor);
     procedure SetFill(const Value: Boolean);
   public
     property  Fill :Boolean read FFill write SetFill;
     property  PointList :TPointList read FPointList write SetPointList;
     property  Color :TColor read FColor write SetColor;
     property  Selected :Boolean read FSelected write SetSelected;
     property  GraphClass :TGraphClass read FGraphClass write SetGraphClass;
   end;

   TPositionDirection = (pdLeft,pdRight,pdTop,pdBottom);  //點位于矩形框的方位,左邊,右邊,上邊,下邊
   TNoticeClass   =(ncRect,ncNotice);

   TNoticeObject     = class(TObject)
   private
     FFillColor: TColor;
     FClientRect: TRect;
     FLines: TStringList;
     FPoint: TPoint;
     FSelected: Boolean;
     FNoticeClass: TNoticeClass;

     procedure SetClientRect(const Value: TRect);
     procedure SetFillColor(const Value: TColor);
     procedure SetLines(const Value: TStringList);
     function  GetPointList :TPointList;
     procedure SetPoint(const Value: TPoint);
     function PoInRectPosition(Po: TPoint;
          ARect: TRect): TPositionDirection;
     procedure SetSelected(const Value: Boolean);
     procedure SetNoticeClass(const Value: TNoticeClass);
   public
     constructor Create;
     destructor  Destroy;override;

     property NoticeClass :TNoticeClass read FNoticeClass write SetNoticeClass;
     property ClientRect :TRect read FClientRect write SetClientRect;
     property Lines :TStringList read FLines write SetLines;
     property PointList :TPointList read GetPointList;
     property FillColor :TColor read FFillColor write SetFillColor;
     property ToPoint :TPoint read FPoint write SetPoint;
     property Selected :Boolean read FSelected write SetSelected;
   end;

   TDrawClass  =(dcGraph,dcNotice) ;//所畫的類別,圖形,注釋.....
   TPaintMouseDragEvent = procedure(Sender :TObject;var ARect :TRect;
                 var Po :TPoint;Lines :TStringList) of Object;
   TNoticeDragPoint =(npBorder,npHeader);

   TFillObject = class
     Rgn :HRgn;
     FillColor :TColor;
   end;

   TCustomPaintPanel = class(TCustomControl)
   private
     FGraphList :TList;
     FNoticeList :TList;
     FFillList :TList;
     FGraphClass: TGraphClass;
     FPointList :TPointList;
     FAbsPointList :TPointList;
     FPointCount :integer;
     FAction :TOperateAction;
     FColor: TColor;
     FSelObject: TObject;
     FMouseDownSPo :TPoint;
     FDrawClass: TDrawClass;
     FOnMouseDrag: TPaintMouseDragEvent;
     FIsFill: Boolean;
     FFillColor: TColor;
     FNoticeDragPoint: TNoticeDragPoint;
     FNoticeClass: TNoticeClass;

     procedure WMLButtonDown(var Msg :TWMLButtonDown);message WM_LButtonDown;
     procedure WMLButtonUp(var Msg :TWMLButtonUp);message WM_LButtonUp;
     procedure WMMouseMove(var Msg :TWMMouseMove);message WM_MouseMove;
     procedure WMKeyDown(var Msg :TWMKeyDown);message WM_KEYDOWN;
     procedure SetGraphClass(const Value: TGraphClass);

     procedure PaintSelected(AObject: TObject);
     procedure SetColor(const Value: TColor);
     procedure RunTimeDraw(AGraphClass :TGraphClass;APointList :TPointList);
     procedure ClearObjectSelected;
     function  PTInObject(Po: TPoint; AGraphObject: TGraphObject): Boolean;overload;
     function  PTInObject(Po :TPoint; ANoticeObject: TNoticeObject): Boolean;overload;
     procedure SetSelObject(const Value: TObject);
     procedure MoveObject(AObject: TObject; DeltaX,DeltaY: integer);
     procedure ShowMoveObject(AObject: TObject; DeltaX,DeltaY: integer);
     procedure ClearNoticeObject;
     procedure PaintGraph;
     procedure PaintNotice;
     procedure DrawNoticeText(ANoticeObject: TNoticeObject);
     procedure AddGraphObject;
     procedure SetDrawClass(const Value: TDrawClass);
     procedure SetOnMouseDrag(const Value: TPaintMouseDragEvent);
     procedure SetFillColor(const Value: TColor);
     procedure SetIsFill(const Value: Boolean);
     procedure PaintFill;
     procedure SetNoticeDragPoint(const Value: TNoticeDragPoint);
     function  PointInEdge(Po: TPoint; AGraphObject: TGraphObject): Boolean;
     procedure PointListChangToScreen(ClientPointList,
                ScreenPointList: TPointList);
     procedure ClearGraphObject;
     procedure DeleteGraph(AGraphObject: TGraphObject);
     procedure DeleteNotice(ANoticeObject: TNoticeObject);
     procedure ClearFillObject;
     procedure SetNoticeClass(const Value: TNoticeClass);
   protected
     procedure Paint;override;

     procedure DeleteObject(AObject :TObject);
     property  OnMouseDrag :TPaintMouseDragEvent read FOnMouseDrag write SetOnMouseDrag;
     property  NoticeDragPoint :TNoticeDragPoint read FNoticeDragPoint write SetNoticeDragPoint;
   public
     constructor Create(AOwner :TComponent);override;
     destructor  Destroy;override;

     procedure Delete;
     procedure Clear;

     procedure AddNotice(ARect :TRect;Po :TPoint;Lines :TStringList);
     procedure SaveToFile(const FileName :string);    //保存當(dāng)前數(shù)據(jù)到文件
     procedure SaveToStream(Stream :TStream);         //保存當(dāng)前數(shù)據(jù)到流數(shù)據(jù)
     procedure SaveToBitmap(const FileName :string);  //保存當(dāng)前數(shù)據(jù)為位圖文件
     procedure LoadFromStream(Stream :TStream);       //從流數(shù)據(jù)中載入數(shù)據(jù)
     procedure LoadFromFile(const FileName :string);  //從文件中載入數(shù)據(jù)

     property DrawClass :TDrawClass read FDrawClass write SetDrawClass;
     property NoticeClass :TNoticeClass read FNoticeClass write SetNoticeClass;
     property SelObject :TObject read FSelObject write SetSelObject;
     property Color :TColor read FColor write SetColor;
     property FillColor :TColor read FFillColor write SetFillColor;
     property IsFill :Boolean read FIsFill write SetIsFill;
     property GraphClass :TGraphClass read FGraphClass write SetGraphClass;
   end;

   TPaintPanel = class(TCustomPaintPanel)
   published
     property Align;
     property FillColor;
     property DrawClass;
     property Color;
     property GraphClass;
     property Visible;
     property OnMouseDrag;
   end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Lanya Soft',[TPaintPanel]);
end;

const
  FileIdentify = 'WXZHP1.1';    //保存文件時采用的字符串標(biāo)志名稱

{ TGrapthObject }

procedure TGraphObject.SetPointList(const Value: TPointList);
begin
  FPointList := Value;
end;

procedure TGraphObject.SetGraphClass(const Value: TGraphClass);
begin
  FGraphClass := Value;
end;

procedure TGraphObject.SetSelected(const Value: Boolean);
begin
  FSelected := Value;
end;

procedure TGraphObject.SetColor(const Value: TColor);
begin
  FColor := Value;
end;

procedure TGraphObject.SetFill(const Value: Boolean);
begin
  FFill := Value;
end;


{ TPaintPanel }

constructor TCustomPaintPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FGraphList := TList.Create;
  FNoticeList := TList.Create;
  FFillList := TList.Create;
  GraphClass := gcLine;
  DrawClass := dcGraph;
  SetLength(FPointList,0);
end;

destructor TCustomPaintPanel.Destroy;
begin
  ClearGraphObject;
  ClearNoticeObject;
  FGraphList.Free;
  FNoticeList.Free;
  FFillList.Free;
  inherited;
end;

procedure TCustomPaintPanel.ClearNoticeObject;
var
  i :integer;
  NoticeObject :TNoticeObject;
begin
  for i := 0 to FNoticeList.Count - 1 do
  begin
    NoticeObject := FNoticeList[i];
    NoticeObject.Free;
  end;
  FNoticeList.Clear;
  Invalidate;
end;

procedure TCustomPaintPanel.ClearGraphObject;
var
  i :integer;
  GraphObject :TGraphObject;
begin
  for i := 0 to FGraphList.Count - 1 do
  begin
    GraphObject := FGraphList[i];
    GraphObject.Free;
  end;
  FGraphList.Clear;
  Invalidate;
end;


procedure TCustomPaintPanel.AddNotice(ARect: TRect; Po: TPoint;
  Lines: TStringList);
var
  NoticeObject : TNoticeObject;
begin
  NoticeObject := TNoticeObject.Create;
  NoticeObject.ClientRect := ARect;
  NoticeObject.ToPoint := Po;
  NoticeObject.Lines := Lines;
  NoticeObject.Selected := True;
  SelObject := NoticeObject;
  FNoticeList.Add(NoticeObject);
end;


procedure TCustomPaintPanel.LoadFromFile(const FileName: string);
var
  Stream :TMemoryStream;
  DestStream :TMemoryStream;
  DeCompressionStream :TDeCompressionStream;
  Count :Int64;
  Buff :Pchar;
  Identify :array of Char;
begin
  Stream := TMemoryStream.Create;
  try
    Stream.LoadFromFile(FileName);

    //辨別文件的格式,是否為能識別的格式
    Stream.Position := 0;
    SetLength(Identify,Length(FileIdentify));
    Stream.ReadBuffer(Identify[0],Sizeof(Char) * Length(FileIdentify));
    if Identify[0] = FileIdentify then              //辨別文件數(shù)據(jù)格式
       raise Exception.Create('無法識別的文件格式');

    Stream.ReadBuffer(Count,Sizeof(Int64));

    //解壓縮數(shù)據(jù)
    DestStream := TMemoryStream.Create;
    try
      DeCompressionStream := TDeCompressionStream.Create(Stream);
      GetMem(Buff,Count + 1);
      try
        DeCompressionStream.ReadBuffer(Buff^,Count);
        DestStream.WriteBuffer(Buff^,Count);
      finally
        FreeMem(Buff);
      end;
      LoadFromStream(DestStream); //根據(jù)數(shù)據(jù)流繪制圖形
    finally
      DestStream.Free;
    end;
  finally
    Stream.Free;
  end;
end;

procedure TCustomPaintPanel.LoadFromStream(Stream: TStream);
var
  Count :integer;
  AColor :TColor;
  APointList :TPointList;
  AGraphObject :TGraphObject;
  AGraphClass :TGraphClass;
  Identify :array of Char;
begin
  Stream.Position := 0;
  while Stream.Position < Stream.Size do
  begin
    Stream.ReadBuffer(Count,Sizeof(Count));
    Stream.ReadBuffer(AColor,Sizeof(TColor));
    Stream.ReadBuffer(AGraphClass,Sizeof(TGraphClass));
    SetLength(APointList,Count);
    Stream.ReadBuffer(APointList[0],Sizeof(TPoint) * Count);
    AGraphObject := TGraphObject.Create;
    AGraphObject.PointList := Copy(APointList,0,High(APointList) + 1);
    AGraphObject.Color := AColor;
    AGraphObject.GraphClass := AGraphClass;
    FGraphList.Add(AGraphObject);
  end;
  Invalidate;
end;

procedure TCustomPaintPanel.SaveToFile(const FileName: string);
var
  AStream :TMemoryStream;
  CompressionStream :TCompressionStream;
  DestStream :TMemoryStream;
  AIdentify :PChar;
  Count :Int64;
begin
  AStream := TMemoryStream.Create;
  try
    SaveToStream(AStream);
    Count := AStream.Size;
    DestStream := TMemoryStream.Create;
    try     //Start DestStream
      CompressionStream := TCompressionStream.Create(clMax,DestStream);
      try
        AStream.SaveToStream(CompressionStream);       //壓縮數(shù)據(jù)
      finally
        CompressionStream.Free;
      end;
      AStream.Clear;

      //寫入標(biāo)志字符串
      AStream.WriteBuffer(FileIdentify,Sizeof(Char) * Length(FileIdentify));

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久婷婷国产综合精品青草| 欧美精品免费视频| 日本一区二区成人在线| 成人深夜视频在线观看| 日韩理论片网站| 欧美三级乱人伦电影| 蜜乳av一区二区三区| 久久久精品国产免大香伊 | 亚洲成a天堂v人片| 7777精品伊人久久久大香线蕉经典版下载 | 日韩一区二区影院| 国产一区二区三区观看| 中文字幕亚洲电影| 欧美美女一区二区| 国产精品一二一区| 亚洲精品日韩专区silk| 日韩欧美一卡二卡| jlzzjlzz亚洲女人18| 三级亚洲高清视频| 国产女人18水真多18精品一级做| 99九九99九九九视频精品| 亚洲v精品v日韩v欧美v专区| 久久久五月婷婷| 在线观看av一区| 国内成人免费视频| 亚洲精品成人少妇| 亚洲精品在线电影| 在线观看成人免费视频| 激情五月激情综合网| 亚洲欧美一区二区久久| 日韩女优av电影在线观看| 91免费在线播放| 精品亚洲成a人| 亚洲在线一区二区三区| 久久久久久久久免费| 欧美日韩一区高清| 波多野洁衣一区| 奇米精品一区二区三区四区| 国产精品久久久久影院色老大| 欧美乱妇15p| 91小视频免费看| 国产一区二区三区最好精华液| 亚洲一区在线视频| 亚洲欧美综合另类在线卡通| 日韩精品一区在线观看| 在线视频欧美精品| 高清国产午夜精品久久久久久| 午夜欧美一区二区三区在线播放| 中文幕一区二区三区久久蜜桃| 日韩一区二区视频| 欧美日韩高清一区二区三区| 成人福利在线看| 国内一区二区在线| 人人爽香蕉精品| 亚洲亚洲精品在线观看| 中文字幕中文字幕一区二区 | 粉嫩高潮美女一区二区三区 | 激情综合色综合久久综合| 亚洲成在线观看| 一区二区三区四区高清精品免费观看 | 成人av资源站| 国产精品一区二区免费不卡| 毛片不卡一区二区| 天天爽夜夜爽夜夜爽精品视频| 亚洲欧美乱综合| 国产精品护士白丝一区av| 国产日产欧产精品推荐色 | www.66久久| 国产91高潮流白浆在线麻豆| 国产麻豆91精品| 国产又黄又大久久| 国产永久精品大片wwwapp| 激情偷乱视频一区二区三区| 蜜臀av性久久久久蜜臀av麻豆| 日韩中文字幕区一区有砖一区 | 久久精品国产**网站演员| 琪琪久久久久日韩精品| 奇米精品一区二区三区四区 | 久久久精品蜜桃| 国产女主播一区| 中文字幕制服丝袜成人av | 中文字幕av不卡| 国产精品人妖ts系列视频| 亚洲国产精品t66y| 国产精品久久午夜| 一区二区三区久久| 日韩专区中文字幕一区二区| 美女视频第一区二区三区免费观看网站 | 久久99蜜桃精品| 国产福利精品导航| www.亚洲人| 在线观看一区不卡| 欧美顶级少妇做爰| 久久这里只有精品6| 欧美国产亚洲另类动漫| 亚洲乱码国产乱码精品精小说 | 久久精品久久99精品久久| 久久99精品视频| 成人h动漫精品| 欧美午夜免费电影| 精品久久一区二区| 国产精品电影一区二区三区| 亚洲一区二区影院| 老汉av免费一区二区三区| 国产一区二区91| 99免费精品在线观看| 国产·精品毛片| 色婷婷综合在线| 日韩欧美一级片| 国产精品国产三级国产aⅴ无密码| 亚洲尤物在线视频观看| 狠狠网亚洲精品| 91福利在线播放| 久久这里只有精品首页| 亚洲欧美国产77777| 男女男精品网站| www.66久久| 日韩精品一区二区三区四区| 欧美激情在线看| 日韩国产高清在线| 成人动漫一区二区在线| 欧美欧美午夜aⅴ在线观看| 久久久久久一级片| 亚洲一二三四久久| 国产精品一区不卡| 在线一区二区观看| 中文字幕av一区二区三区高| 日韩和欧美一区二区| 97se狠狠狠综合亚洲狠狠| 日韩欧美国产精品| 一区二区欧美视频| 成人a级免费电影| 欧美电视剧免费全集观看| 一级女性全黄久久生活片免费| 国产成人日日夜夜| 欧美一级淫片007| 亚洲一二三四久久| 99精品国产99久久久久久白柏| 337p日本欧洲亚洲大胆色噜噜| 一区二区三区视频在线观看| 国产成人av影院| 日韩欧美国产wwwww| 亚洲最新视频在线观看| 成人sese在线| 国产无人区一区二区三区| 捆绑变态av一区二区三区| 欧美麻豆精品久久久久久| 亚洲日本免费电影| 成人av在线一区二区三区| 国产亚洲欧美在线| 国产一区二区三区四| 欧美一级欧美一级在线播放| 亚洲电影一级片| 色综合天天狠狠| 综合av第一页| 99精品久久免费看蜜臀剧情介绍| 国产欧美一区二区精品性| 国产一区二区成人久久免费影院| 欧美大黄免费观看| 蜜桃免费网站一区二区三区| 在线成人av影院| 日韩专区在线视频| 91麻豆精品国产自产在线观看一区| 亚洲黄色尤物视频| 欧美三级资源在线| 亚洲线精品一区二区三区八戒| 色噜噜狠狠一区二区三区果冻| 一区二区在线观看不卡| 色综合天天综合网天天狠天天| 亚洲色欲色欲www在线观看| 99国产一区二区三精品乱码| 亚洲天堂中文字幕| 在线视频欧美精品| 天涯成人国产亚洲精品一区av| 91精品综合久久久久久| 美女网站视频久久| 久久天天做天天爱综合色| 成人精品小蝌蚪| 亚洲欧美一区二区在线观看| 色屁屁一区二区| 日韩va欧美va亚洲va久久| 精品动漫一区二区三区在线观看| 精品一区二区三区在线观看| 久久亚洲综合色一区二区三区 | 91久久线看在观草草青青| 亚洲一区二区四区蜜桃| 欧美一区二区在线观看| 久热成人在线视频| 国产精品视频线看| 欧美最猛性xxxxx直播| 美女网站一区二区| 国产精品欧美一区喷水| 色婷婷av久久久久久久| 日本一区中文字幕| 国产亚洲综合性久久久影院| 99视频在线精品| 奇米一区二区三区| 国产精品日产欧美久久久久| 欧洲另类一二三四区| 九九九精品视频|