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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? unitpaintpanel.pas

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

  本源代碼代開,希望哪位同仁加以改進后能給本人發一份源代碼,謝謝
  功能介紹:
    本組件繼承于TCustomControl,功能包括:
    1、圖形的繪制,包括線條,多邊型,多點曲線,圓形,橢圓形
    2、注釋的繪制,包括帶指向點的繪制和不帶指向點的繪制
    3、圖形的存取:從自已定義的文件格式中讀入文件,
      寫入的文件格式有自己定義的文件格式或位圖格式。也可以從流數據中
      進行存取。
      4、F5可以進行刷新圖面,DELETE鍵可以刪除當前選擇的圖形,F6可以刪除填充的地方。
      5、在進行編譯時要進行堆棧的改動,這是由于查找多邊形的算法不好,希望哪位能改進
}
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);    //保存當前數據到文件
     procedure SaveToStream(Stream :TStream);         //保存當前數據到流數據
     procedure SaveToBitmap(const FileName :string);  //保存當前數據為位圖文件
     procedure LoadFromStream(Stream :TStream);       //從流數據中載入數據
     procedure LoadFromFile(const FileName :string);  //從文件中載入數據

     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';    //保存文件時采用的字符串標志名稱

{ 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              //辨別文件數據格式
       raise Exception.Create('無法識別的文件格式');

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

    //解壓縮數據
    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); //根據數據流繪制圖形
    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);       //壓縮數據
      finally
        CompressionStream.Free;
      end;
      AStream.Clear;

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩三级视频在线看| 久久精品国产99国产| 久久嫩草精品久久久久| 日韩欧美中文一区| 亚洲丝袜精品丝袜在线| 亚洲午夜一区二区三区| 午夜欧美视频在线观看| 日韩电影在线一区二区| 九色综合国产一区二区三区| 国产一区二区三区香蕉| 北条麻妃一区二区三区| 欧美写真视频网站| 欧美一级二级三级乱码| 亚洲美女免费在线| 全国精品久久少妇| 成人激情小说网站| 欧美网站大全在线观看| 中文字幕二三区不卡| 亚洲一区二区五区| 国内一区二区在线| 色婷婷精品久久二区二区蜜臀av| 欧美日韩一区二区在线视频| 欧美精品一区二区在线观看| 亚洲四区在线观看| 成人av影院在线| 国产欧美日本一区二区三区| 亚洲一区二区三区四区不卡| 91麻豆swag| 久久综合九色欧美综合狠狠| 一区二区三区四区不卡视频| 精一区二区三区| 日韩女优av电影| 亚洲精品高清在线| 国产另类ts人妖一区二区| 日本丶国产丶欧美色综合| 久久先锋影音av鲁色资源网| 九九**精品视频免费播放| 精品久久久三级丝袜| 亚洲综合视频网| 精品视频在线视频| 日韩专区一卡二卡| 色偷偷88欧美精品久久久| 日韩毛片视频在线看| 色吧成人激情小说| 天堂资源在线中文精品| 91精品在线观看入口| 亚洲视频一区在线| 欧美色爱综合网| 日产精品久久久久久久性色| 欧美成人官网二区| 国产精品一区专区| 亚洲丝袜自拍清纯另类| 欧美日韩国产大片| 亚洲一二三四区| 制服丝袜亚洲网站| 国产成人综合亚洲网站| 2020日本不卡一区二区视频| 国v精品久久久网| 精品国产乱码久久久久久免费| 国产一区二区三区免费在线观看| 亚洲国产成人午夜在线一区| 99精品桃花视频在线观看| 国产精品免费视频网站| 国产盗摄一区二区| 亚洲欧美日本韩国| 日韩久久精品一区| 91美女精品福利| 日韩国产在线观看一区| 国产视频一区二区三区在线观看| 久久国产福利国产秒拍| 亚洲欧洲成人自拍| 91免费版pro下载短视频| 秋霞午夜鲁丝一区二区老狼| 欧美国产欧美亚州国产日韩mv天天看完整| 成人国产精品免费观看视频| 午夜不卡av在线| 国产精品―色哟哟| 日韩欧美激情四射| 色悠悠久久综合| 国产美女在线精品| 亚瑟在线精品视频| 日韩三级在线观看| 91啪亚洲精品| 国产成a人亚洲精| 亚洲国产精品精华液网站| 国产亚洲成aⅴ人片在线观看| 欧美亚洲一区三区| 成熟亚洲日本毛茸茸凸凹| 亚洲欧洲精品一区二区三区| 精品福利一区二区三区免费视频| 色国产综合视频| 成人久久视频在线观看| 久久激情五月婷婷| 婷婷久久综合九色国产成人| 亚洲欧洲成人av每日更新| 国产视频一区二区三区在线观看| 日韩一区二区三区观看| 欧美视频在线不卡| 日本久久精品电影| 成人爽a毛片一区二区免费| 激情六月婷婷综合| 美女脱光内衣内裤视频久久影院| 国产片一区二区三区| 日韩精品中文字幕一区二区三区 | 亚洲综合一区在线| 亚洲成av人影院在线观看网| 中文字幕不卡的av| 久久久久久久久岛国免费| 91精品国产综合久久久久久漫画| 91豆麻精品91久久久久久| 色婷婷国产精品久久包臀| jizz一区二区| 99精品久久99久久久久| 97久久精品人人爽人人爽蜜臀| 国产精品69久久久久水密桃| 国产精品一区专区| 懂色av噜噜一区二区三区av| 国产aⅴ综合色| 国产91在线|亚洲| 成人网在线播放| 91在线免费看| 欧美写真视频网站| 欧美日韩一区不卡| 91精选在线观看| 日韩三级视频在线观看| 精品美女一区二区| 中文字幕电影一区| 综合婷婷亚洲小说| 亚洲国产精品久久艾草纯爱| 五月婷婷久久综合| 极品少妇xxxx精品少妇偷拍| 国产黄人亚洲片| 91啪在线观看| 91麻豆精品国产91久久久久| 日韩精品一区二区三区中文不卡| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 精品一区二区三区av| 精品一区二区综合| 从欧美一区二区三区| 91久久精品午夜一区二区| 欧美男男青年gay1069videost | 日韩美女一区二区三区| 久久久久久久综合狠狠综合| 国产精品国产三级国产aⅴ中文| 日韩三级在线免费观看| 久久免费的精品国产v∧| 亚洲欧洲成人精品av97| 五月天精品一区二区三区| 国产精品69久久久久水密桃| 91啪九色porn原创视频在线观看| 5858s免费视频成人| 国产丝袜在线精品| 亚洲成人综合视频| 国产成人在线影院| 欧美三级视频在线观看| 久久麻豆一区二区| 亚洲一卡二卡三卡四卡| 国产一区二区在线观看视频| 欧洲在线/亚洲| 欧美日韩一级二级三级| 欧美成人一区二区三区| 最新日韩在线视频| 国产在线精品一区二区| 欧美午夜精品一区二区三区| 久久久久国色av免费看影院| 亚洲宅男天堂在线观看无病毒| 国产一区二区三区精品视频| 欧美亚男人的天堂| 国产精品久久久久久久久图文区 | 99国产精品久久久久| 日韩一区二区麻豆国产| 亚洲精品欧美专区| 国产 欧美在线| 欧美一级精品大片| 一级女性全黄久久生活片免费| 国产专区综合网| 日韩区在线观看| 午夜精品福利一区二区蜜股av| 欧美老人xxxx18| 欧美男男青年gay1069videost| 亚洲国产精品成人综合 | 在线成人午夜影院| 一区二区三区在线视频观看58| 国产不卡在线播放| 精品成人免费观看| 久久精品国产色蜜蜜麻豆| 欧美日韩国产一二三| 亚洲综合小说图片| 色综合欧美在线| 亚洲人成网站精品片在线观看| 懂色av噜噜一区二区三区av| 久久久久国产精品人| 国产又粗又猛又爽又黄91精品| 91精品国产高清一区二区三区| 精品久久久久久无| 日本午夜一本久久久综合| 56国语精品自产拍在线观看| 午夜精品视频在线观看| 欧美日高清视频| 婷婷中文字幕综合|