📄 islidingcompass.pas
字号:
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 + -