📄 drwobj.pas
字号:
else
result.X :=m_x2;
if m_y1>m_y2 then
result.Y :=m_y1
else
result.Y :=m_y2;
end;
function TDrawLine.getMinPoint: TPoint;
begin
if m_x1<m_x2 then
result.X :=m_x1
else
result.X :=m_x2;
if m_y1<m_y2 then
result.Y :=m_y1
else
result.Y :=m_y2;
end;
procedure TDrawLine.HotPoints(drwCanvas: TCanvas);
begin
HotPoint(drwCanvas,round(m_x1*fZoomScale),round(m_y1*fZoomScale));
HotPoint(drwCanvas,round(m_x2*fZoomScale),round(m_y2*fZoomScale));
end;
function TDrawLine.IsValid: boolean;
var
t1,t2:TPoint;
begin
t1:=Point(m_x1,m_y1);
t2:=Point(m_x2,m_y2);
result:=not IsEqual(t1,t2);
end;
procedure TDrawLine.Load(stream: TStream);
begin
inherited;
stream.Read(m_x1,sizeOf(longint));
stream.Read(m_y1,sizeOf(longint));
stream.Read(m_x2,sizeOf(longint));
stream.Read(m_y2,sizeOf(longint));
stream.Read(fArrowStyle,sizeOf(TArrowStyle));
end;
procedure TDrawLine.MoveAt(drwCanvas: TCanvas; flags, x, y: Integer);
var
oldPenMode:TPenMode;
oldpenWidth:integer;
oldpenStyle:TPenStyle;
oldPenColor:TColor;
begin
oldPenMode:=drwCanvas.Pen.Mode;
oldpenWidth:=drwCanvas.Pen.Width ;
oldpenStyle:=drwCanvas.Pen.Style;
oldPenColor:=drwCanvas.Pen.Color;
drwCanvas.Pen.Style:=getPenStyle;
drwCanvas.Pen.width:=1;
drwCanvas.Pen.Color :=clBlack;
drwCanvas.Pen.Mode:=pmNotXor;
if mSelected then
HotPoints(drwCanvas);
{删除原图形线}
{ if fArrowStyle<>arNone then
drawArrow(drwCanvas,Point(round(m_x1*fZoomScale),round(m_y1*fZoomScale)),Point(round(m_x2*fZoomScale),round(m_y2*fZoomScale)),fArrowStyle);}
drwCanvas.MoveTo(round(m_x1*fZoomScale),round(m_y1*fZoomScale));
drwCanvas.LineTo(round(m_x2*fZoomScale),round(m_y2*fZoomScale));
{修改新图形坐标}
if flags=1 then
begin
m_x1:=x;
m_y1:=y;
end
else if flags=2 then
begin
m_x2:=x;
m_y2:=y;
end
else if flags=-1 then
begin
m_x1:=m_x1+x-m_oldx;
m_y1:=m_y1+y-m_oldy;
m_x2:=m_x2+x-m_oldx;
m_y2:=m_y2+y-m_oldy;
m_oldx:=x;
m_oldy:=y;
end;
{绘制新图形}
drwCanvas.MoveTo(round(m_x1*fZoomScale),round(m_y1*fZoomScale));
drwCanvas.LineTo(round(m_x2*fZoomScale),round(m_y2*fZoomscale));
{ if fArrowStyle<>arNone then
drawArrow(drwCanvas,Point(round(m_x1*fZoomScale),round(m_y1*fZoomScale)),Point(round(m_x2*fZoomScale),round(m_y2*fZoomscale)),fArrowStyle);}
{如果以前选择了,设置热点}
if mSelected then
HotPoints(drwCanvas);
{恢复画笔的默认模式}
drwCanvas.Pen.Mode :=oldPenMode;
drwCanvas.Pen.Width :=oldpenWidth;
drwCanvas.Pen.Style :=oldpenStyle;
drwCanvas.Pen.Color :=oldPenColor;
end;
function TDrawLine.NewPoint(x, y: Integer):integer;
begin
m_x1:=x;m_x2:=x;
m_y1:=y;m_y2:=y;
result:=2;
end;
procedure TDrawLine.Save(stream: TStream);
begin
inherited save(stream);
stream.Write(m_x1,sizeOf(longint));
stream.Write(m_y1,sizeOf(longint));
stream.Write(m_x2,sizeOf(longint));
stream.Write(m_y2,sizeOf(longint));
stream.Write(fArrowStyle,sizeOf(TArrowStyle));
end;
function TDrawLine.SelectAt(x, y: Integer): integer;
begin
if AtPoint(x,y,m_x1,m_y1) then
result:=1
else if AtPoint(x,y,m_x2,m_y2) then
result:=2
else if AtLine(x,y,m_x1,m_y1,m_x2,m_y2) then
begin
m_oldx:=x;
m_oldy:=y;
result:=-1;
end
else
result:=0;
end;
procedure TDrawLine.Selected(drwCanvas: TCanvas; select: boolean);
begin
if not Assigned(self) then
exit;
if select then
begin
if not mSelected then
begin
HotPoints(drwCanvas);
mSelected:=true;
end;
end
else
begin
if mSelected then
begin
HotPoints(drwCanvas);
mSelected:=false;
end;
end;
end;
procedure TDrawLine.setOrg;
begin
inherited;
fRect:=Rect(m_x1,m_y1,m_x2,m_y2);
end;
{ TDrawRect }
procedure TDrawRect.Action_X;
var
midY:longint;
begin
midy:=m_y1;
m_y1:=m_y2-2*(m_y2-m_y1);m_y2:=midY;
end;
procedure TDrawRect.Action_Y;
begin
taisho_y;
m_x1:=affinex(m_x1,m_y1,1);m_x2:=affinex(m_x2,m_y2,1);
m_y1:=affiney(m_x1,m_y1,1);m_y2:=affinex(m_x2,m_y2,1);
end;
procedure TDrawRect.addXY(x, y, flags: integer;zoomScaleX:real=1.0;zoomScaleY:real=1.0);
begin
if flags=-1 then
begin
m_x1:=round(m_x1*zoomScaleX+x);
m_y1:=round(m_y1*zoomScaleY+y);
m_x2:=round(m_x2*zoomScaleX+x);
m_y2:=round(m_y2*zoomScaleY+y);
end;
if flags<>-1 then
begin
m_x1:=round(fRect.Left*zoomScaleX);
m_y1:=round(fRect.Top*zoomScaleY);
m_x2:=round(fRect.Right*zoomScaleX);
m_y2:=round(fRect.Bottom*zoomScaleY);
end;
end;
constructor TDrawRect.create;
begin
inherited;
FIsRoundRect:=false;
FBrushColor:=clSilver;
FBrushStyle:=bsClear;
m_x1:=0;m_x2:=0;
m_y1:=0;m_y2:=0;
m_oldx:=0;m_oldy:=0;
end;
procedure TDrawRect.Draw(drwCanvas: TCanvas);
var
oldPenColor,oldBrushColor:TColor;
oldPenWidth:integer;
oldBrushStyle:TBrushStyle;
oldPenStyle:TPenStyle;
oldPenMode:TPenMode;
t:TRect;
rgn:HRgn;
begin
if Not Visible then
exit;
oldPenColor:=drwCanvas.Pen.Color;
oldBrushColor:=drwCanvas.Brush.Color;
oldBrushStyle:=drwCanvas.Brush.Style;
oldPenStyle:=drwCanvas.Pen.Style;
oldPenWidth:=drwCanvas.Pen.Width;
oldPenMode:=drwCanvas.Pen.Mode;
{设置新的画笔和画刷的属性}
drwCanvas.Pen.Mode :=pmCopy;
drwCanvas.Pen.Color :=GetPenColor;
drwCanvas.Pen.Width :=getPenWidth;
drwCanvas.Pen.Style :=getPenStyle;
drwCanvas.Brush.Color :=FBrushColor;
drwCanvas.Brush.Style :=FBrushStyle;
{画矩形}
t.Left :=m_x1;t.Top :=m_y1;
t.Right :=m_x2;t.Bottom :=m_y2;
{进行方向正常化}
NormalRect(t);
m_x1:=t.Left;m_y1:=t.Top;
m_x2:=t.Right;m_y2:=t.Bottom;
{进行图形坐标的缩放}
t.TopLeft :=Point(round(m_x1*fZoomScale),round(m_y1*fZoomScale));
t.BottomRight :=Point(round(m_x2*fZoomScale),round(m_y2*fZoomScale));
//判断是否是渐变填充
if Gradient then
begin
drwCanvas.Brush.Style :=bsSolid;
if FIsRoundRect then
rgn:=CreateRoundRectRgn(t.Left,t.Top,t.Right,t.Bottom,
round(10*fZoomScale),round(10*fZoomScale))
else
rgn:=CreateRectRgn(t.Left,t.Top,t.Right,t.Bottom);
SelectClipRgn(drwCanvas.Handle,rgn);
FillWithGradient(drwCanvas,beginColor,endColor,GradientStyle,t);
SelectClipRgn(drwCanvas.Handle,0);
DeleteObject(rgn);
drwCanvas.Brush.Style :=bsClear;
if FIsRoundRect then
drwCanvas.RoundRect(t.Left,t.Top,t.Right,t.Bottom,round(10*fZoomScale),round(10*fzoomScale))
else
drwCanvas.Rectangle(t);
end
else begin
if FIsRoundRect then
drwCanvas.RoundRect(t.Left,t.Top,t.Right,t.Bottom,round(10*fZoomScale),round(10*fzoomScale))
else
drwCanvas.Rectangle(t);
end;
{恢复画笔和画刷的原先设置}
drwCanvas.Pen.Color :=oldPenColor;
drwCanvas.Pen.Width :=oldPenWidth;
drwCanvas.Pen.Mode :=oldPenMode;
drwCanvas.Brush.Color :=oldBrushColor;
drwCanvas.Brush.Style :=oldBrushStyle;
drwCanvas.Pen.Style :=oldPenStyle;
if FSelected then
HotPoints(drwCanvas);
end;
function TDrawRect.getMaxPoint: TPoint;
begin
result:=Point(m_x2,m_y2);
end;
function TDrawRect.getMinPoint: TPoint;
begin
result:=Point(m_x1,m_y1);
end;
procedure TDrawRect.HotPoints(drwCanvas: TCanvas);
begin
HotPoint(drwCanvas,round(m_x1*fZoomScale),round(m_y1*fZoomScale));
HotPoint(drwCanvas,round(m_x2*fZoomScale),round(m_y1*fZoomScale));
HotPoint(drwCanvas,round(m_x1*fZoomScale),round(m_y2*fZoomScale));
HotPoint(drwCanvas,round(m_x2*fZoomScale),round(m_y2*fZoomScale));
end;
function TDrawRect.IsValid: boolean;
var
t1,t2:TPoint;
begin
t1:=Point(m_x1,m_y1);
t2:=Point(m_x2,m_y2);
result:=not PointsEqual(t1,t2);
end;
procedure TDrawRect.Load(stream: TStream);
begin
inherited Load(stream);
stream.Read(FIsRoundRect,sizeOf(Boolean));
stream.Read(FBrushColor,sizeOf(TColor));
stream.Read(FBrushStyle,sizeOf(TBrushStyle));
stream.Read(m_x1,sizeOf(longint));
stream.Read(m_y1,sizeOf(longint));
stream.Read(m_x2,sizeOf(longint));
stream.Read(m_y2,sizeOf(longint));
end;
procedure TDrawRect.MoveAt(drwCanvas: TCanvas; flags, x, y: Integer);
var
oldPenColor:TColor;
oldPenWidth:integer;
oldBrushStyle:TBrushStyle;
oldPenStyle:TPenStyle;
oldPenMode:TPenMode;
t:TRect;
begin
oldPenColor:=drwCanvas.Pen.Color;
oldBrushStyle:=drwCanvas.Brush.Style;
oldPenWidth:=drwCanvas.Pen.Width;
oldPenMode:=drwCanvas.Pen.Mode;
oldPenStyle:=drwCanvas.Pen.Style;
{设置新的画笔和画刷的属性}
drwCanvas.Pen.Mode :=pmNotXor;
drwCanvas.Pen.Width :=1;
drwCanvas.Brush.Style :=bsClear;
drwCanvas.Pen.Color :=clBlack;
drwCanvas.Pen.Style :=getPenStyle;
{如果存在热点,则取消热点}
if mSelected then
HotPoints(drwCanvas);
{画矩形}
t.Left :=m_x1;t.Top :=m_y1;
t.Right :=m_x2;t.Bottom :=m_y2;
{进行图形坐标的缩放}
t.TopLeft :=Point(round(m_x1*fZoomScale),round(m_y1*fZoomScale));
t.BottomRight :=Point(round(m_x2*fZoomScale),round(m_y2*fZoomScale));
{删除原图形}
if FIsRoundRect then
drwCanvas.RoundRect(round(m_x1*fZoomScale),round(m_y1*fZoomScale),round(m_x2*fZoomScale),round(m_y2*fZoomScale),10,10)
else
drwCanvas.Rectangle(t);
{修改图形坐标}
if flags=1 then
begin
m_x1:=x;
m_y1:=y;
end
else if flags=2 then
begin
m_x1:=x;
m_y2:=y;
end
else if flags=3 then
begin
m_x2:=x;
m_y1:=y;
end
else if flags=4 then
begin
m_x2:=x;
m_y2:=y;
end
else if flags=-1 then
begin
m_x1:=m_x1+x-m_oldx;
m_y1:=m_y1+y-m_oldy;
m_x2:=m_x2+x-m_oldx;
m_y2:=m_y2+y-m_oldy;
m_oldx:=x;
m_oldy:=y;
end;
t.Left :=m_x1;t.Top :=m_y1;
t.Right :=m_x2;t.Bottom :=m_y2;
{进行图形坐标的缩放}
t.TopLeft :=Point(round(m_x1*fZoomScale),round(m_y1*fZoomScale));
t.BottomRight :=Point(round(m_x2*fZoomScale),round(m_y2*fZoomScale));
{绘制新图形}
if FIsRoundRect then
drwCanvas.RoundRect(round(m_x1*fZoomScale),round(m_y1*fZoomScale),round(m_x2*fZoomScale),round(m_y2*fZoomScale),10,10)
else
drwCanvas.Rectangle(t);
if mSelected then
HotPoints(drwCanvas);
{恢复默认值}
{恢复画笔和画刷的原先设置}
drwCanvas.Pen.Color :=oldPenColor;
drwCanvas.Pen.Width :=oldPenWidth;
drwCanvas.Pen.Mode :=oldPenMode;
drwCanvas.Brush.Style :=oldBrushStyle;
drwCanvas.Pen.Style :=oldPenStyle;
end;
function TDrawRect.NewPoint(x, y: Integer): integer;
begin
m_x1:=x;m_x2:=x;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -