📄 drwobj.pas
字号:
unit DrwObj;
interface
uses
windows,Messages, SysUtils, Variants, Classes,Graphics,Types,DrwBaseType,
math,jpeg,StrUtils;
type
TdrwTool=class of TDrawobject;
TDrawObject=class
private
FPenColor:Tcolor;
FStyle:TDrwStyle;
FPenWidth:integer;
FPenStyle:TPenStyle;
fVisible:boolean;
fGradient:boolean;
fGradientStyle:TGradientStyle;
fBeginColor:TColor;
fEndColor:TColor;
fTag:integer;
protected
FInfo:TDrwName;
FName:TDrwName;
FZoomScale:single;
FSelected:boolean;
function getPenStyle:TPenStyle;
procedure setPenStyle(value:TPenStyle);
procedure SetPenColor(value:TColor);
function GetPenColor:TColor;
procedure SetPenWidth(value:integer);
function GetPenWidth:integer;
procedure HotPoint(drwCanvas:TCanvas;x,y:longint);{设置热点}
function AtPoint(x,y,x1,y1:longint):boolean;overload;{判断两点之间的位置关系}
function AtPoint(x,y:integer;p:TPoint):boolean;overload;
function AtLine(x,y,x1,y1,x2,y2:longint):Boolean;{判断点和直线的位置关系}
function atRect(x,y,x1,y1,x2,y2:longint):Boolean;
function isEqual(t1,t2:TPoint):boolean;
procedure NormalRect(var t:TRect);{进行方向正常化}
//procedure RectNormal(t1,t2:TPoint);
public
property PenColor:tcolor read FPenColor write SetPenColor;
property mSelected:boolean read FSelected write FSelected;
property Style:TDrwStyle read FStyle write FStyle;
property Name:TDrwName read FName write FName;
property Info:TDrwName read FInfo write FInfo;
property PenWidth:integer read GetPenWidth write SetPenWidth;
property PenStyle:TPenStyle read getPenStyle write SetPenStyle;
property ZoomScale:single read FZoomScale write FZoomScale;
property Visible:boolean read fVisible write fVisible;
//**************gradient fill atrr***********************
property Gradient:boolean read fGradient write fGradient;
property GradientStyle:TGradientStyle read fGradientStyle write fGradientStyle;
property BeginColor:TColor read fBeginColor write fBeginColor;
property EndColor:TColor read fEndColor write fEndColor;
property Tag:integer read fTag write fTag default 0;
constructor create;virtual;
procedure Selected(drwCanvas:TCanvas;select:boolean);virtual;abstract;{绘制/取消选择标志}
procedure Draw(drwCanvas:TCanvas);virtual;abstract;{绘制图元}
procedure MoveAt(drwCanvas:TCanvas;flags:integer;x,y:longint);virtual;abstract;{以指定方式移动图元}
function SelectAt(x,y:longint):integer;virtual;abstract;{判断是否选择图元}
function NewPoint(x,y:longint):integer;virtual;abstract;{图形对象的第一点坐标,如果返回false则绘图结束}
procedure HotPoints(drwCanvas:TCanvas);virtual;abstract;{绘制热点}
procedure Save(stream:TStream);virtual;{保存文件}
procedure Load(stream:TStream);virtual;{获取文件}
function IsValid:boolean;virtual;abstract;//判断图形是否合法
{仅供分组使用}
function getMinPoint:TPoint;virtual;abstract;
function getMaxPoint:TPoint;virtual;abstract;
procedure addXY(x,y:longint;flags:integer;zoomScaleX:real=1.0;zoomScaleY:real=1.0);virtual;abstract;{增加XY的分量}
procedure setOrg;virtual;abstract;//设置分组的缩放点
end;
TDrawLine=class(TDrawObject)
private
m_x1,m_y1,m_x2,m_y2:longint;
m_oldx,m_oldy:longint;
fArrowStyle:TArrowStyle;
fRect:TRect;
procedure drawArrow(drwCanvas:TCanvas;m_One,m_Two:TPoint;flags:TArrowStyle);
public
constructor create;override;
procedure Selected(drwCanvas:TCanvas;select:boolean);override;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
procedure MoveAt(drwCanvas:TCanvas;flags:integer;x,y:longint);override;{以指定方式移动图元}
function SelectAt(x,y:longint):integer;override;{判断是否选择图元}
function NewPoint(x,y:longint):integer;override;{图形对象的第一点坐标,如果返回false则绘图结束}
procedure HotPoints(drwCanvas:TCanvas);override;{绘制热点}
procedure Save(stream:TStream);override;{保存文件}
procedure Load(stream:TStream);override;{获取文件}
function IsValid:boolean;override;
property ArrowStyle:TArrowStyle read fArrowStyle write fArrowStyle default arNone;
{仅供分组使用}
function getMinPoint:TPoint;override;
function getMaxPoint:TPoint;override;
procedure addXY(x,y:longint;flags:integer;zoomScaleX:real=1.0;zoomScaleY:real=1.0);override;
procedure setOrg;override;//设置分组的缩放点
end;
TDrawRect=class(TDrawObject)
private
FIsRoundRect:boolean;
protected
m_x1,m_x2,m_y1,m_y2:longint;
m_oldx,m_oldy:longint;
FBrushColor:TColor;
FBrushStyle:TBrushStyle;
fRect:TRect;
public
property BrushColor:TColor read FBrushColor write FBrushColor;
property BrushStyle:TBrushStyle read FBrushStyle write FBrushStyle;
property IsRoundRect:Boolean read FIsRoundRect write FIsRoundRect;
constructor create;override;
procedure Selected(drwCanvas:TCanvas;select:boolean);override;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
procedure MoveAt(drwCanvas:TCanvas;flags:integer;x,y:longint);override;{以指定方式移动图元}
function SelectAt(x,y:longint):integer;override;{判断是否选择图元}
function NewPoint(x,y:longint):integer;override;{图形对象的第一点坐标,如果返回false则绘图结束}
procedure HotPoints(drwCanvas:TCanvas);override;{绘制热点}
procedure Save(stream:TStream);override;{保存文件}
procedure Load(stream:TStream);override;{获取文件}
function IsValid:boolean;override;
procedure Action_X; //垂直翻转
procedure Action_Y; //水平翻转
{仅供分组使用}
function getMinPoint:TPoint;override;
function getMaxPoint:TPoint;override;
procedure addXY(x,y:longint;flags:integer;zoomScaleX:real=1.0;zoomScaleY:real=1.0);override;
procedure setOrg;override;//设置分组的缩放点
end;
TDrawSanJiao=class(TDrawRect)
public
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
procedure MoveAt(drwCanvas:TCanvas;flags:integer;x,y:longint);override;{以指定方式移动图元}
procedure HotPoints(drwCanvas:TCanvas);override;{绘制热点}
end;
TDrawGrid=class(TDrawRect)
private
fRowCount:integer;
fColCount:integer;
public
property RowCount:integer read fRowCount write fRowCount default 2;
property ColCount:integer read fColCount write fColCount default 2;
constructor create;override;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
procedure Save(stream:TStream);override;{保存文件}
procedure Load(stream:TStream);override;{获取文件}
end;
TDrawEllipse=class(TDrawObject)
private
m_x1,m_x2,m_y1,m_y2:longint;
m_oldx,m_oldy:longint;
FBrushStyle:TBrushStyle;
FBrushColor:TColor;
fRect:TRect;
function AtCurve(x,y:longint):boolean;
public
property BrushColor:TColor read FBrushColor write FBrushColor;
property BrushStyle:TBrushStyle read FBrushStyle write FBrushStyle;
constructor create;override;
procedure Selected(drwCanvas:TCanvas;select:boolean);override;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
procedure MoveAt(drwCanvas:TCanvas;flags:integer;x,y:longint);override;{以指定方式移动图元}
function SelectAt(x,y:longint):integer;override;{判断是否选择图元}
function NewPoint(x,y:longint):integer;override;{图形对象的第一点坐标,如果返回false则绘图结束}
procedure HotPoints(drwCanvas:TCanvas);override;{绘制热点}
procedure Save(stream:TStream);override;{保存文件}
procedure Load(stream:TStream);override;{获取文件}
function IsValid:boolean;override;
{仅供分组使用}
function getMinPoint:TPoint;override;
function getMaxPoint:TPoint;override;
procedure addXY(x,y:longint;flags:integer;zoomScaleX:real=1.0;zoomScaleY:real=1.0);override;{增加XY的分量}
procedure setOrg;override;//设置分组的缩放点
end;
TDrawCircle=class(TDrawObject)
private
m_x2,m_y2,m_x1,m_y1:longint;
m_oldx,m_oldy:longint;
FBrushStyle:TBrushStyle;
FBrushColor:TColor;
fRect:TRect;
public
property BrushColor:TColor read FBrushColor write FBrushColor;
property BrushStyle:TBrushStyle read FBrushStyle write FBrushStyle;
constructor create;override;
procedure Selected(drwCanvas:TCanvas;select:boolean);override;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
procedure MoveAt(drwCanvas:TCanvas;flags:integer;x,y:longint);override;{以指定方式移动图元}
function SelectAt(x,y:longint):integer;override;{判断是否选择图元}
function NewPoint(x,y:longint):integer;override;{图形对象的第一点坐标,如果返回false则绘图结束}
procedure HotPoints(drwCanvas:TCanvas);override;{绘制热点}
procedure Save(stream:TStream);override;{保存文件}
procedure Load(stream:TStream);override;{获取文件}
function IsValid:boolean;override;//判断图形是否合法
{仅供分组使用}
function getMinPoint:TPoint;override;
function getMaxPoint:TPoint;override;
procedure addXY(x,y:longint;flags:integer;zoomScaleX:real=1.0;zoomScaleY:real=1.0);override;{增加XY的分量}
procedure setOrg;override;//设置分组的缩放点
end;
TDrawPline=class(TDrawObject)
protected
m_aPoints:TDrwPline;
m_oldx,m_oldy:longint;
Fm_number:longint;
old_aPoints:TDrwPline;
public
property m_number:longint read Fm_number write Fm_number;
constructor create;override;
procedure Selected(drwCanvas:TCanvas;select:boolean);override;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
procedure MoveAt(drwCanvas:TCanvas;flags:integer;x,y:longint);override;{以指定方式移动图元}
function SelectAt(x,y:longint):integer;override;{判断是否选择图元}
function NewPoint(x,y:longint):integer;override;{图形对象的第一点坐标,如果返回false则绘图结束}
function AddPoint(x,y:longint):integer;virtual;{增加下一个点}
procedure HotPoints(drwCanvas:TCanvas);override;{绘制热点}
procedure Save(stream:TStream);override;{保存文件}
procedure Load(stream:TStream);override;{获取文件}
function IsValid:boolean;override;
{仅供分组使用}
function getMinPoint:TPoint;override;
function getMaxPoint:TPoint;override;
procedure addXY(x,y:longint;flags:integer;zoomScaleX:real=1.0;zoomScaleY:real=1.0);override;
procedure setOrg;override;//设置分组的缩放点
end;
TDrawPolygon=class(TDrawPline)
private
fm_bIsEdit:boolean;
FBrushStyle:TBrushStyle;
FBrushColor:TColor;
public
property isEdit:boolean read fm_bIsEdit write fm_bIsEdit;
property BrushStyle:TBrushStyle read FBrushStyle write FBrushStyle;
property BrushColor:TColor read FBrushColor write FBrushColor;
constructor create;override;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
function SelectAt(x,y:longint):integer;override;{判断是否选择图元}
procedure MoveAt(drwCanvas:TCanvas;flags:integer;x,y:longint);override;{以指定方式移动图元}
procedure Save(stream:TStream);override;{保存文件}
procedure Load(stream:TStream);override;{获取文件}
end;
TDrawText=class(TDrawObject)
private
m_x1,m_x2,m_y1,m_y2:longint;
m_oldx,m_oldy:longint;
isFirst:boolean;
Ffont:TFont;
fBold:boolean;
fItalic:boolean;
fUnderLine:boolean;
fRect:TRect;
procedure setFont(value:TFont);
procedure setBold(value:boolean);
procedure setItaic(value:boolean);
procedure setUnderLine(value:boolean);
public
constructor create;override;
property isBold:boolean read fBold write setBold;
property isItaic:boolean read fItalic write setItaic;
property isUnderLine:boolean read fUnderLine write setUnderLine;
procedure Selected(drwCanvas:TCanvas;select:boolean);override;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
procedure MoveAt(drwCanvas:TCanvas;flags:integer;x,y:longint);override;{以指定方式移动图元}
function SelectAt(x,y:longint):integer;override;{判断是否选择图元}
function NewPoint(x,y:longint):integer;override;{图形对象的第一点坐标,如果返回false则绘图结束}
procedure HotPoints(drwCanvas:TCanvas);override;{绘制热点}
procedure Save(stream:TStream);override;{保存文件}
procedure Load(stream:TStream);override;{获取文件}
function IsValid:boolean;override;
destructor Destroy;override;
property Font:TFont read Ffont write setFont;
{仅供分组使用}
function getMinPoint:TPoint;override;
function getMaxPoint:TPoint;override;
procedure addXY(x,y:longint;flags:integer;zoomScaleX:real=1.0;zoomScaleY:real=1.0);override;
procedure setOrg;override;//设置分组的缩放点
end;
TDrawYcText=class(TDrawText)
private
fYc_Data:TYcData;
public
property Yc_Data:TYcData read fYc_Data write fYc_Data;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
procedure Save(stream:TStream);override;{保存文件}
procedure Load(stream:TStream);override;{获取文件}
constructor create;override;
end;
TDrawCurveText=class(TDrawText)
private
fCurve_Data:TCurveData;
public
property Curve_Data:TCurveData read fCurve_Data write fCurve_Data;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
procedure Save(stream:TStream);override;{保存文件}
procedure Load(stream:TStream);override;{获取文件}
constructor create;override;
end;
TDrawImage=class(TDrawObject)
private
m_x1,m_x2,m_y1,m_y2:longint;
m_oldx,m_oldy:longint;
ramBitmap:TBitmap;
isLoad:boolean;
fRect:TRect;
public
constructor create;override;
procedure Selected(drwCanvas:TCanvas;select:boolean);override;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
procedure MoveAt(drwCanvas:TCanvas;flags:integer;x,y:longint);override;{以指定方式移动图元}
function SelectAt(x,y:longint):integer;override;{判断是否选择图元}
function NewPoint(x,y:longint):integer;override;{图形对象的第一点坐标,如果返回false则绘图结束}
procedure HotPoints(drwCanvas:TCanvas);override;{绘制热点}
procedure Save(stream:TStream);override;{保存文件}
procedure Load(stream:TStream);override;{获取文件}
function IsValid:boolean;override;
procedure LoadBitmap(bitFile:string);
destructor Destroy;override;
{仅供分组使用}
function getMinPoint:TPoint;override;
function getMaxPoint:TPoint;override;
procedure addXY(x,y:longint;flags:integer;zoomScaleX:real=1.0;zoomScaleY:real=1.0);override;{增加XY的分量}
procedure setOrg;override;//设置分组的缩放点
end;
TDrawGroup=class(TDrawObject)
private
m_x1,m_x2,m_y1,m_y2:longint;
m_oldx,m_oldy:longint;
fList:TList;{存储各图元对象}
fGroup:TList;{存储组中包含的组对象}
offList:TList;
onList:TList;
isFirst:Boolean;
fRect:TRect;
fBrushColor:TColor;
procedure createObjects(drwRef: TDrwTool;tmpMode:TDrwStyle;f:TStream);
function Get(index:integer):Pointer;
function GetObjGroup(index:integer):Pointer;
function GetCount:integer;
procedure SetDeadXY(incX,incY:longint);//设置成绝对坐标或相对坐标
function getGroupObj:integer;
procedure setGroupBrushColor(value:TColor);
procedure setObjVisible(flag:Boolean);
public
constructor create;override;
procedure getRect;{获取矩形的两点坐标}
procedure setAllDeadXY;
procedure setAllVersus;
procedure Selected(drwCanvas:TCanvas;select:boolean);override;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
procedure MoveAt(drwCanvas:TCanvas;flags:integer;x,y:longint);override;{以指定方式移动图元}
function SelectAt(x,y:longint):integer;override;{判断是否选择图元}
procedure HotPoints(drwCanvas:TCanvas);override;{绘制热点}
procedure Save(stream:TStream);override;{保存文件}
procedure Load(stream:TStream);override;{获取文件}
destructor Destroy;override;
procedure addObject(value:Pointer);
procedure DeleteObjects;
property Objects[index:integer]:Pointer read Get;
property ObjGroups[index:integer]:Pointer read GetObjGroup;
property CountObjGroups:integer read getGroupObj;
property count:integer read GetCount;
property BrushColor:TColor read fBrushColor write setGroupBrushColor;
procedure ResetPenColor;
procedure ResetPenWidth;
{仅供分组使用}
function getMinPoint:TPoint;override;
function getMaxPoint:TPoint;override;
procedure addXY(x,y:longint;flags:integer;zoomScaleX:real=1.0;zoomScaleY:real=1.0);override;{增加XY的分量}
procedure setOrg;override;//设置分组的缩放点
procedure retSetObjOrg;//设置每个图元的相对位置
procedure UpOnOffList;
procedure turnOn;
procedure turnOff;
end;
TDrawFreeLine=class(TDrawPLine)
private
fBrushColor:TColor;
fBrushStyle:TBrushStyle;
public
property BrushStyle:TBrushStyle read FBrushStyle write FBrushStyle;
property BrushColor:TColor read FBrushColor write FBrushColor;
constructor create;override;
procedure Draw(drwCanvas:TCanvas);override;{绘制图元}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -