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

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

?? drawbox.pas

?? A diagram edit component for delphi/c++ builder with full source included
?? PAS
?? 第 1 頁 / 共 4 頁
字號:
unit DrawBox;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls,Contnrs,Printers,Math,Comctrls,buttons;

type
  TRealPoint=record x,y:real; end;
  TRealRect=record left,top,right,bottom:real; end;

  TPaper=(Letter,A3,A4,A5,B4,B5,Custom);

  TAlignment=(alLeft,alHorzCenter,alRight,alTop,alVertCenter,alBottom);

  TView=class;

  TDrawObj=class(TObject)
  private
    FView:TView;

    FPoints:Array of TRealPoint;
    FPen:TPen;
    FBrush:TBrush;
    FFont:TFont;

    FSelected:boolean;
    FHandle:integer;
    FHandleCount:integer;
  public
    constructor Create;reintroduce;
    destructor Destroy;override;

    procedure Draw(Canvas:TCanvas);virtual;
    procedure DrawHandle(Canvas:TCanvas);
    procedure Move(dx,dy:Real);
    procedure HandleMove(dx,dy:Real);virtual;
    function Handles(AHandle:integer):TRealPoint;virtual;
    function Bounds:TRealRect;virtual;
    function HitTest(r:TRealRect;Canvas:TCanvas):integer;virtual;
    function GetCursor(p:TRealPoint;canvas:Tcanvas):TCursor;virtual;
    procedure Normalize;virtual;
    procedure Alignment(AAlignment:TAlignment;pos:real);virtual;
    procedure ShowProperty;virtual;

    property Handle:integer read FHandle write FHandle;
    property View:TView read FView write FView;
    property Selected:boolean read FSelected write FSelected;

  public
    property Pen:TPen read FPen write FPen;
    property Brush:TBrush read FBrush write FBrush;
    property Font:TFont read FFont write FFont;

  end;

  //TShapeType=(stRectangle,stRoundRectangle,stEllipse,stCircle);
  TRectangle=class(TDrawObj)
  private
    FShape:TShapeType;
    FText:string;
  public
    constructor Create(points:array of TRealPoint);reintroduce;
    destructor Destroy;override;

    procedure Draw(Canvas:TCanvas);override;
    function Handles(AHandle:integer):TRealPoint;override;
    procedure HandleMove(dx,dy:Real);override;
    function Bounds:TRealRect;override;
    function HitTest(r:TRealRect;Canvas:TCanvas):integer;override;
    function GetCursor(p:TRealpoint;canvas:TCanvas):TCursor;override;
    procedure Normalize;override;
    procedure Alignment(AAlignment:TAlignment;pos:real);override;
    procedure ShowProperty;override;

  public
    property Shape:TShapeType read FShape write FShape;
  end;

  TPolyLine=class(TDrawObj)
  private
    FText:string;
  public
    constructor Create(points:array of TRealPoint);reintroduce;
    destructor Destroy;override;

    procedure Draw(Canvas:TCanvas);override;
    function Handles(AHandle:integer):TRealPoint;override;
    procedure HandleMove(dx,dy:Real);override;
    function Bounds:TRealRect;override;
    function HitTest(r:TRealRect;Canvas:TCanvas):integer;override;
    function GetCursor(p:TRealpoint;canvas:TCanvas):TCursor;override;
    procedure Normalize;override;
    procedure Alignment(AAlignment:TAlignment;pos:real);override;
    procedure ShowProperty;override;

  end;

  TDrawingTool=(dtSelect,dtZoom,dtRectangle,dtEllipse,dtCircle,dtRoundRectangle,dtLine,dtPolyLine);
  TSelectMode=(smNone,smShift,smCtrl);

  TView=class(TPaintBox)
  private
    FDrawingTool:TDrawingTool;
    FDownPoint:TRealPoint;
    FUpPoint:TRealPoint;
    FMovePoint:TRealPoint;
    FTest:boolean;
    FPrinting:boolean;

    FObjects:TObjectList;

    FPaper:TPaper;
    FPaperWidth:integer;
    FPaperHeight:integer;
    FPaperColor:TColor;
    FZoom:integer;
    FShowGrid:boolean;

    function DocToView(x:Real;Canvas:TCanvas):Real;overload;
    function ViewToDoc(x:Real;Canvas:TCanvas):Real;overload;
    function DocToView(p:TRealPoint;Canvas:TCanvas):TRealPoint;overload;
    function ViewToDoc(p:TRealPoint;Canvas:TCanvas):TRealPoint;overload;
    function DocToView(r:TRealRect;Canvas:TCanvas):TRealRect;overload;
    function ViewToDoc(r:TRealRect;Canvas:TCanvas):TRealRect;overload;

    procedure SetPaper(Value:TPaper);
    procedure SetPaperWidth(Value:integer);
    procedure SetPaperHeight(Value:integer);
    procedure SetPaperColor(value:TColor);
    procedure SetZoom(value:integer);

    procedure SetShowGrid(value:boolean);

    function HitTest(p:TRealPoint;mode:TSelectMode):boolean;overload;
    function HitTest(r:TRealRect;mode:TSelectMode):boolean;overload;

    function SelectedCount:integer;
    function SelectedObj:TDrawObj;
    function GetCursor(p:TRealPoint):TCursor;

    procedure RubberBand(p1,p2:TRealPoint);
    procedure Draw(Canvas:TCanvas);
    procedure Paint;override;
    procedure InvalObj(obj:TDrawObj);
    procedure Move(dx,dy:Real);

  protected
    procedure DblClick;override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer);override;
    procedure KeyDown(var Key: Word; Shift: TShiftState);

  public
    constructor Create(AOwner:TComponent);override;
    destructor Destroy;override;

    procedure Add(obj:TDrawObj);
    procedure Delete(obj:TDrawObj);overload;
    procedure Delete(index:integer);overload;
    procedure Select(obj:TDrawObj);
    procedure Unselect(obj:TDrawObj);
    procedure SelectAll;
    procedure UnselectAll;
    procedure Print;
    procedure LoadFromFile(AFileName:String);
    procedure LoadFromStream(AStream:TStream);
    procedure SaveToFile(AFileName:String);
    procedure SaveToStream(AStream:TStream);
    procedure Alignment(AAlignment:TAlignment);
    procedure ShowProperty;

    property DrawingTool:TDrawingTool read FDrawingTool write FDrawingTool;
    property Paper:TPaper read FPaper write SetPaper;
    property PaperWidth:integer read FPaperWidth write SetPaperWidth;
    property PaperHeight:integer read FPaperHeight write SetPaperHeight;
    property PaperColor:TColor read FPaperColor write SetPaperColor;
    property Zoom:integer read FZoom write SetZoom;
    property ShowGrid:boolean read FShowGrid write SetShowGrid;
  end;

  TCustomDrawBox = class(TScrollBox)
  private
    FView:TView;
    FRightEdge,FBottomEdge:TShape;

    procedure SetDrawingTool(value:TDrawingTool);
    function GetDrawingTool:TDrawingTool;
    procedure SetPaper(value:TPaper);
    function GetPaper:TPaper;
    procedure SetPaperWidth(value:integer);
    function GetPaperWidth:integer;
    procedure SetPaperHeight(value:integer);
    function GetPaperHeight:integer;
    procedure SetPaperColor(value:TColor);
    function GetPaperColor:TColor;
    procedure SetShowGrid(value:boolean);
    function GetShowGrid:Boolean;
    procedure SetZoom(value:integer);
    function GetZoom:Integer;
    procedure SetEdgePosition;
  public
    constructor Create(AOwner:TComponent);override;
    destructor Destroy;override;

    procedure Add(obj:TDrawObj);
    procedure Delete(obj:TDrawObj);overload;
    procedure Delete(index:integer);overload;
    procedure Select(obj:TDrawObj);
    procedure Unselect(obj:TDrawObj);
    procedure SelectAll;
    procedure UnselectAll;
    procedure Print;
    procedure LoadFromFile(AFileName:String);
    procedure LoadFromStream(AStream:TStream);
    procedure SaveToFile(AFileName:String);
    procedure SaveToStream(AStream:TStream);
    procedure Alignment(AAlignment:TAlignment);

  public
    procedure PaperProperty;
    property DrawingTool:TDrawingTool read GetDrawingTool write SetDrawingTool;
    property Paper:TPaper read GetPaper write Setpaper;
    property PaperWidth:integer read GetPaperWidth write SetPaperWidth;
    property PaperHeight:integer read GetPaperHeight write SetPaperHeight;
    property PaperColor:TColor read GetPaperColor write SetPaperColor;
    property Zoom:integer read GetZoom write SetZoom;
    property ShowGrid:boolean read GetShowGrid write SetShowGrid;
  end;

  TDrawBox=class(TCustomDrawBox)
  published
    property Align;
    property DrawingTool;
    property Paper;
    property PaperColor;
    property PaperWidth;
    property PaperHeight;
    property Zoom;
    property ShowGrid;
  end;

  TDrawBar=class(TCoolBar)
  private
    FButtons:array[1..17] of TSpeedButton;
    FDrawBox:TDrawBox;
    procedure FOnClick(Sender:TObject);
  public
    constructor create(AOwner:TComponent);override;
    destructor destroy;override;
  published
    property Align;
    property EdgeBorders;
    property DrawBox:TDrawBox read FDrawBox write FDrawBox;
  end;

  procedure Swap(var a,b:integer);overload;
  procedure Swap(var a,b:real);overload;
  procedure NormalizeRect(var r:TRect);overload;
  procedure NormalizeRect(var r:TRealRect);overload;
  function RealToInt(x:Real):integer;overload;
  function RealToInt(p:TRealPoint):TPoint;overload;
  function RealToInt(r:TRealRect):TRect;overload;

