📄 iobjectcanvas.pas
字号:
var
iDrawObject : TiDrawObject;
begin
iDrawObject := GetObject(Handle);
iDrawObject.StopAngle := Value;
NeedsRedraw;
end;
//*************************************************************************************************************************************
function TiObjectCanvas.GetObjectStartAngle(Handle: Integer): Double;
var
iDrawObject : TiDrawObject;
begin
iDrawObject := GetObject(Handle);
Result := iDrawObject.StartAngle;
end;
//*************************************************************************************************************************************
function TiObjectCanvas.GetObjectStopAngle(Handle: Integer): Double;
var
iDrawObject : TiDrawObject;
begin
iDrawObject := GetObject(Handle);
Result := iDrawObject.StopAngle;
end;
//*************************************************************************************************************************************
procedure TiObjectCanvas.SetObjectSize(Handle: Integer; Width, Height: Double);
var
iDrawObject : TiDrawObject;
begin
iDrawObject := GetObject(Handle);
iDrawObject.Width := Width;
iDrawObject.Height := Height;
NeedsRedraw;
end;
//*************************************************************************************************************************************
procedure TiObjectCanvas.SetObjectSizeHeight(Handle: Integer; Height: Double);
var
iDrawObject : TiDrawObject;
begin
iDrawObject := GetObject(Handle);
iDrawObject.Height := Height;
NeedsRedraw;
end;
//*************************************************************************************************************************************
procedure TiObjectCanvas.SetObjectSizeWidth(Handle: Integer; Width: Double);
var
iDrawObject : TiDrawObject;
begin
iDrawObject := GetObject(Handle);
iDrawObject.Width := Width;
NeedsRedraw;
end;
//*************************************************************************************************************************************
function TiObjectCanvas.GetObjectSizeHeight(Handle: Integer): Double;
var
iDrawObject : TiDrawObject;
begin
iDrawObject := GetObject(Handle);
Result := iDrawObject.Height;
end;
//*************************************************************************************************************************************
function TiObjectCanvas.GetObjectSizeWidth(Handle: Integer): Double;
var
iDrawObject : TiDrawObject;
begin
iDrawObject := GetObject(Handle);
Result := iDrawObject.Width;
end;
//*************************************************************************************************************************************
procedure TiObjectCanvas.ObjectAddPolyPoint(Handle: Integer; X, Y: Double);
var
iDrawObject : TiDrawObject;
PointDouble : TPointDouble;
begin
iDrawObject := GetObject(Handle);
PointDouble.x := X;
PointDouble.y := Y;
iDrawObject.AddPolyPoint(PointDouble);
NeedsRedraw;
end;
//*************************************************************************************************************************************
procedure TiObjectCanvas.ObjectClearPolyPoints(Handle: Integer);
begin
GetObject(Handle).ClearPolyPoints;
NeedsRedraw;
end;
//*************************************************************************************************************************************
procedure TiObjectCanvas.ShiftObject(Handle: Integer; XDelta, YDelta: Double);
var
iDrawObject : TiDrawObject;
begin
iDrawObject := GetObject(Handle);
iDrawObject.X := iDrawObject.X + XDelta;
iDrawObject.Y := iDrawObject.Y + YDelta;
if iDrawObject.AType = tidoLine then
begin
iDrawObject.Width := iDrawObject.Width + XDelta;
iDrawObject.Height := iDrawObject.Height + YDelta;
end;
NeedsRedraw;
end;
//*************************************************************************************************************************************
procedure TiObjectCanvas.ShiftObjectX(Handle: Integer; XDelta: Double);
var
iDrawObject : TiDrawObject;
begin
iDrawObject := GetObject(Handle);
iDrawObject.X := iDrawObject.X + XDelta;
if iDrawObject.AType = tidoLine then
begin
iDrawObject.Width := iDrawObject.Width + XDelta;
end;
NeedsRedraw;
end;
//*************************************************************************************************************************************
procedure TiObjectCanvas.ShiftObjectY(Handle: Integer; YDelta: Double);
var
iDrawObject : TiDrawObject;
begin
iDrawObject := GetObject(Handle);
iDrawObject.Y := iDrawObject.Y + YDelta;
if iDrawObject.AType = tidoLine then
begin
iDrawObject.Height := iDrawObject.Height + YDelta;
end;
NeedsRedraw;
end;
//*************************************************************************************************************************************
procedure TiObjectCanvas.iPaintTo(Canvas: TCanvas);
var
i, Index : Integer;
iDrawObject : TiDrawObject;
CenterPoint : TPoint;
APoint : TPoint;
ScaleXFactor : Double;
ScaleYFactor : Double;
StartEndPoint : TPoint;
StopEndPoint : TPoint;
PointArray : PointDynamicArray;
begin
CenterPoint := GetCenterPoint(Canvas);
ScaleXFactor := Width /FDisplayRangeX;
ScaleYFactor := Height/FDisplayRangeY;
with Canvas, iDrawObject do
begin
DrawBackGround(Canvas, BackGroundColor);
for i := 0 to FObjectList.Count - 1 do
begin
iDrawObject := FObjectList.Objects[i] as TiDrawObject;
if not iDrawObject.Visible then Continue;
case iDrawObject.AType of
tidoEllipse : begin
Brush.Color := iDrawObject.BrushColor;
Brush.Style := iDrawObject.BrushStyle;
Pen.Color := iDrawObject.PenColor;
Pen.Style := iDrawObject.PenStyle;
Pen.Width := iDrawObject.PenWidth;
DrawRect := Rect(TruncHalf( (iDrawObject.X - FOriginX - iDrawObject.Width /2)*ScaleXFactor) + CenterPoint.X,
TruncHalf(-(iDrawObject.Y - FOriginY + iDrawObject.Height/2)*ScaleYFactor) + CenterPoint.Y,
TruncHalf( (iDrawObject.X - FOriginX + iDrawObject.Width /2)*ScaleXFactor) + CenterPoint.X,
TruncHalf(-(iDrawObject.Y - FOriginY - iDrawObject.Height/2)*ScaleYFactor) + CenterPoint.Y);
if ABS(DrawRect.Left - DrawRect.Right) < 2 then
begin
DrawRect.Right := DrawRect.Left + 2;
end;
if ABS(DrawRect.Top - DrawRect.Bottom) < 2 then
begin
DrawRect.Bottom := DrawRect.Top + 2;
end;
Ellipse(DrawRect.Left, DrawRect.Top, DrawRect.Right, DrawRect.Bottom);
if Trim(iDrawObject.FontCaption) <> '' then DrawObjectText(Canvas, iDrawObject, CenterPoint, ScaleXFactor, ScaleYFactor);
end;
tidoRectangle : begin
Brush.Color := iDrawObject.BrushColor;
Brush.Style := iDrawObject.BrushStyle;
Pen.Color := iDrawObject.PenColor;
Pen.Style := iDrawObject.PenStyle;
Pen.Width := iDrawObject.PenWidth;
DrawRect := Rect(TruncHalf( (iDrawObject.X - FOriginX - iDrawObject.Width /2)*ScaleXFactor) + CenterPoint.X,
TruncHalf(-(iDrawObject.Y - FOriginY + iDrawObject.Height/2)*ScaleYFactor) + CenterPoint.Y,
TruncHalf( (iDrawObject.X - FOriginX + iDrawObject.Width /2)*ScaleXFactor) + CenterPoint.X,
TruncHalf(-(iDrawObject.Y - FOriginY - iDrawObject.Height/2)*ScaleYFactor) + CenterPoint.Y);
if ABS(DrawRect.Left - DrawRect.Right) < 2 then
begin
DrawRect.Right := DrawRect.Left + 2;
end;
if ABS(DrawRect.Top - DrawRect.Bottom) < 2 then
begin
DrawRect.Bottom := DrawRect.Top + 2;
end;
Rectangle(DrawRect.Left, DrawRect.Top, DrawRect.Right, DrawRect.Bottom);
if Trim(iDrawObject.FontCaption) <> '' then DrawObjectText(Canvas, iDrawObject, CenterPoint, ScaleXFactor, ScaleYFactor);
end;
tidoArc : begin
Brush.Color := iDrawObject.BrushColor;
Brush.Style := iDrawObject.BrushStyle;
Pen.Color := iDrawObject.PenColor;
Pen.Style := iDrawObject.PenStyle;
Pen.Width := iDrawObject.PenWidth;
DrawRect := Rect(TruncHalf( (iDrawObject.X - FOriginX - iDrawObject.Width /2)*ScaleXFactor) + CenterPoint.X,
TruncHalf(-(iDrawObject.Y - FOriginY + iDrawObject.Height/2)*ScaleYFactor) + CenterPoint.Y,
TruncHalf( (iDrawObject.X - FOriginX + iDrawObject.Width /2)*ScaleXFactor) + CenterPoint.X,
TruncHalf(-(iDrawObject.Y - FOriginY - iDrawObject.Height/2)*ScaleYFactor) + CenterPoint.Y);
if ABS(DrawRect.Left - DrawRect.Right) < 2 then
begin
DrawRect.Right := DrawRect.Left + 2;
end;
if ABS(DrawRect.Top - DrawRect.Bottom) < 2 then
begin
DrawRect.Bottom := DrawRect.Top + 2;
end;
APoint := Point((DrawRect.Right + DrawRect.Left) div 2, (DrawRect.Bottom + DrawRect.Top) div 2);
StartEndPoint := GetXYRadPoint(iDrawObject.StartAngle, Width, APoint);
StopEndPoint := GetXYRadPoint(iDrawObject.StopAngle, Width, APoint);
Arc(DrawRect.Left, DrawRect.Top, DrawRect.Right, DrawRect.Bottom, StartEndPoint.X, StartEndPoint.Y, StopEndPoint.X, StopEndPoint.Y);
end;
tidoLine : begin
Pen.Color := iDrawObject.PenColor;
Pen.Style := iDrawObject.PenStyle;
Pen.Width := iDrawObject.PenWidth;
DrawRect := Rect(TruncHalf( (iDrawObject.X - FOriginX)*ScaleXFactor) + CenterPoint.X,
TruncHalf(-(iDrawObject.Y - FOriginY)*ScaleYFactor) + CenterPoint.Y,
TruncHalf( (iDrawObject.Width - FOriginX)*ScaleXFactor) + CenterPoint.X,
TruncHalf(-(iDrawObject.Height - FOriginY)*ScaleYFactor) + CenterPoint.Y);
Polyline([Point(DrawRect.Left, DrawRect.Top), Point(DrawRect.Right, DrawRect.Bottom)]);
end;
tidoText : DrawObjectText(Canvas, iDrawObject, CenterPoint, ScaleXFactor, ScaleYFactor);
tidoImage : begin
Brush.Style := bsSolid;
Brush.Color := BackGroundColor;
DrawRect := Rect(TruncHalf( (iDrawObject.X - FOriginX)*ScaleXFactor) + CenterPoint.X - FImageList.Width div 2,
TruncHalf(-(iDrawObject.Y - FOriginY)*ScaleYFactor) + CenterPoint.Y - FImageList.Height div 2,
TruncHalf( (iDrawObject.X - FOriginX)*ScaleXFactor) + CenterPoint.X + FImageList.Width div 2,
TruncHalf(-(iDrawObject.Y - FOriginY)*ScaleYFactor) + CenterPoint.Y + FImageList.Height div 2);
{$ifdef iVCL}
FImageList.Draw(Canvas,
TruncHalf( (iDrawObject.X - FOriginX)*ScaleXFactor) + CenterPoint.X - FImageList.Width div 2,
TruncHalf(-(iDrawObject.Y - FOriginY)*ScaleYFactor) + CenterPoint.Y - FImageList.Height div 2,
iDrawObject.ImageIndex,
True);
{$endif}
{$ifdef iCLX}
FImageList.Draw(Canvas,
TruncHalf( (iDrawObject.X - FOriginX)*ScaleXFactor) + CenterPoint.X - FImageList.Width div 2,
TruncHalf(-(iDrawObject.Y - FOriginY)*ScaleYFactor) + CenterPoint.Y - FImageList.Height div 2,
iDrawObject.ImageIndex,
itImage);
{$endif}
end;
tidoPolygon : begin
SetLength(PointArray, iDrawObject.PolyPointCount);
try
Brush.Color := iDrawObject.BrushColor;
Brush.Style := iDrawObject.BrushStyle;
Pen.Color := iDrawObject.PenColor;
Pen.Style := iDrawObject.PenStyle;
Pen.Width := iDrawObject.PenWidth;
for Index := 0 to iDrawObject.PolyPointCount-1 do
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -