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

📄 islidingcompass.pas

📁 iocopm3.04源码,一套很好的工控开发工具
💻 PAS
📖 第 1 页 / 共 4 页
字号:
                                        end;
                     end;
        else         case FPointerOrientation of
                       iosBottomRight : begin
                                          Point1 := Point(PositionPixels,               FScaleRect.Bottom        );
                                          Point2 := Point(PositionPixels + ASize div 2, FScaleRect.Bottom + ASize);
                                          Point3 := Point(PositionPixels - ASize div 2, FScaleRect.Bottom + ASize);
                                        end;
                       else             begin
                                          Point1 := Point(PositionPixels,               FScaleRect.Top        );
                                          Point2 := Point(PositionPixels + ASize div 2, FScaleRect.Top - ASize);
                                          Point3 := Point(PositionPixels - ASize div 2, FScaleRect.Top - ASize);
                                        end;
                     end;
      end;
      Polygon([Point1, Point2, Point3]);
    end;
end;
//****************************************************************************************************************************************************
procedure TiSlidingCompass.DrawPointerDualArrow(Canvas: TCanvas; APosition : Double; AColor : TColor; ASize : Integer);
var
  Point1         : TPoint;
  Point2         : TPoint;
  Point3         : TPoint;
  PositionPixels : Integer;
begin
  with Canvas do
    begin
      PositionPixels := GetPositionToPixels(APosition);
      //---------------- Arrow 1 ----------------------------------------
      Brush.Style := bsSolid;
      Brush.Color := AColor;
      Pen.Color   := AColor;
      Pen.Width   := 1;

      case FOrientation of
        ioVertical : begin
                       Point1 := Point(FScaleRect.Left,         PositionPixels              );
                       Point2 := Point(FScaleRect.Left - ASize, PositionPixels + ASize div 2);
                       Point3 := Point(FScaleRect.Left - ASize, PositionPixels - ASize div 2);
                     end;
        else         begin
                       Point1 := Point(PositionPixels,               FScaleRect.Top        );
                       Point2 := Point(PositionPixels + ASize div 2, FScaleRect.Top - ASize);
                       Point3 := Point(PositionPixels - ASize div 2, FScaleRect.Top - ASize);
                     end;
      end;
      Polygon([Point1, Point2, Point3]);
      //---------------- Arrow 2 ----------------------------------------
      case FOrientation of
        ioVertical : begin
                       Point1 := Point(FScaleRect.Right,         PositionPixels              );
                       Point2 := Point(FScaleRect.Right + ASize, PositionPixels + ASize div 2);
                       Point3 := Point(FScaleRect.Right + ASize, PositionPixels - ASize div 2);
                     end;
        else         begin
                       Point1 := Point(PositionPixels,               FScaleRect.Bottom        );
                       Point2 := Point(PositionPixels + ASize div 2, FScaleRect.Bottom + ASize);
                       Point3 := Point(PositionPixels - ASize div 2, FScaleRect.Bottom + ASize);
                     end;
      end;
      Polygon([Point1, Point2, Point3]);
    end;
end;
//****************************************************************************************************************************************************
procedure TiSlidingCompass.DrawPointerPointer(Canvas: TCanvas; APosition : Double; AColor : TColor; ASize : Integer);
var
  Point1         : TPoint;
  Point2         : TPoint;
  Point3         : TPoint;
  Point4         : TPoint;
  Point5         : TPoint;
  PositionPixels : Integer;
begin
  with Canvas do
    begin
      PositionPixels := GetPositionToPixels(APosition);
      Brush.Style    := bsSolid;
      Brush.Color    := AColor;
      Pen.Color      := AColor;
      Pen.Width      := 1;

      case FOrientation of
        ioVertical : case FPointerOrientation of
                       iosBottomRight : begin
                                          Point1 := Point(FScaleRect.Right,           PositionPixels              );
                                          Point2 := Point(FScaleRect.Right +   ASize, PositionPixels + ASize div 2);
                                          Point3 := Point(FScaleRect.Right + 2*ASize, PositionPixels + ASize div 2);
                                          Point4 := Point(FScaleRect.Right + 2*ASize, PositionPixels - ASize div 2);
                                          Point5 := Point(FScaleRect.Right +   ASize, PositionPixels - ASize div 2);
                                        end;
                       else             begin
                                          Point1 := Point(FScaleRect.Left,           PositionPixels              );
                                          Point2 := Point(FScaleRect.Left -   ASize, PositionPixels + ASize div 2);
                                          Point3 := Point(FScaleRect.Left - 2*ASize, PositionPixels + ASize div 2);
                                          Point4 := Point(FScaleRect.Left - 2*ASize, PositionPixels - ASize div 2);
                                          Point5 := Point(FScaleRect.Left -   ASize, PositionPixels - ASize div 2);
                                        end;
                     end;
        else         case FPointerOrientation of
                       iosBottomRight : begin
                                          Point1 := Point(PositionPixels,               FScaleRect.Bottom          );
                                          Point2 := Point(PositionPixels + ASize div 2, FScaleRect.Bottom +   ASize);
                                          Point3 := Point(PositionPixels + ASize div 2, FScaleRect.Bottom + 2*ASize);
                                          Point4 := Point(PositionPixels - ASize div 2, FScaleRect.Bottom + 2*ASize);
                                          Point5 := Point(PositionPixels - ASize div 2, FScaleRect.Bottom +   ASize);
                                        end;
                       else             begin
                                          Point1 := Point(PositionPixels,               FScaleRect.Top          );
                                          Point2 := Point(PositionPixels + ASize div 2, FScaleRect.Top -   ASize);
                                          Point3 := Point(PositionPixels + ASize div 2, FScaleRect.Top - 2*ASize);
                                          Point4 := Point(PositionPixels - ASize div 2, FScaleRect.Top - 2*ASize);
                                          Point5 := Point(PositionPixels - ASize div 2, FScaleRect.Top -   ASize);
                                        end;
                     end;
      end;
      Polygon([Point1, Point2, Point3, Point4, Point5]);
    end;
end;
//****************************************************************************************************************************************************
procedure TiSlidingCompass.DrawScale(Canvas: TCanvas);
var
  CurentPosition  : Double;
  TextPosition    : Double;
  PositionPixels  : Integer;
  AText           : String;
  ARect           : TRect;
  AFlags          : TiTextFlags;
  x               : Integer;
  MajorStart      : Integer;
  MajorStop       : Integer;
  MinorStart      : Integer;
  MinorStop       : Integer;
  MidStart        : Integer;
  MidStop         : Integer;
  MajorLabelStart : Integer;
  MidLabelStart   : Integer;
  Polarity        : Integer;
  Edge            : Integer;
begin
  case FScaleOrientation of
    iosBottomRight : begin
                       Polarity := -1;
                       case FOrientation of
                         ioVertical : begin
                                        AFlags := [itfVCenter, itfHRight, itfSingleLine, itfNoClip];
                                        case FScaleAlignStyle of
                                          itasCenter : Edge := (FScaleRect.Left + FScaleRect.Right) div 2;
                                          else         Edge := FScaleRect.Right;
                                        end;
                                      end;
                         else         begin
                                        AFlags := [itfVBottom, itfHCenter, itfSingleLine, itfNoClip];
                                        case FScaleAlignStyle of
                                          itasCenter : Edge := (FScaleRect.Top + FScaleRect.Bottom) div 2;
                                          else         Edge := FScaleRect.Bottom;
                                        end;
                                      end;
                       end;
                     end;
    else             begin
                       Polarity := +1;
                       case FOrientation of
                         ioVertical : begin
                                        AFlags := [itfVCenter, itfHLeft, itfSingleLine, itfNoClip];
                                        case FScaleAlignStyle of
                                          itasCenter : Edge := (FScaleRect.Left + FScaleRect.Right) div 2;
                                          else         Edge := FScaleRect.Left;
                                        end;
                                      end;
                         else         begin
                                        AFlags := [itfVTop, itfHCenter, itfSingleLine, itfNoClip];
                                        case FScaleAlignStyle of
                                          itasCenter : Edge := (FScaleRect.Top + FScaleRect.Bottom) div 2;
                                          else         Edge := FScaleRect.Top;
                                        end;
                                      end;
                       end;
                     end;
  end;

  case FScaleAlignStyle of
    itasCenter : begin
                   MajorStart := Edge - (Polarity)*FHalfMajorLength;
                   MajorStop  := Edge + (Polarity)*FHalfMajorLength;
                   MinorStart := Edge - (Polarity)*FHalfMinorLength;
                   MinorStop  := Edge + (Polarity)*FHalfMinorLength;
                   MidStart   := Edge - (Polarity)*FHalfMidLength;
                   MidStop    := Edge + (Polarity)*FHalfMidLength;
                 end;
    else         begin
                   MajorStart := Edge;
                   MajorStop  := Edge + (Polarity)*2*FHalfMajorLength;
                   MinorStart := Edge;
                   MinorStop  := Edge + (Polarity)*2*FHalfMinorLength;
                   MidStart   := Edge;
                   MidStop    := Edge + (Polarity)*2*FHalfMidLength;
                 end;
  end;

  MajorLabelStart := MajorStop + (Polarity)*FTickMajorLabelMarginPixels;
  MidLabelStart   := MidStop   + (Polarity)*FTickMidLabelMarginPixels;

  with Canvas do
    begin
      CurentPosition := 0;
      Brush.Style := bsClear;
      while True do
        begin
          //--------------- Major ----------------------------------------------------------
          if Pen.Color <> FTickMajorColor then Pen.Color := FTickMajorColor;
          if Pen.Width <> FTickMajorWidth then Pen.Width := FTickMajorWidth;
          PositionPixels := GetPositionToPixels(CurentPosition);
          PolyLine([PointOrientation(MajorStart, PositionPixels, FOrientation),
                    PointOrientation(MajorStop,  PositionPixels, FOrientation)]);

          Font.Assign(FTickMajorLabelFont);
          TextPosition := CurentPosition;
          while TextPosition >= 360 do TextPosition := TextPosition - 360;
          while TextPosition <  0   do TextPosition := TextPosition + 360;
          AText := iFormatPrecisionStyle(TextPosition, FScaleSpan, FTickMajorLabelPrecision, ipsFixedDecimalPoints);
          ARect := RectOrientation(MajorLabelStart, PositionPixels, MajorLabelStart, PositionPixels, FOrientation);
          iDrawText(Canvas, AText, ARect, AFlags);
          //--------------- Minor ----------------------------------------------------------
          Font.Assign(FTickMidLabelFont);
          for x := 0 to FTickMinorCount - 1 do
            begin
              CurentPosition := CurentPosition + FTickMinorStepValue;

              PositionPixels := GetPositionToPixels(CurentPosition);
              if FMidTicksEnabled and (FMidTickNumber = x) then
                begin
                  if Pen.Color <> FTickMidColor then Pen.Color := FTickMidColor;
                  if Pen.Width <> FTickMidWidth then Pen.Width := FTickMidWidth;
                  PolyLine([PointOrientation(MidStart, PositionPixels, FOrientation),
                            PointOrientation(MidStop,  PositionPixels, FOrientation)]);

                  if FShowMidTickLabels then
                    begin
                      TextPosition := CurentPosition;
                      while TextPosition >= 360 do TextPosition := TextPosition - 360;
                      while TextPosition <  0   do TextPosition := TextPosition + 360;
                      AText := iFormatPrecisionStyle(TextPosition, FScaleSpan, FTickMidLabelPrecision, ipsFixedDecimalPoints);
                      ARect := RectOrientation(MidLabelStart, PositionPixels, MidLabelStart, PositionPixels, FOrientation);
                      iDrawText(Canvas, AText, ARect, AFlags);
                    end;
                end
              else
                begin
                  if Pen.Color <> FTickMinorColor then Pen.Color := FTickMinorColor;
                  if Pen.Width <> FTickMinorWidth then Pen.Width := FTickMinorWidth;
                  PolyLine([PointOrientation(MinorStart, PositionPixels, FOrientation),
                            PointOrientation(MinorStop,  PositionPixels, FOrientation)]);
                end;

            end;
          CurentPosition := CurentPosition + FTickMinorStepValue;
          if CurentPosition > 360 then Break;
        end;
    end;
end;
//****************************************************************************************************************************************************
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -