FAQ VCL
Компоненты\TrackBar

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как создать TrackBar, в котором вместо широкой белой полоски с ползунком была бы тонкая линия?

// В примере создается компонент, унаследованный от TTrackbar
// который переопределяет метод CreateParams и убират флаг
// TBS_ENABLESELRANGE из Style. Константа TBS_ENABLESELRANGE
// обьявлена в модуле CommCtrl

uses 
  {...,} CommCtrl, ComCtrls;

type TMyTrackBar = class(TTrackBar)
  public 
    procedure CreateParams(var Params: TCreateParams); override;
  end;

var
  Form1: TForm1;
  MyTrackbar: TMyTrackbar;

implementation

{ TMyTrackBar }

procedure TMyTrackBar.CreateParams(var Params: TCreateParams);
begin
   inherited;
   Params.Style := Params.Style and not TBS_ENABLESELRANGE;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   MyTrackBar := TMyTrackbar.Create( Form1 );
   MyTrackbar.Parent := Form1;
   MyTrackbar.Left := 10;
   MyTrackbar.Top := 10;
   MyTrackbar.Width := 150;
   MyTrackbar.Height := 45;
   MyTrackBar.Visible := true;
end;


Как изменить положение ползунка TrackBar кликом мыши?

type
  TTrackBar = class(Vcl.ComCtrls.TTrackBar)
  private
    procedure DoMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

  TForm1 = class(TForm)
    TrackBar1: TTrackBar;
    {...}
  end;

implementation

{$R *.dfm}

{ TTrackBar }

constructor TTrackBar.Create(AOwner: TComponent);
begin
  inherited;
  OnMouseDown := DoMouseDown;
end;

destructor TTrackBar.Destroy;
begin
  OnMouseDown := nil;
  inherited;
end;

procedure TTrackBar.DoMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Val: Double;
begin
  case Orientation of
    trHorizontal: Val := (X * Max) / Width;
    trVertical: Val := (Y * Max) / Height;
  end;
  Position := Round(Val);
end;

При использовании материала - ссылка на сайт обязательна