procedure Register;

implementation

{$R *.RES}

uses RectangleProperty,PolyLineProperty,PaperProperty;

const
  Version='Draw 1.0';


procedure Register;
begin
  RegisterComponents('Samples', [TDrawBox,TDrawBar]);
end;

function RealPoint(x,y:real):TRealPoint;
begin
  result.x:=x;
  result.y:=y;
end;

function RealRect(left,top,right,bottom:real):TRealRect;
begin
  result.left:=left;
  result.top:=top;
  result.right:=right;
  result.bottom:=bottom;
end;

procedure Swap(var a,b:integer);
var
  c:integer;
begin
  c:=a; a:=b; b:=c;
end;

procedure Swap(var a,b:real);
var
  c:real;
begin
  c:=a; a:=b; b:=c;
end;

procedure NormalizeRect(var r:TRect);
begin
  if r.left>r.Right then
    Swap(r.left,r.Right);

  if r.top>r.bottom then
    Swap(r.top,r.bottom);
end;

procedure NormalizeRect(var r:TRealRect);
begin
  if r.left>r.Right then
    Swap(r.left,r.Right);

  if r.top>r.bottom then
    Swap(r.top,r.bottom);
end;

function RealToInt(x:Real):integer;
begin
  result:=Round(x);
end;

function RealToInt(p:TRealPoint):TPoint;
begin
  result.x:=round(p.x);
  result.y:=round(p.y);
