📄 iloggauge.pas
字号:
end;
end;
end;
//****************************************************************************************************************************************************
procedure TiLogGauge.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 TiLogGauge.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 TiLogGauge.DrawMinMax(Canvas: TCanvas);
begin
if ShowMaxPointer then
begin
FMaxPointer.Position := CurrentMax;
FMaxPointer.Margin := MinMaxPointerMargin;
FMaxPointer.Size := MinMaxPointerSize;
FMaxPointer.DrawScaleSide := False;
FMaxPointer.Color := MaxPointerColor;
DrawPointer(Canvas, FMaxPointer);
end;
if ShowMinPointer then
begin
FMinPointer.Position := CurrentMin;
FMinPointer.Margin := MinMaxPointerMargin;
FMinPointer.Size := MinMaxPointerSize;
FMinPointer.DrawScaleSide := False;
FMinPointer.Color := MinPointerColor;
DrawPointer(Canvas, FMinPointer);
end;
end;
//****************************************************************************************************************************************************
procedure TiLogGauge.DrawLimits(Canvas: TCanvas);
var
x : Integer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -