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

📄 ilineargauge.pas

📁 iocopm3.04源码,一套很好的工控开发工具
💻 PAS
📖 第 1 页 / 共 4 页
字号:
        end;
    end;
end;
//****************************************************************************************************************************************************
procedure TiLinearGauge.DrawIndicator(Canvas: TCanvas);
var
  PositionPixels : Integer;
  x              : Integer;
  FPointerOffSet : Integer;
  FPointerSize   : Integer;
  PointArray     : Array[0..4] of TPoint;
  ARect          : TRect;
  APointer       : TiGaugePointer;
begin
  for x := 0 to PointerManager.Count - 1 do
    begin
      APointer := PointerManager.Items[x];

      if not APointer.Visible then Continue;

      PositionPixels := GetPositionPixels(GetPointersPosition(x));

      with Canvas, FBarRect do
        begin
          Brush.Color := APointer.Color;
          Pen.Color   := APointer.Color;
          Brush.Style := bsSolid;
          Pen.Style   := psSolid;

          FPointerOffSet := APointer.Margin;
          FPointerSize   := APointer.Size;

          case TiLinearGaugePointerStyle(APointer.Style) of
            ilgpsTriangle : DrawPointer(Canvas, APointer);
            ilgpsPointer  : begin
                              case FOrientation of
                                ioVertical   : case FOrientationTickMarks of
                                                 iosBottomRight : begin
                                                                    PointArray[0] := Point(Left - FPointerOffset,                  PositionPixels - FPointerSize div 2);
                                                                    PointArray[1] := Point(Left - FPointerOffset +   FPointerSize, PositionPixels - FPointerSize div 2);
                                                                    PointArray[2] := Point(Left - FPointerOffset + 2*FPointerSize, PositionPixels                     );
                                                                    PointArray[3] := Point(Left - FPointerOffset +   FPointerSize, PositionPixels + FPointerSize div 2);
                                                                    PointArray[4] := Point(Left - FPointerOffset,                  PositionPixels + FPointerSize div 2);
                                                                  end;
                                                 iosTopLeft     : begin
                                                                    PointArray[0] := Point(Right + FPointerOffset,                 PositionPixels - FPointerSize div 2);
                                                                    PointArray[1] := Point(Right + FPointerOffset -   FPointerSize,PositionPixels - FPointerSize div 2);
                                                                    PointArray[2] := Point(Right + FPointerOffset - 2*FPointerSize,PositionPixels                     );
                                                                    PointArray[3] := Point(Right + FPointerOffset -   FPointerSize,PositionPixels + FPointerSize div 2);
                                                                    PointArray[4] := Point(Right + FPointerOffset,                 PositionPixels + FPointerSize div 2);
                                                                  end;
                                               end;
                                ioHorizontal : case FOrientationTickMarks of
                                                 iosBottomRight : begin
                                                                    PointArray[0] := Point(PositionPixels - FPointerSize div 2, Top    - FPointerOffset                 );
                                                                    PointArray[1] := Point(PositionPixels - FPointerSize div 2, Top    - FPointerOffset +   FPointerSize);
                                                                    PointArray[2] := Point(PositionPixels                     , Top    - FPointerOffset + 2*FPointerSize);
                                                                    PointArray[3] := Point(PositionPixels + FPointerSize div 2, Top    - FPointerOffset +   FPointerSize);
                                                                    PointArray[4] := Point(PositionPixels + FPointerSize div 2, Top    - FPointerOffset                 );
                                                                  end;
                                                 iosTopLeft     : begin
                                                                    PointArray[0] := Point(PositionPixels - FPointerSize div 2, Bottom + FPointerOffset                 );
                                                                    PointArray[1] := Point(PositionPixels - FPointerSize div 2, Bottom + FPointerOffset -   FPointerSize);
                                                                    PointArray[2] := Point(PositionPixels                     , Bottom + FPointerOffset - 2*FPointerSize);
                                                                    PointArray[3] := Point(PositionPixels + FPointerSize div 2, Bottom + FPointerOffset -   FPointerSize);
                                                                    PointArray[4] := Point(PositionPixels + FPointerSize div 2, Bottom + FPointerOffset                 );
                                                                 end;
                                               end;
                              end;
                              Polygon(PointArray);
                              {$IFDEF iVCL}
                              APointer.Region := CreatePolygonRgn(PointArray, 5, ALTERNATE);
                              {$ENDIF}
                            end;
            ilgpsTLine    : case FOrientation of
                              ioVertical   : case FOrientationTickMarks of
                                               iosBottomRight : begin
                                                                  Polyline([Point(Left - FPointerOffset,                 Top             ),
                                                                            Point(Left - FPointerOffset,                 Bottom          )]);
                                                                  Polyline([Point(Left - FPointerOffset+1,               Top             ),
                                                                            Point(Left - FPointerOffset+1,               Bottom          )]);
                                                                  Polyline([Point(Left - FPointerOffset,                 PositionPixels  ),
                                                                            Point(Left - FPointerOffset + FPointerSize,  PositionPixels  )]);
                                                                  Polyline([Point(Left - FPointerOffset,                 PositionPixels+1),
                                                                            Point(Left - FPointerOffset + FPointerSize,  PositionPixels+1)]);
                                                                  Polyline([Point(Left - FPointerOffset,                 PositionPixels-1),
                                                                            Point(Left - FPointerOffset + FPointerSize,  PositionPixels-1)]);

                                                                  ARect := Rect(Left - FPointerOffset, PositionPixels-4, Left - FPointerOffset + FPointerSize, PositionPixels+4);
                                                                  {$IFDEF iVCL}
                                                                  APointer.Region := CreateRectRgn(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
                                                                  {$ENDIF}
                                                                end;
                                               iosTopLeft     : begin
                                                                  Polyline([Point(Right + FPointerOffset-1,              Top             ),
                                                                            Point(Right + FPointerOffset-1,              Bottom          )]);
                                                                  Polyline([Point(Right + FPointerOffset-2,              Top             ),
                                                                            Point(Right + FPointerOffset-2,              Bottom          )]);
                                                                  Polyline([Point(Right + FPointerOffset,                PositionPixels  ),
                                                                            Point(Right + FPointerOffset - FPointerSize, PositionPixels  )]);
                                                                  Polyline([Point(Right + FPointerOffset,                PositionPixels+1),
                                                                            Point(Right + FPointerOffset - FPointerSize, PositionPixels+1)]);
                                                                  Polyline([Point(Right + FPointerOffset,                PositionPixels-1),
                                                                            Point(Right + FPointerOffset - FPointerSize, PositionPixels-1)]);

                                                                  ARect := Rect(Right + FPointerOffset - FPointerSize, PositionPixels-4, Right + FPointerOffset, PositionPixels+4);
                                                                  {$IFDEF iVCL}
                                                                  APointer.Region := CreateRectRgn(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
                                                                  {$ENDIF}
                                                                end;
                                             end;
                               ioHorizontal : case FOrientationTickMarks of
                                                iosBottomRight : begin
                                                                   Polyline([Point(Left,             Top - FPointerOffset+1               ),
                                                                             Point(Right,            Top - FPointerOffset+1               )]);
                                                                   Polyline([Point(Left,             Top - FPointerOffset+2               ),
                                                                             Point(Right,            Top - FPointerOffset+2               )]);
                                                                   Polyline([Point(Left,             Top - FPointerOffset+3               ),
                                                                             Point(Right,            Top - FPointerOffset+3               )]);
                                                                   Polyline([Point(PositionPixels-1, Top - FPointerOffset + FPointerSize+2),
                                                                             Point(PositionPixels-1, Top - FPointerOffset+2               )]);
                                                                   Polyline([Point(PositionPixels,   Top - FPointerOffset + FPointerSize+2),
                                                                             Point(PositionPixels,   Top - FPointerOffset+2               )]);
                                                                   Polyline([Point(PositionPixels+1, Top - FPointerOffset + FPointerSize+2),
                                                                             Point(PositionPixels+1, Top - FPointerOffset+2               )]);

                                                                  ARect := Rect(PositionPixels-4, Top - FPointerOffset+2, PositionPixels+4, Top - FPointerOffset + FPointerSize+2);
                                                                  {$IFDEF iVCL}
                                                                  APointer.Region := CreateRectRgn(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
                                                                  {$ENDIF}
                                                                 end;
                                                iosTopLeft     : begin
                                                                   Polyline([Point(Left,             Bottom + FPointerOffset-1               ),
                                                                             Point(Right,            Bottom + FPointerOffset-1               )]);
                                                                   Polyline([Point(Left,             Bottom + FPointerOffset-2               ),
                                                                             Point(Right,            Bottom + FPointerOffset-2               )]);
                                                                   Polyline([Point(Left,             Bottom + FPointerOffset-3               ),
                                                                             Point(Right,            Bottom + FPointerOffset-3               )]);
                                                                   Polyline([Point(PositionPixels-1, Bottom + FPointerOffset - FPointerSize-2),
                                                                             Point(PositionPixels-1, Bottom + FPointerOffset-2               )]);
                                                                   Polyline([Point(PositionPixels,   Bottom + FPointerOffset - FPointerSize-2),
                                                                             Point(PositionPixels,   Bottom + FPointerOffset-2               )]);
                                                                   Polyline([Point(PositionPixels+1, Bottom + FPointerOffset - FPointerSize-2),
                                                                             Point(PositionPixels+1, Bottom + FPointerOffset-2               )]);

                                                                  ARect := Rect(PositionPixels-4, Bottom + FPointerOffset - FPointerSize-2, PositionPixels+4, Bottom + FPointerOffset-2);
                                                                  {$IFDEF iVCL}
                                                                  APointer.Region := CreateRectRgn(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
                                                                  {$ENDIF}
                                                                end;
                                            end;
                            end;
            ilgpsColorBar : begin
                              case FOrientation of
                                ioVertical   : case FReverseScale of
                                                 False : ARect := Rect(Left, PositionPixels, Right,          Bottom        );
                                                 else    ARect := Rect(Left, Top,            Right,          PositionPixels);
                                               end;
                                ioHorizontal : case FReverseScale of
                                                 False : ARect := Rect(Left, Top,            PositionPixels, Bottom);
                                                 else    ARect := Rect(PositionPixels, Top,  Right,          Bottom);
                                               end;
                              end;

                              Rectangle(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);

                              {$IFDEF iVCL}
                              APointer.Region := CreateRectRgn(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
                              {$ENDIF}
                            end;
          end;
        end;
    end;
end;
//****************************************************************************************************************************************************
procedure TiLinearGauge.DrawPointer(Canvas: TCanvas; APointer: TiGaugePointer);
var
  PositionPixels             : Integer;
  ActualOrientationTickMarks : TiOrientationSide;
  PointArray                 : Array[0..2] of TPoint;
begin
  with Canvas, FBarRect, APointer do
    begin
      if DrawScaleSide then
        case FOrientationTickMarks of
          iosBottomRight : ActualOrientationTickMarks := iosTopLeft;
          else             ActualOrientationTickMarks := iosBottomRight;
         end
      else ActualOrientationTickMarks := FOrientationTickMarks;

      PositionPixels := GetPositionPixels(Position);
      Brush.Color := Color;
      Brush.Style := bsSolid;
      Pen.Color   := Color;
      case FOrientation of
        ioVertical   : case ActualOrientationTickMarks of
                         iosBottomRight : begin
                                            PointArray[0] := Point(Left-Margin,      PositionPixels-Size div 2);
                                            PointArray[1] := Point(Left-Margin+Size, PositionPixels           );
                                            PointArray[2] := Point(Left-Margin,      PositionPixels+Size div 2);
                                          end;
                         iosTopLeft     : begin
                                            PointArray[0] := Point(Right+Margin,     PositionPixels-Size div 2);
                                            PointArray[1] := Point(Right+Margin,     PositionPixels+Size div 2);
                                            PointArray[2] := Point(Right+Margin-Size,PositionPixels           );
                                          end;
                       end;
        ioHorizontal : case ActualOrientationTickMarks of
                         iosBottomRight : begin
                                            PointArray[0] := Point(PositionPixels-Size div 2,Top-Margin     );
                                            PointArray[1] := Point(PositionPixels+Size div 2,Top-Margin     );
                                            PointArray[2] := Point(PositionPixels           ,Top-Margin+Size);
                                          end;
                         iosTopLeft     : begin
                                            PointArray[0] := Point(PositionPixels-Size div 2,Bottom+Margin     );
                                            PointArray[1] := Point(PositionPixels+Size div 2,Bottom+Margin     );
                                            PointArray[2] := Point(PositionPixels           ,Bottom+Margin-Size);
                                          end;
                       end;
      end;

    Polygon(PointArray);
    {$IFDEF iVCL}
    APointer.Region := CreatePolygonRgn(PointArray, 3, ALTERNATE);
    {$ENDIF}
  end;
end;
//****************************************************************************************************************************************************
procedure TiLinearGauge.DrawMinMax(Canvas: TCanvas);
begin
  if ShowMaxPointer then
    begin

⌨️ 快捷键说明

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