> [3] Nizam (07.05.08 23:09)
TrackBar - в таком виде какой он есть в Д7 - не пойдет.
Как вариант можно "отнаследоваться" от TrackBar и "поднять" обработку мыши(MouseDown/Up) от TControl'а...
Затем в MouseDown "отключить" обработчик изменения положения ползунка по таймеру, а на MouseUp вернуть все назад...
Вот нечто так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ExtCtrls;
type
TMyTrBar = class(TTrackBar)
public
property OnMouseDown;
property OnMouseUp;
end;
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
Tr: TMyTrBar;
procedure TrBarChange(Sender: TObject);
procedure TrMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure TrMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
public
end;
var Form1: TForm1;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
Width:=450;
Height:=100;
Tr:=TMyTrBar.Create(Self);
with Tr do begin
Left:=10; Top:=10;
Width:=self.ClientWidth-20;
Max:=100;
Parent:=Self;
OnChange:=TrBarChange;
OnMouseDown:=TrMouseDown;
OnMouseUp:=TrMouseUp;
end;
end;
procedure TForm1.TrMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Timer1.OnTimer:=nil;
end;
procedure TForm1.TrMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Timer1.OnTimer:=Timer1Timer;
end;
procedure TForm1.TrBarChange(Sender: TObject);
begin
Tag:=Tr.Position;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Tag:=Tag mod 100 + 1;
Tr.Position:=Tag;
Caption:=IntToStr(Tag);
end;
end.