![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
как нам выполнять действия переодически
тоесть ежесекундно выполнять MediaPlayer1.Position:=TrackBar2.Position; |
|
#2
|
|||
|
|||
|
Привязать к таймеру (TTimer)
Интервал поставить на 1000 В процедуре на событие таймера прописать Код:
MediaPlayer1.Position:=TrackBar2.Position; А так же когда плеер не активен таймер можно отключать. |
|
#3
|
||||
|
||||
|
совместно с таймером работает
Код:
TrackBar2.Position:=MediaPlayer1.Position; Код:
procedure TfrmMyBrowser.TrackBar2Change(Sender: TObject); var a: integer; begin Timer2.Enabled := False; MediaPlayer1.Pause; MediaPlayer1.Position:=TrackBar2.Position; a := MediaPlayer1.Position; sec := a div 1000 mod 60; min := a div 60000; Timer2.Enabled := True; MediaPlayer1.Play; end; и выходит тупое заедание можно ли както сделать чтобы сробатывало TrackBar2Change только на действия мышки а не программного перемещения. |
|
#4
|
||||
|
||||
|
например так
Код:
var poschange:boolean; ... procedure TfrmMyBrowser.TrackBar2MouseDown(Sender: TObject;X,Y:integer;Button:TMouseButton); begin poschange:=true; end; procedure TfrmMyBrowser.TrackBar2MouseUp(Sender: TObject;X,Y:integer;Button:TMouseButton); begin poschange:=false; end; procedure TfrmMyBrowser.TrackBar2Change(Sender: TObject); var a: integer; begin if poschange then begin Timer2.Enabled := False; MediaPlayer1.Pause; MediaPlayer1.Position:=TrackBar2.Position; a := MediaPlayer1.Position; sec := a div 1000 mod 60; min := a div 60000; Timer2.Enabled := True; MediaPlayer1.Play; end; end; |
|
#5
|
||||
|
||||
|
все бы ничего но но в трек баре TrackBar2MouseDown такого нет
|
|
#6
|
||||
|
||||
|
TrackBar2MouseDown там и не должно быть... Используйте TrackBar2Change...
|
|
#7
|
||||
|
||||
|
и так используем прочитай выше
|
|
#8
|
||||
|
||||
|
Цитата:
Тупо убери poschange и все будет работать... Код:
procedure TfrmMyBrowser.TrackBar2Change(Sender: TObject); var a: integer; begin //if poschange then //begin Timer2.Enabled := False; MediaPlayer1.Pause; MediaPlayer1.Position:=TrackBar2.Position; a := MediaPlayer1.Position; sec := a div 1000 mod 60; min := a div 60000; Timer2.Enabled := True; MediaPlayer1.Play; end; //end; ЗЫ вот не давно добавили исходник плеера на бассе: http://delphisources.ru/pages/source...my-player.html Скачай, посмотри, может будет бас использовать, вместо медиа плеера. Во первых сразу багов меньше будет, а во вторых там уже реализовано все, что тебе надо, даже намного больше... Последний раз редактировалось v1s2222, 12.10.2010 в 17:20. |
|
#9
|
||||
|
||||
|
Цитата:
Цитата:
можно заменить трекбар на пэйнтбокс: Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var r:single;
begin
if MediaPlayer1.Enabled then
begin
with PaintBox3.Canvas do
begin
Pen.Style:=psSolid;
Brush.Color:=clBtnFace;
Rectangle(0, 0, PaintBox3.Width, PaintBox3.Height);
Pen.Style:=psClear;
r:=MediaPlayer1.Length
if r>0 then
r:=MediaPlayer1.Position/r;
Brush.Color:=clRed;
Rectangle(1, 1, Round(PaintBox3.Width*r), PaintBox3.Height);
end;
end;
end;
procedure TForm1.PaintBox3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button=mbLeft then
begin
poschanging:=true;
MediaPlayer1.Position := Round(X*MediaPlayer1.Length/PaintBox3.Width);
end;
end;
procedure TForm1.PaintBox3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if poschanging then
MediaPlayer1.Position := Round(X*MediaPlayer1.Length/PaintBox3.Width);
end;
procedure TForm1.PaintBox3MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
poschanging:=false;
end; |
|
#10
|
||||
|
||||
|
вот тут я когда-то переделывал TrackBar для плеера
добавил событие OnUserChange, которое вызывается только если положение слайдера вручную меняется юзером Код:
unit MediaTrackBar;
interface
uses
SysUtils, Classes, Controls, ComCtrls;
type
TMediaTrackBar = class(TTrackBar)
private
FMouseDown: Boolean;
FOnUserChange: TNotifyEvent;
protected
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure Changed;override;
public
constructor Create(AOwner: TComponent);override;
published
property OnUserChange: TNotifyEvent read FOnUserChange write FOnUserChange;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TMediaTrackBar]);
end;
{ TMediaTrackBar }
procedure TMediaTrackBar.Changed;
begin
if FMouseDown then
begin
if Assigned(FOnUserChange) then
FOnUserChange(Self);
end;
inherited Changed;
end;
constructor TMediaTrackBar.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FMouseDown:=False;
end;
procedure TMediaTrackBar.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FMouseDown:=True;
inherited MouseDown(Button,Shift,X,Y);
end;
procedure TMediaTrackBar.MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
FMouseDown:=False;
inherited MouseUp(Button,Shift,X,Y);
end;
end.Последний раз редактировалось ryderx34, 13.10.2010 в 20:06. |