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

📄 fctrackbar.pas

📁 一套及时通讯的原码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
        DrawEdge(Handle, ThumbRect, EDGE_RAISED,//BDR_RAISEDINNER,
           BF_DIAGONAL_ENDTOPLEFT);
        ThumbRect.Left:= ALeft + DiagonalHeight;
        ThumbRect.Right:=ALeft + TrackButton.ClientWidth;
        Triangle[0]:= Point(ThumbRect.Left, ThumbRect.Top);
        Triangle[1]:= Point(ThumbRect.Right-2, ThumbRect.Top);
        Triangle[2]:= Point(ThumbRect.Left, ThumbRect.Bottom-1);
        Pen.Color:=ThumbColor;
        Pen.Color:=ThumbColor;
        Brush.Color:= ThumbColor;
        Polygon(Triangle);
        DrawEdge(Handle, ThumbRect, EDGE_RAISED,//BDR_RAISEDINNER,
          {BF_MIDDLE OR }BF_DIAGONAL_ENDBOTTOMLEFT);
      end;
   end
   else begin
     with Canvas do begin
        ThumbRect.Top:= ATop;
        ThumbRect.Bottom:= ThumbRect.Top + TrackButton.ClientHeight;
        DiagonalHeight:= (ThumbRect.Bottom-ThumbRect.Top) div 2;
        ThumbRect.Left:= ALeft;
        if TickMarks = tmfcBoth then
        begin
           ThumbRect.Right:= ThumbRect.Left + ThumbLength;
           Brush.Color:= ThumbColor;

           FillRect(ThumbRect);
           DrawEdge(Handle, ThumbRect, EDGE_RAISED,
              BF_TOP or BF_LEFT);
           DrawEdge(Handle, ThumbRect, EDGE_RAISED,
              BF_BOTTOM + BF_RIGHT);
           exit;
        end
        else if TickMarks = tmfcBottomRight then
        begin
          ThumbRect.Right:= ThumbRect.Left + ThumbLength - DiagonalHeight;
          Brush.Color:= ThumbColor;

          FillRect(ThumbRect);
          DrawEdge(Handle, ThumbRect, EDGE_RAISED,//BDR_RAISEDINNER,
             BF_TOP or BF_LEFT);
          DrawEdge(Handle, ThumbRect, EDGE_RAISED,//BDR_RAISEDINNER,
             BF_BOTTOM);

          ThumbRect.Left:= ThumbRect.Right-1;
          ThumbRect.Right:= ThumbRect.Left + DiagonalHeight;
          ThumbRect.Top:= ThumbRect.Top + 1;
          ThumbRect.Bottom:= ThumbRect.Top+ DiagonalHeight;


          Triangle[0]:= Point(ThumbRect.Left, ThumbRect.Top);
          Triangle[1]:= Point(ThumbRect.Left, ThumbRect.Bottom-1);
          Triangle[2]:= Point(ThumbRect.Right-1, ThumbRect.Bottom-1);
          Pen.Color:=ThumbColor;
          Brush.Color:= ThumbColor;
          Polygon(Triangle);
          DrawEdge(Handle, ThumbRect, EDGE_RAISED,//BDR_RAISEDINNER,
             BF_DIAGONAL_ENDTOPLEFT);

          ThumbRect.Top:= ATop + DiagonalHeight;
          ThumbRect.Bottom:=ATop + TrackButton.ClientHeight;
          Triangle[0]:= Point(ThumbRect.Left, ThumbRect.Top);
          Triangle[1]:= Point(ThumbRect.Left, ThumbRect.Bottom-1);
          Triangle[2]:= Point(ThumbRect.Right-1, ThumbRect.Top);
          Pen.Color:=ThumbColor;
          Brush.Color:= ThumbColor;
          Polygon(Triangle);
          DrawEdge(Handle, ThumbRect, EDGE_RAISED,//BDR_RAISEDINNER,
            {BF_MIDDLE OR }BF_DIAGONAL_ENDBOTTOMLEFT);
        end
        else begin
          ThumbRect.Left:= ThumbRect.Left + DiagonalHeight - 1;
          ThumbRect.Right:= ThumbRect.Left + ThumbLength - DiagonalHeight;
          Brush.Color:= ThumbColor;

          FillRect(ThumbRect);
          DrawEdge(Handle, ThumbRect, EDGE_RAISED,//BDR_RAISEDINNER,
             BF_TOP or BF_RIGHT);
          DrawEdge(Handle, ThumbRect, EDGE_RAISED,//BDR_RAISEDINNER,
             BF_BOTTOM);

          ThumbRect.Left:= ThumbRect.Left - DiagonalHeight+1;
          ThumbRect.Right:= ThumbRect.Left + DiagonalHeight;
          ThumbRect.Top:= ThumbRect.Top;
          ThumbRect.Bottom:= ThumbRect.Top+ DiagonalHeight;

          Triangle[0]:= Point(ThumbRect.right-1, ThumbRect.Top+1);
          Triangle[1]:= Point(ThumbRect.Right-1, ThumbRect.Bottom);
          Triangle[2]:= Point(ThumbRect.Left+1, ThumbRect.Bottom);
          Pen.Color:=ThumbColor;
          Brush.Color:= ThumbColor;
          Polygon(Triangle);
          DrawEdge(Handle, ThumbRect, EDGE_RAISED,//BDR_RAISEDINNER,
             BF_DIAGONAL_ENDTOPRIGHT);

          ThumbRect.Top:= ATop + DiagonalHeight;
          ThumbRect.Bottom:=ATop + TrackButton.ClientHeight;
          Triangle[0]:= Point(ThumbRect.Right-1, ThumbRect.Top+1);
          Triangle[1]:= Point(ThumbRect.Right-1, ThumbRect.Bottom-1);
          Triangle[2]:= Point(ThumbRect.Left+1, ThumbRect.Top+1);
          Pen.Color:=ThumbColor;
          Brush.Color:= ThumbColor;
          Polygon(Triangle);
          DrawEdge(Handle, ThumbRect, EDGE_RAISED,//BDR_RAISEDINNER,
            {BF_MIDDLE OR }BF_DIAGONAL_ENDBOTTOMRIGHT);//BOTTOMLEFT);
        end;

      end;
   end;
