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

📄 islider.pas

📁 iocopm3.04源码,一套很好的工控开发工具
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    begin
      FMouseControlStyle := Value;
    end;
end;
//****************************************************************************************************************************************************
procedure TiSlider.SetOrientation(const Value: TiOrientation);
var
  TempWidth : Integer;
begin
  if FOrientation <> Value then
    begin
      FOrientation := Value;
      if not Loading then
        begin
          TempWidth := Width;
          Width     := Height;
          Height    := TempWidth;
          if Assigned(FOnAutoSize) then FOnAutoSize(Self);
        end;
      BackGroundChange;
    end;
end;
//****************************************************************************************************************************************************
procedure TiSlider.SetPointerStyle(const Value: TiSliderPointerStyle);
begin
  if FPointerStyle <> Value then
    begin
      FPointerStyle := Value;
      case FPointerStyle of
        ispsLed      : FTrack3DMargin := 2;
        ispsPointer  : FTrack3DMargin := 0;
        ispsBar      : FTrack3DMargin := 0;
        ispsLightBar : FTrack3DMargin := 0;
        ispsBarColor : FTrack3DMargin := 0;
        ispsBitmap   : FTrack3DMargin := 0;
      end;
      BackGroundChange;
    end;
end;
//****************************************************************************************************************************************************
procedure TiSlider.SetPointerBitmap(const Value: TBitmap);
begin
  FPointerBitmap.Assign(Value);
  FPointerBitmap.Transparent     := True;
  FPointerBitmap.TransparentMode := tmAuto;
end;
//****************************************************************************************************************************************************
function TiSlider.GetTravelRange: Integer;
var
  DrawRect : TRect;
begin
  DrawRect := Rect(0, 0 ,Width, Height);
  with DrawRect do
    case FOrientation of
      ioVertical   : Result := Bottom - Top  - FPointerHeight - (2 * FEndsMargin) - (2 * FTrack3DMargin);
      else           Result := Right  - Left - FPointerHeight - (2 * FEndsMargin) - (2 * FTrack3DMargin);
    end;
end;
//****************************************************************************************************************************************************
function TiSlider.GetPixelsToPosition(Value: Integer): Double;
var
  DrawRect          : TRect;
  PointRangePercent : Double;
  StartPosition     : Double;
begin
  DrawRect := Rect(0, 0 ,Width, Height);
  with DrawRect do
    case FOrientation of
      ioVertical   : if FReverseScale then StartPosition := Top    + FEndsMargin + FTrack3DMargin + FPointerHeight/2
                       else                StartPosition := Bottom - FEndsMargin - FTrack3DMargin - FPointerHeight/2;
      else           if FReverseScale then StartPosition := Right  - FEndsMargin - FTrack3DMargin - FPointerHeight/2
                       else                StartPosition := Left   + FEndsMargin + FTrack3DMargin + FPointerHeight/2;
    end;

  with DrawRect do                             
    case FOrientation of
      ioVertical   : if FReverseScale then PointRangePercent := (Value - StartPosition)/TravelRange
                       else                PointRangePercent := (StartPosition - Value)/TravelRange;
      else           if FReverseScale then PointRangePercent := (StartPosition - Value)/TravelRange
                       else                PointRangePercent := (Value - StartPosition)/TravelRange;
    end;

  if PointRangePercent > 1 then PointRangePercent := 1;
  if PointRangePercent < 0 then PointRangePercent := 0;

  Result := PointRangePercent*(PositionMax - PositionMin) + PositionMin;
end;
//****************************************************************************************************************************************************
procedure TiSlider.CalcPoints;
var
  ClientRect      : TRect;
  PointerOffset   : Integer;
  TrackWidth      : Integer;
  TrackOffet      : Integer;