end;

function RealToInt(r:TRealRect):TRect;
begin
  result.left:=round(r.left);
  result.top:=round(r.top);
  result.right:=round(r.right);
  result.bottom:=round(r.bottom);
end;

function PtCode(const P: TPoint; const R: TRealRect): Integer;
begin
  Result := 0;
  if P.X < R.Left then Result := Result or 1;
  if P.Y < R.Top then Result := Result or 2;
  if P.X > R.Right then Result := Result or 4;
  if P.Y > R.Bottom then Result := Result or 8;
end;

function RectOnLine(const R: TRealRect;P:array of TRealPoint): Boolean;
label Start;
var
  p1,p2:TPoint;
  D1,D2: Integer;
begin
  p1:=RealToInt(p[0]);
  p2:=RealToInt(p[1]);

  D2 := PtCode(P2,R);
  Start: D1 := PtCode(P1,R);
  Result := D1 and D2 = 0;
  if not Result then Exit;
  Result := (D1=0) or (D2=0) or (D1 or D2 = 5) or (D1 or D2 = 10);
  if Result then Exit;
  if D1 and 1 <> 0 then begin
    P1.Y := P1.Y + MulDiv(P2.Y-P1.Y,RealToInt(R.Left-P1.X),P2.X-P1.X);
    P1.X := RealToInt(R.Left); goto Start;
  end;
  if D1 and 2 <> 0 then begin
    P1.X := P1.X + MulDiv(P2.X-P1.X,RealToInt(R.Top-P1.Y),P2.Y-P1.Y);
    P1.Y := RealToInt(R.Top); goto Start;
  end;
  if D1 and 4 <> 0 then begin
    P1.Y := P1.Y + MulDiv(P2.Y-P1.Y,RealToInt(R.Right-P1.X),P2.X-P1.X);
    P1.X := RealToInt(R.Right); goto Start;
  end;
  if D1 and 8 <> 0 then begin
    P1.X := P1.X + MulDiv(P2.X-P1.X,RealToInt(R.Bottom-P1.Y),P2.Y-P1.Y);
    P1.Y := RealToInt(R.Bottom); goto Start;
  end;
end;

{TDrawObj}
constructor TDrawObj.Create;
begin
  inherited Create;

  FPen:=TPen.Create;
  FPen.Color:=clBlack;
  FPen.Style:=psSolid;
  FPen.Width:=1;

  FBrush:=TBrush.Create;
  FBrush.Color:=clBlack;
  FBrush.Style:=bsClear;

  FFont:=TFont.Create;
  FFont.Name:='Arial';
  FFont.Size:=8;
  FFont.Color:=clBlack;