end;

procedure TfcTrackBar.DrawTickText(TickValue: Double; TickText: string; ARect: TRect);
var Flags: integer;
    DoDefault: boolean;
begin
  DoDefault:= True;
  if Assigned(FOnDrawTickText) then
     FOnDrawTickText(self, TickValue, TickText, ARect, DoDefault);
  if DoDefault then
  begin
     SetBkMode(Canvas.Handle, windows.TRANSPARENT);
     Flags:= DT_NOPREFIX;
     ARect.Right:= fcMax(ARect.Right, ARect.Left + Canvas.TextWidth(TickText));
     ARect.Bottom:= fcMax(ARect.Bottom, ARect.Top + Canvas.TextHeight(TickText));
     DrawText(Canvas.Handle, PChar(TickText), length(TickText), ARect, Flags);
  end;
end;

procedure TfcTrackBar.Paint;
var r: TRect;
    valstr: string;
    RulerRect: TRect;
    Current: Double;
    FocusRect: TRect;
    {$ifdef fcUseThemeManager}
    Details: TThemedElementDetails;
    {$endif}
    TickCount: integer;
    DrawFlags: Integer;

   procedure DrawTick(Current: Double; TickCount: integer);
   var x,y: integer;
       DisplayStr: string;
       ARect: TRect;
       DrawTickLabel: boolean;
   begin
      if TextAttributes.TickDisplayFormat = '' then
        DisplayStr:= floattostr(Current)
      else DisplayStr := FormatFloat(TextAttributes.TickDisplayFormat, Current);

      DrawTickLabel:= (TextAttributes.TickLabelFrequency >0) and ((TickCount mod TextAttributes.TickLabelFrequency) = 0);

      with Canvas do begin
           if orientation = trfcHorizontal then
           begin
              if TickMarks in [tmfcBottomRight, tmfcBoth] then
              begin
                 x:= RulerRect.Left + ValToPixel(Current);
                 y:= RulerRect.Bottom + FThumbTrackSeparation + 3;
                 MoveTo(x, y);
                 LineTo(x, y+4);

                 if DrawTickLabel then
                 begin
                     ARect:= Rect(x - TextWidth(DisplayStr) div 2, y+6,
                                  x + TextWidth(DisplayStr) div 2, y + 6 + TextHeight('A'));
                     DrawTickText(Current, DisplayStr, ARect);
                 end
              end;

              if TickMarks in [tmfcTopLeft, tmfcBoth] then
              begin
                x:= RulerRect.Left + ValToPixel(Current);
                y:= RulerRect.Top - 6 - 4;
                MoveTo(x, y+4);
                LineTo(x, y);
                if DrawTickLabel and (TickMarks <> tmfcBoth) then
                begin
                  ARect:= Rect(x-TextWidth(DisplayStr) div 2,
                               y - TextHeight('A')-1,
                               x + TextWidth(DisplayStr) div 2, y-1);
                  DrawTickText(Current, DisplayStr, ARect);
                end
              end;
           end
           else begin
              if TickMarks in [tmfcBottomRight, tmfcBoth] then
              begin
                 x:= RulerRect.Right + FThumbTrackSeparation + 3;
                 y:= RulerRect.Top + ValToPixel(Current);
                 MoveTo(x, y);
                 LineTo(x+4, y);
                 if DrawTickLabel then
                 begin
                   ARect:= Rect(x+6, y - TextHeight('A') div 2,
                                x+6+TextWidth(DisplayStr), y + TextHeight('A') div 2);
                   DrawTickText(Current, DisplayStr, ARect);
                 end
              end;

              if TickMarks in [tmfcTopLeft, tmfcBoth] then
              begin
                x:= RulerRect.Left - 6 - 4;
                y:= RulerRect.Top + ValToPixel(Current);
                MoveTo(x+4, y);
                LineTo(x, y);
                if DrawTickLabel and (TickMarks <> tmfcBoth) then
                begin
                  ARect:= Rect(x-TextWidth(DisplayStr)-1, y - TextHeight('A') div 2,
                               x-1, y + TextHeight('A') div 2);
                  DrawTickText(Current, DisplayStr, ARect);
                end
              end
           end;
      end;

   end;

