⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iobjectcanvas.pas

📁 iocopm3.04源码,一套很好的工控开发工具
💻 PAS
📖 第 1 页 / 共 5 页
字号:
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 + -