end;

destructor TDrawObj.Destroy;
begin
  FPen.Free;
  FBrush.Free;
  FFont.Free;

  inherited destroy;
end;

procedure TDrawObj.Draw(Canvas:TCanvas);
begin
end;

procedure TDrawObj.DrawHandle(Canvas:TCanvas);
var
  p:TRealPoint;
  i:integer;
begin
  with Canvas do begin
    for i:=1 to FHandleCount do begin
      p:=Handles(i);
      p:=View.DocToView(p,canvas);
      brush.Color:=clBlack;
      brush.Style:=bsSolid;
      Rectangle(round(p.x-3),round(p.y-3),round(p.x+3),round(p.y+3));
    end;
  end;
end;

function TDrawObj.Handles(AHandle:integer):TRealPoint;
begin
end;

function TDrawObj.GetCursor(p:TRealPoint;canvas:TCanvas):TCursor;
begin
end;

function TDrawObj.Bounds:TRealRect;
begin
end;

procedure TDrawObj.Move(dx,dy:Real);
var
  i:integer;
begin
  for i:=low(FPoints) to high(FPoints) do begin
    FPoints[i].x:=FPoints[i].x+dx;
    FPoints[i].y:=FPoints[i].y+dy;
  end;
end;

procedure TDrawObj.Normalize;
begin
end;

procedure TDrawObj.Alignment(AAlignment:TAlignment;pos:real);
begin
end;

procedure TDrawObj.ShowProperty;
begin
end;

procedure TDrawObj.HandleMove(dx,dy:Real);
begin
end;

function TDrawObj.HitTest(r:TRealRect;Canvas:TCanvas):integer;
begin
end;

{TRectangle}
constructor TRectangle.Create(points:array of TRealPoint);
var
  i:integer;
begin
  inherited Create;

  SetLength(FPoints,2);

  for i:=Low(FPoints) to High(FPoints) do begin
    FPoints[i]:=points[i];
  end;

  FHandleCount:=4;
  FShape:=stRectangle;
end;

destructor TRectangle.Destroy;
begin
  inherited destroy;
end;

procedure TRectangle.Draw(Canvas:TCanvas);
var
  i:integer;
  x,y,w,h,s:integer;
  points:array of TRealPoint;