begin
  FPointerRect := Rect(0,0,0,0);

  ClientRect := Rect(0, 0 ,Width, Height);

  case FPointerStyle of
    ispsLed      : begin FPointerOverlap := 0; TrackOffet := 0; end;
    ispsPointer  : begin FPointerOverlap := 4; TrackOffet := 5; end;
    ispsBitmap   : begin FPointerOverlap := 4; TrackOffet := 5; end;
    ispsBar      : begin FPointerOverlap := 4; TrackOffet := 5; end;
    ispsBarColor : begin FPointerOverlap := 4; TrackOffet := 5; end;
    ispsLightBar : begin FPointerOverlap := 4; TrackOffet := 5; end;
    else           begin FPointerOverlap := 0; TrackOffet := 0; end;
  end;

  if FReverseScale then
       PointerOffset := TravelRange - Round(TravelRange * ValuePercent(Position))
  else PointerOffset := Round(TravelRange * ValuePercent(Position));

  with ClientRect do
    begin
      TrackWidth := FPointerWidth + 2*FTrack3DMargin;
      case FOrientation of
        ioVertical   : begin
                         case FOrientationTickMarks of
                           iosTopLeft     : FTrackRect := Rect(Right-TrackOffet-TrackWidth-2,Top+FEndsMargin,Right-TrackOffet-2,           Bottom-FEndsMargin);
                           iosBottomRight : FTrackRect := Rect(Left +TrackOffet           +2,Top+FEndsMargin,Left +TrackOffet+TrackWidth+2,Bottom-FEndsMargin);
                         end;
                         with FTrackRect do
                           case FPointerStyle of
                             ispsLed      : FPointerRect:=Rect(Left+FTrack3DMargin, Bottom-FTrack3DMargin-PointerOffset-FPointerHeight,Right-FTrack3DMargin, Bottom-FTrack3DMargin-PointerOffset);
                             ispsPointer  : FPointerRect:=Rect(Left-FPointerOverlap,Bottom-FTrack3DMargin-PointerOffset-FPointerHeight,Right+FPointerOverlap,Bottom-FTrack3DMargin-PointerOffset);
                             ispsBitmap   : FPointerRect:=Rect(Left-FPointerOverlap,Bottom-FTrack3DMargin-PointerOffset-FPointerHeight,Right+FPointerOverlap,Bottom-FTrack3DMargin-PointerOffset);
                             ispsBar      : FPointerRect:=Rect(Left-FPointerOverlap,Bottom-FTrack3DMargin-PointerOffset-FPointerHeight,Right+FPointerOverlap,Bottom-FTrack3DMargin-PointerOffset);
                             ispsBarColor : FPointerRect:=Rect(Left-FPointerOverlap,Bottom-FTrack3DMargin-PointerOffset-FPointerHeight,Right+FPointerOverlap,Bottom-FTrack3DMargin-PointerOffset);
                             ispsLightBar : FPointerRect:=Rect(Left-FPointerOverlap,Bottom-FTrack3DMargin-PointerOffset-FPointerHeight,Right+FPointerOverlap,Bottom-FTrack3DMargin-PointerOffset);
                           end;
                       end;
        ioHorizontal : begin
                         case FOrientationTickMarks of
                           iosTopLeft     : FTrackRect := Rect(Left + FEndsMargin, Bottom - TrackWidth - TrackOffet -2, Right - FEndsMargin, Bottom - TrackOffet -2          );
                           iosBottomRight : FTrackRect := Rect(Left + FEndsMargin, Top    + TrackOffet              +2, Right - FEndsMargin, Top + TrackWidth + TrackOffet +2);
                         end;
                         with FTrackRect do
                           case FPointerStyle of
                             ispsLed      : FPointerRect:=Rect(Left+FTrack3DMargin+PointerOffset,Top+FTrack3DMargin, Left+FTrack3DMargin+PointerOffset+FPointerHeight,Bottom-FTrack3DMargin);
                             ispsPointer  : FPointerRect:=Rect(Left+FTrack3DMargin+PointerOffset,Top-FPointerOverlap,Left+FTrack3DMargin+PointerOffset+FPointerHeight,Bottom+FPointerOverlap);
                             ispsBitmap   : FPointerRect:=Rect(Left+FTrack3DMargin+PointerOffset,Top-FPointerOverlap,Left+FTrack3DMargin+PointerOffset+FPointerHeight,Bottom+FPointerOverlap);
                             ispsBar      : FPointerRect:=Rect(Left+FTrack3DMargin+PointerOffset,Top-FPointerOverlap,Left+FTrack3DMargin+PointerOffset+FPointerHeight,Bottom+FPointerOverlap);
                             ispsBarColor : FPointerRect:=Rect(Left+FTrack3DMargin+PointerOffset,Top-FPointerOverlap,Left+FTrack3DMargin+PointerOffset+FPointerHeight,Bottom+FPointerOverlap);
                             ispsLightBar : FPointerRect:=Rect(Left+FTrack3DMargin+PointerOffset,Top-FPointerOverlap,Left+FTrack3DMargin+PointerOffset+FPointerHeight,Bottom+FPointerOverlap);
                           end;
                       end;
      end;
    end;
end;
//****************************************************************************************************************************************************
procedure TiSlider.CalcAutoCenterOffsets;
var
  TotalWidth : Integer;
  ATextWidth : Integer;
begin
  FCenterOffsetX := 0;
  FCenterOffsetY := 0;

  if not FAutoCenter then Exit;

  if ShowTickLabels then
    begin
      with Canvas do
        begin
          Font.Assign(TickLabelFont);
          case Orientation of
            ioVertical   : ATextWidth := TextWidth (Trim(Format('%.' + IntToStr(GetDecimalPoints) + 'f', [PositionMax])));
            else           ATextWidth := TextHeight(Trim(Format('%.' + IntToStr(GetDecimalPoints) + 'f', [PositionMax])));
          end;
          TotalWidth := TickMargin + TickMajorLength + TickLabelMargin + ATextWidth;
        end;
    end
  else if ShowTicksMajor then TotalWidth := TickMargin + TickMajorLength
  else                        TotalWidth := 0;

  case FOrientation of
    ioVertical   : begin
                     TotalWidth := TotalWidth + FTrackRect.Right - FTrackRect.Left + FPointerOverlap;
                     FCenterOffsetX := (Width - TotalWidth) div 2;
                   end;
    ioHorizontal : begin
                     TotalWidth     := TotalWidth + FTrackRect.Bottom - FTrackRect.Top + FPointerOverlap;
                     FCenterOffsetY := (Height - TotalWidth) div 2;
                   end;
  end;
end;
//****************************************************************************************************************************************************
procedure TiSlider.iPaintTo(Canvas: TCanvas);
begin
  CalcPoints;
  CalcAutoCenterOffsets;

  case FOrientation of
    ioVertical   : begin
                     case FOrientationTickMarks of
                       iosBottomRight : begin
                                          OffsetRect(FTrackRect,   OffsetX, 0);
                                          OffsetRect(FPointerRect, OffsetX, 0);

                                          OffsetRect(FTrackRect,   FCenterOffsetX, 0);
                                          OffsetRect(FPointerRect, FCenterOffsetX, 0);
                                        end;
                       iosTopLeft     : begin
                                          OffsetRect(FTrackRect,   -OffsetX, 0);
                                          OffsetRect(FPointerRect, -OffsetX, 0);

                                          OffsetRect(FTrackRect,   -FCenterOffsetX, 0);
                                          OffsetRect(FPointerRect, -FCenterOffsetX, 0);
                                        end;
                     end;
                   end;
    ioHorizontal : begin
                     case FOrientationTickMarks of
                       iosBottomRight : begin
                                          OffsetRect(FTrackRect,   0, OffsetY);
                                          OffsetRect(FPointerRect, 0, OffsetY);

                                          OffsetRect(FTrackRect,   0, FCenterOffsetY);
                                          OffsetRect(FPointerRect, 0, FCenterOffsetY);
                                        end;
                       iosTopLeft     : begin
                                          OffsetRect(FTrackRect,   0, -OffsetY);
                                          OffsetRect(FPointerRect, 0, -OffsetY);

                                          OffsetRect(FTrackRect,   0, -FCenterOffsetY);
                                          OffsetRect(FPointerRect, 0, -FCenterOffsetY);
                                        end;
                     end;
                   end;
  end;

  DrawBackGround(Canvas, BackGroundColor);
  DrawBar       (Canvas);
  DrawTicks     (Canvas);
  DrawIndicator (Canvas);

  if FShowFocusRect and HasFocus then iDrawFocusRect(Canvas, ClientRect, BackGroundColor);
end;
//****************************************************************************************************************************************************
procedure TiSlider.DrawBar(Canvas: TCanvas);
begin

⌨️ 快捷键说明

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