begin
   inherited Paint;

   RulerRect:= GetTrackBarRect;
   if orientation = trfcHorizontal then
   begin
      RulerRect.Left:= RulerRect.Left - TrackButton.Width div 2 + 1;
      RulerRect.Right:= RulerRect.Right + (TrackButton.Width div 2 - 1);
   end
   else begin
      RulerRect.Top:= RulerRect.Top - TrackButton.Height div 2 + 1;
      RulerRect.Bottom:= RulerRect.Bottom + (TrackButton.Height div 2 - 1);
   end;

   if fcUseThemes(self) then
   begin
      {$ifdef fcUseThemeManager}
      Details := ThemeServices.GetElementDetails(ttbTrack);
      ThemeServices.DrawElement(Canvas.Handle, Details, RulerRect);
      {$endif}
   end
   else begin
      with Canvas do begin
         { Draw the ruler }
         Brush.Color:= TrackColor;
         FillRect(RulerRect);
         Pen.Color:= clBtnShadow;
         MoveTo(RulerRect.Left-1, RulerRect.Bottom);
         LineTo(RulerRect.Left-1, RulerRect.Top);
         LineTo(RulerRect.Right, RulerRect.Top);

         Pen.Color:= clGray;
         MoveTo(RulerRect.Left, RulerRect.Bottom);
         LineTo(RulerRect.Left, RulerRect.Top+1);
         LineTo(RulerRect.Right, RulerRect.Top + 1);

         Pen.Color:= clBtnFace;
         MoveTo(RulerRect.Left-1, RulerRect.Bottom-1);
         LineTo(RulerRect.Right, RulerRect.Bottom-1);
         LineTo(RulerRect.Right, RulerRect.Top);

         Pen.Color:= clBtnHighlight;
         MoveTo(RulerRect.Left-1, RulerRect.Bottom);
         LineTo(RulerRect.Right+1, RulerRect.Bottom);
         LineTo(RulerRect.Right+1, RulerRect.Top);
      end;

   end;

   if FTrackPartialFillColor<>clNone then
   begin
      r:= GetTrackBarRect;
      if orientation = trfcHorizontal then
      begin
         r.Left:= r.Left - TrackButton.Width div 2 + 1;
         r.Right:= r.Right + (TrackButton.Width div 2 - 1);
      end
      else begin
         r.Top:= r.Top - TrackButton.Height div 2 + 1;
         r.Bottom:= r.Bottom + (TrackButton.Height div 2 - 1);
      end;
      InflateRect(r, -1, -1);

      if Orientation = trfcVertical then
      begin
         if Inverted then
         begin
            r.top:= r.Top + ValToPixel(Position);
         end
         else begin
            r.Bottom:= GetTrackBarRect.Top + ValToPixel(Position);
         end;
       end
       else begin
         if Inverted then
         begin
            r.left:= GetTrackBarRect.Left + ValToPixel(Position);
         end
         else begin
            r.Right:= GetTrackBarRect.Left + ValToPixel(Position);
         end
       end;
       Canvas.Brush.Color:= FTrackPartialFillColor;
       Canvas.FillRect(r);
   end;

   if (SelStart<>0) and (SelEnd>SelStart) then
   begin
      if fcUseThemes(self) and false then
      begin
      end
      else begin
         r:= GetTrackBarRect;
         InflateRect(r, -1, -1);
         if Orientation = trfcVertical then
         begin
           if Inverted then
           begin
              r.top:= r.Top + ValToPixel(SelStart);
              r.Bottom:= GetTrackBarRect.Top + ValToPixel(SelEnd);
           end
           else begin
              r.top:= GetTrackBarRect.Top + ValToPixel(SelStart);
              r.Bottom:= GetTrackBarRect.Top + ValToPixel(SelEnd);
           end;
         end
         else begin
           if Inverted then
           begin
             r.left:= GetTrackBarRect.Left + ValToPixel(SelStart);
             r.Right:= GetTrackBarRect.Left + ValToPixel(selEnd);
           end
           else begin
             r.left:= GetTrackBarRect.Left + ValToPixel(SelStart);
             r.Right:= GetTrackBarRect.Left + ValToPixel(selEnd);
           end
         end;
         Canvas.Brush.Color:= clHighlight;
         Canvas.FillRect(r);
      end
   end;
         { Now draw all the tics }
   with Canvas do begin
         Current:=Min;
         TickCount:= 0;
         RulerRect:= GetTrackBarRect;
         if TickStyle<>tsfcNone then
         begin
           While current<=Max do begin
              Pen.color:= clBlack;
              if TickStyle=tsfcManual then
              begin
                 if Current=min then DrawTick(Current, TickCount);
              end
              else begin
                 DrawTick(Current, TickCount);
              end;
              Current:= Current + Frequency;
              TickCount:= TickCount + 1;
           end;
           if TickStyle=tsfcManual then DrawTick(Current - Frequency, TickCount);
         end
   end;

   if Focused and not (csPaintCopy in ControlState) then
   begin
      FocusRect:= ClientRect;
      InflateRect(FocusRect, -2, -2);
      DrawFocusRect(Canvas, FocusRect);
   end;

   if orientation = trfcHorizontal then
      PaintThumb(
       GetTrackBarRect.Left + ValToPixel(Position) - (TrackButton.Width div 2), TrackButton.top)
   else
      PaintThumb(
       TrackButton.Left, GetTrackBarRect.Top + ValToPixel(Position) - (TrackButton.Height div 2));

   if TextAttributes.Showtext then
   begin
     if TextAttributes.DisplayFormat = '' then
        valstr:= floattostr(GetDBValue)
//        Str(Position, valStr)
     else ValStr := FormatFloat(TextAttributes.DisplayFormat, GetDBValue);

//     valstr:= floattostr(position);
     r:= ClientRect;
     Canvas.Font.Assign(Font);

     if TextAttributes.Position = tbtLeft then
     begin
       r.left:= TextAttributes.OffsetX + 3;
       r.top:= RulerRect.Top + ((RulerRect.Bottom - RulerRect.Top) - Canvas.TextHeight(valstr)) div 2;
       r.top:= r.top + TextAttributes.OffsetY;
     end
     else if TextAttributes.Position = tbtRight then
     begin
       r.left:= ClientWidth - Canvas.TextWidth(valstr) - TextAttributes.OffsetX - 3;
       r.top:= RulerRect.Top + ((RulerRect.Bottom - RulerRect.Top) - Canvas.TextHeight(valstr)) div 2;
       r.top:= r.top + TextAttributes.OffsetY;
     end
     else if TextAttributes.Position = tbtTop then
     begin

⌨️ 快捷键说明

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