если все же перемещать image:
Код:
var pressed:boolean;
tx:integer;
...
procedure TForm1.Panel2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Pressed:=true;
MediaPlayer1.Pause;
tx:=X;
end;
procedure TForm1.Panel2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Pressed then
begin
Panel2.Left:=Panel2.Left+x-tx;
MediaPlayer1.Position:=Round(MediaPlayer1.Length*(Panel2.Left/Panel1.Width));
tx:=x;
end;
end;
procedure TForm1.Panel2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Pressed:=false;
MediaPlayer1.Play;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var r:single;
begin
if MediaPlayer1.Length>0 then
r:=MediaPlayer1.Position/MediaPlayer1.Length
else
r:=0;
Panel2.Left:=Round({Image1.Left +} r*Panel1.Width); //раскомментить для TImage'й
end;
Но этот способ тормозной, особенно с медиаплеером (который ваще лучше не юзать). Лучше вручную рисовать на трекбаре, навроде этого (это без изображений, но на них заменить нетрудно):
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var r:single;
begin
...
with PaintBox3.Canvas do
begin
Pen.Style:=psSolid;
Brush.Color:=clBtnFace;
Rectangle(0, 0, PaintBox3.Width, PaintBox3.Height); //контур
Pen.Style:=psClear;
if BP.GetLength>0 then
r:=BP.GetPos/BP.GetLength
else
r:=0;
Brush.Color:=clRed;
Rectangle(1, 1, Round(PaintBox3.Width*r), PaintBox3.Height); //заливка
end;
...
end;