begin
  SetLength(points,High(FPoints)+1);
  for i:=Low(FPoints) to High(FPoints) do begin
    points[i]:=View.DocToView(FPoints[i],Canvas);
  end;

  x:=Round(points[0].x);
  y:=Round(points[0].y);
  w:=Round(points[1].x-points[0].x);
  h:=Round(points[1].y-points[0].y);

  with Canvas do  begin
    Pen := FPen;
    Brush := FBrush;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国欧美一区二区| 亚洲天堂中文字幕| jvid福利写真一区二区三区| 亚洲一区二区精品视频| 久久久一区二区| 欧美日本国产视频| hitomi一区二区三区精品| 日韩av网站免费在线| 亚洲欧美偷拍另类a∨色屁股| 日韩欧美成人激情| 欧美亚洲综合一区| 成+人+亚洲+综合天堂| 麻豆91在线播放免费| 亚洲夂夂婷婷色拍ww47| 国产精品国模大尺度视频| 精品成人一区二区| 91精品婷婷国产综合久久性色| 91在线高清观看| 国产久卡久卡久卡久卡视频精品| 午夜精品福利在线| 亚洲欧美另类图片小说| 国产性天天综合网| 精品少妇一区二区三区| 在线免费不卡电影| 91麻豆免费视频| 高清在线不卡av| 老司机精品视频一区二区三区| 亚洲一区二区三区精品在线| 亚洲男人都懂的| 亚洲欧美日韩国产一区二区三区 | 日韩精品一区二区在线观看| 欧美日韩一区中文字幕| 91偷拍与自偷拍精品| 国产不卡在线视频| 国产精品一区二区三区四区| 久久精品国产精品青草| 性久久久久久久久| 午夜精品免费在线| 图片区小说区区亚洲影院| 亚洲国产精品综合小说图片区| 又紧又大又爽精品一区二区| 国产精品成人在线观看| 亚洲色图制服丝袜| 日韩美女啊v在线免费观看| 日韩一区中文字幕| 亚洲六月丁香色婷婷综合久久 | 亚洲欧美日韩国产成人精品影院| 中文字幕一区av| 亚洲视频免费看| 亚洲国产一区二区视频| 亚洲国产中文字幕| 久久精品国产久精国产爱| 国产资源精品在线观看| 国产精品99久久久久久久vr| 成人精品亚洲人成在线| 99国产精品视频免费观看| 在线观看av不卡| 欧美精品自拍偷拍| 欧美一级精品在线| 久久免费午夜影院| 国产精品丝袜一区| 玉米视频成人免费看| 日本亚洲一区二区| 国产经典欧美精品| 91麻豆国产精品久久| 欧美日韩高清影院| 久久天天做天天爱综合色| 中文字幕av资源一区| 一区二区三区在线观看国产 | 九色|91porny| 成人美女在线视频| 欧美性色aⅴ视频一区日韩精品| 91精品国产入口| 欧美国产激情二区三区| 一区二区三区日韩在线观看| 秋霞av亚洲一区二区三| 粉嫩在线一区二区三区视频| 91极品美女在线| 日韩免费一区二区| 最新日韩在线视频| 亚洲国产精品视频| 国产激情一区二区三区桃花岛亚洲| 91网站视频在线观看| 欧美一级淫片007| 亚洲日本在线视频观看| 青青草97国产精品免费观看| fc2成人免费人成在线观看播放| 欧美色男人天堂| 欧美国产日韩a欧美在线观看| 一区二区高清在线| 国产成a人亚洲精| 91精品在线一区二区| 国产精品超碰97尤物18| 蜜臀av在线播放一区二区三区| 99久久精品国产毛片| 欧美α欧美αv大片| 一区二区三区不卡视频| 国产99久久精品| 欧美一级片在线看| 一区二区三区在线看| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 精品国产91洋老外米糕| 艳妇臀荡乳欲伦亚洲一区| 国产老肥熟一区二区三区| 88在线观看91蜜桃国自产| 国产精品电影院| 国产一二三精品| 欧美电影一区二区| 一区二区三区在线免费视频 | 成人综合婷婷国产精品久久免费| 欧美日韩精品一区二区| 综合色中文字幕| 国产v综合v亚洲欧| 久久久一区二区三区| 免费成人深夜小野草| 欧美午夜宅男影院| 亚洲天堂a在线| 成人动漫在线一区| 久久久精品黄色| 久久成人免费网| 日韩免费看的电影| 日韩中文字幕亚洲一区二区va在线 | 精品国产电影一区二区| 丝袜美腿亚洲色图| 欧美三级在线视频| 亚洲国产毛片aaaaa无费看| 91日韩在线专区| 亚洲特级片在线| 色av一区二区| 亚洲精品videosex极品| 91女人视频在线观看| 亚洲视频香蕉人妖| 色乱码一区二区三区88| 亚洲欧美精品午睡沙发| hitomi一区二区三区精品| 18欧美乱大交hd1984| www.亚洲免费av| 国产精品久久精品日日| 不卡的av网站| 亚洲最大色网站| 欧美人妖巨大在线| 全国精品久久少妇| 精品av久久707| 国产成人h网站| 日韩一区欧美小说| 一本大道久久a久久精品综合| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 成人国产精品视频| 亚洲精品国产精品乱码不99| 91精品91久久久中77777| 亚洲超碰97人人做人人爱| 欧美男女性生活在线直播观看| 日本成人在线看| 久久综合色天天久久综合图片| 国产**成人网毛片九色| 亚洲人被黑人高潮完整版| 欧美剧情片在线观看| 美女视频一区在线观看| 国产三级欧美三级日产三级99| av成人免费在线观看| 一区二区三区日本| 欧美一区二区三区婷婷月色| 久久er99精品| 日韩理论片在线| 9191成人精品久久| 国产成人在线视频播放| 亚洲欧美一区二区三区久本道91| 欧美日韩精品高清| 国产真实乱子伦精品视频| 国产精品少妇自拍| 欧美日韩国产不卡| 懂色av一区二区三区蜜臀| 一区二区三区精品在线观看| 欧美一三区三区四区免费在线看 | 99国产精品久| 免费精品视频在线| 国产精品久久久久久久久久久免费看 | 亚洲一区二区在线观看视频| 欧美va亚洲va香蕉在线| 91丝袜国产在线播放| 日本 国产 欧美色综合| 中日韩av电影| 欧美一级在线视频| 91农村精品一区二区在线| 麻豆成人av在线| 一区二区三区视频在线看| 久久久久亚洲综合| 欧美日韩国产三级| 成人av网站在线观看免费| 免费日本视频一区| 亚洲欧洲综合另类在线| 久久色在线观看| 欧美日韩国产123区| 99免费精品在线观看| 免费观看在线综合色| 国产毛片一区二区| 亚洲午夜国产一区99re久久| 亚洲国产精品v| 欧美电影免费观看完整版| 欧美午夜理伦三级在线观看|