📄 iswitchslider.pas
字号:
Brush.Color := clBtnFace;
Rectangle(Left, Top, Right, Bottom);
Pen.Color := clWhite; PolyLine([Point(Left, Bottom), Point(Left, Top ), Point(Right, Top )]);
Pen.Color := clBlack; PolyLine([Point(Right, Top ), Point(Right, Bottom), Point(Left, Bottom)]);
if FMouseDown or FKeyDown then
begin
case FOrientation of
ioHorizontal : begin
Pen.Color:=clBtnShadow; Line(Canvas, (Left+Right)div 2 -1,Top+1,(Left+Right)div 2 -1,Bottom-1);
Pen.Color:=FPointerIndicatorActiveColor;Line(Canvas, (Left+Right)div 2 +0,Top+1,(Left+Right)div 2 +0,Bottom-1);
Pen.Color:=clBtnHighlight; Line(Canvas, (Left+Right)div 2 +1,Top+1,(Left+Right)div 2 +1,Bottom-1);
end;
ioVertical : begin
Pen.Color:=clBtnShadow; Line(Canvas, Left+1,(Top+Bottom)div 2 -1,Right-1,(Top+Bottom)div 2 -1);
Pen.Color:=FPointerIndicatorActiveColor;Line(Canvas, Left+1,(Top+Bottom)div 2 +0,Right-1,(Top+Bottom)div 2 +0);
Pen.Color:=clBtnHighlight; Line(Canvas, Left+1,(Top+Bottom)div 2 +1,Right-1,(Top+Bottom)div 2 +1);
end;
end;
end
else
begin
case FOrientation of
ioHorizontal : begin
Pen.Color:=clBtnShadow; Line(Canvas, (Left+Right)div 2 -1, Top+1,(Left+Right)div 2 -1,Bottom-1);
Pen.Color:=FPointerIndicatorInactiveColor;Line(Canvas, (Left+Right)div 2 +0, Top+1,(Left+Right)div 2 +0,Bottom-1);
Pen.Color:=clBtnHighlight; Line(Canvas, (Left+Right)div 2 +1, Top+1,(Left+Right)div 2 +1,Bottom-1);
end;
ioVertical : begin
Pen.Color:=clBtnShadow; Line(Canvas, Left+1,(Top+Bottom)div 2 -1,Right-1,(Top+Bottom)div 2 -1);
Pen.Color:=FPointerIndicatorInactiveColor; Line(Canvas, Left+1,(Top+Bottom)div 2 +0,Right-1,(Top+Bottom)div 2 +0);
Pen.Color:=clBtnHighlight; Line(Canvas, Left+1,(Top+Bottom)div 2 +1,Right-1,(Top+Bottom)div 2 +1);
end;
end;
end;
end;
ispsPointer : begin
Pen.Color := clBlack;
if FMouseDown or FKeyDown then Brush.Color := FPointerHighLightColor else Brush.Color := FPointerColor;
case FOrientation of
ioHorizontal : case FOrientationLabels of
iosTopLeft : begin
Point1 := Point(Left, Bottom);
Point2 := Point(Left, Top + (Right - Left) div 2);
Point3 := Point((Right + Left) div 2, Top);
Point4 := Point(Right, Top + (Right - Left) div 2);
Point5 := Point(Right, Bottom);
Polygon([Point1, Point2, Point3, Point4, Point5]);
Pen.Color := clWhite; PolyLine([Point1, Point2, Point3]);
end;
iosBottomRight : begin
Point1 := Point(Left, Top);
Point2 := Point(Left, Bottom - (Right - Left) div 2);
Point3 := Point((Right + Left) div 2, Bottom);
Point4 := Point(Right, Bottom - (Right - Left) div 2);
Point5 := Point(Right, Top);
Polygon([Point1, Point2, Point3, Point4, Point5]);
Pen.Color := clWhite; PolyLine([Point5, Point1, Point2, Point3]);
end;
end;
ioVertical : case FOrientationLabels of
iosTopLeft : begin
Point1 := Point(Right, Top);
Point2 := Point(Left + (Bottom - Top) div 2, Top);
Point3 := Point(Left, (Bottom + Top) div 2);
Point4 := Point(Left + (Bottom - Top) div 2, Bottom);
Point5 := Point(Right, Bottom);
Polygon([Point1, Point2, Point3, Point4, Point5]);
Pen.Color := clWhite; PolyLine([Point1, Point2, Point3]);
end;
iosBottomRight : begin
Point1 := Point(Left, Top);
Point2 := Point(Right - (Bottom - Top) div 2, Top);
Point3 := Point(Right, (Bottom + Top) div 2);
Point4 := Point(Right - (Bottom - Top) div 2, Bottom);
Point5 := Point(Left, Bottom);
Polygon([Point1, Point2, Point3, Point4, Point5]);
Pen.Color := clWhite; PolyLine([Point5, Point1, Point2, Point3]);
end;
end;
end;
end;
ispsBitmap : begin
Draw((Left + Right) div 2 - FPointerBitmap.Width div 2, (Top + Bottom) div 2 - FPointerBitmap.Height div 2, FPointerBitmap);
end;
end;
end;
end;
//*************************************************************************************************************************************
procedure TiSwitchSlider.DrawTicks(Canvas: TCanvas; TrackRect: TRect);
var
LabelString : String;
LabelWidth : Integer;
LabelHeight : Integer;
x : Integer;
LabelMarginOffset : Integer;
PositionOffset : Integer;
IndicatorRect : TRect;
LineIndicatorRect : TRect;
begin
LabelMarginOffset := PositionLabelMargin;
if ShowPositionIndicators then LabelMarginOffset := LabelMarginOffset + PositionIndicatorMargin + PositionIndicatorSize;
with Canvas, TrackRect do
begin
for x := 0 to PositionLabelsList.Count-1 do
begin
PositionOffset := FTrack3DMargin + (FPointerHeight div 2) + Round(TravelRange /(PositionLabelsList.Count-1) * (x));
if ShowPositionIndicators then
begin
Brush.Style := bsSolid;
case FOrientation of
ioVertical : case FOrientationLabels of
iosBottomRight : IndicatorRect := Rect(Right + PositionIndicatorMargin, Bottom - PositionOffset - PositionIndicatorSize,
Right + PositionIndicatorMargin + 2*PositionIndicatorSize, Bottom - PositionOffset + PositionIndicatorSize);
iosTopLeft : IndicatorRect := Rect(Left - PositionIndicatorMargin - 2*PositionIndicatorSize, Bottom - PositionOffset - PositionIndicatorSize,
Left - PositionIndicatorMargin, Bottom - PositionOffset + PositionIndicatorSize);
end;
ioHorizontal : case FOrientationLabels of
iosBottomRight : IndicatorRect := Rect(Left + PositionOffset - PositionIndicatorSize, Bottom + PositionIndicatorMargin,
Left + PositionOffset + PositionIndicatorSize, Bottom + PositionIndicatorMargin + 2*PositionIndicatorSize);
iosTopLeft : IndicatorRect := Rect(Left + PositionOffset - PositionIndicatorSize, Top - PositionIndicatorMargin - 2*PositionIndicatorSize,
Left + PositionOffset + PositionIndicatorSize, Top - PositionIndicatorMargin );
end;
end;
case FPositionIndicatorStyle of
issisDot : with IndicatorRect do
begin
Pen.Style := psClear;
Brush.Color := PositionIndicatorColor;
Ellipse(Left, Top, Right, Bottom);
Pen.Style := psSolid;
case PositionIndicatorBevelStyle of
ibsRaised : begin
Pen.Color := clWhite;
Arc(Left, Top, Right, Bottom, Right, Top, Left, Bottom);
Pen.Color := clGray;
Arc(Left, Top, Right, Bottom, Left, Bottom, Right, Top);
end;
ibsLowered : begin
Pen.Color := clGray;
Arc(Left, Top, Right, Bottom, Right, Top, Left, Bottom);
Pen.Color := clWhite;
Arc(Left, Top, Right, Bottom, Left, Bottom, Right, Top);
end;
end;
end;
issisLine : with IndicatorRect do
begin
Pen.Color := PositionIndicatorColor;
case FOrientation of
ioVertical : LineIndicatorRect := Rect(Left, (Top + Bottom) div 2, Left + PositionIndicatorSize, (Top + Bottom) div 2);
ioHorizontal : LineIndicatorRect := Rect((Left + Right) div 2, Top, (Left + Right) div 2, Top + PositionIndicatorSize);
end;
case PositionIndicatorBevelStyle of
ibsNone : Line(Canvas, LineIndicatorRect.Left, LineIndicatorRect.Top, LineIndicatorRect.Right, LineIndicatorRect.Bottom);
else LineBevel(Canvas, LineIndicatorRect.Left, LineIndicatorRect.Top, LineIndicatorRect.Right, LineIndicatorRect.Bottom, PositionIndicatorBevelStyle);
end;
end;
end;
end;
if ShowPositionLabels then
begin
Brush.Style := bsClear;
if Position <> x then Font.Assign(PositionLabelInactiveFont) else Font.Assign(PositionLabelActiveFont);
if x <= PositionLabelsList.Count-1 then LabelString := PositionLabelsList.Strings[x] else LabelString := '???';
LabelWidth := TextWidth(LabelString);
LabelHeight := TextHeight(LabelString);
case FOrientation of
ioVertical : case FOrientationLabels of
iosBottomRight : TextOut(Right + LabelMarginOffset, Bottom - PositionOffset - LabelHeight div 2, LabelString);
iosTopLeft : TextOut(Left - LabelMarginOffset - LabelWidth, Bottom - PositionOffset - LabelHeight div 2, LabelString);
end;
ioHorizontal : case FOrientationLabels of
iosBottomRight : TextOut(Left + PositionOffset - LabelWidth div 2, Bottom + LabelMarginOffset, LabelString);
iosTopLeft : TextOut(Left + PositionOffset - LabelWidth div 2, Top - LabelMarginOffset - LabelHeight, LabelString);
end;
end;
end;
end;
end;
end;
//*************************************************************************************************************************************
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -