Прокрутка в TMediaPlayer
Следующий код ужасно тормозит проигрывание, т.к конфликтуют две процедуры.
procedure TForm1.TimerTimer(Sender: TObject);
begin
if TrackBar.Max<>0 then
TrackBar.Position:=Mediaplayer.Position;
end;
procedure TForm1.TrackBarChange(Sender: TObject);
begin
Mediaplayer.Position:=TrackBar.Position;//Меняем позицию
Mediaplayer.play;//т.к player делает паузу при смене позиции, восстанавливаем воспроизведение
end.
В итоге :
Mediaplayer.Position:=TrackBar.Position;которая находится в procedure TForm1.TimerTimer(Sender: TObject); конфликтует с Mediaplayer.Position:=TrackBar.Position;, находящейся в procedure TForm1.TrackBarChange(Sender: TObject);
Может кто-нибудь подскажет что делать? procedure procedure
Только давно не помню ничего. Но ничего там не тормозило.
Вроде в начале ТракБарЧанге у меня стояло Медиаплеер.Стоп.
Вечером дома посмотрю. Могу саму прогу послать только мыло своё скажи.
Тоже такое писал.
Только давно не помню ничего. Но ничего там не тормозило.
Вроде в начале ТракБарЧанге у меня стояло Медиаплеер.Стоп.
Вечером дома посмотрю. Могу саму прогу послать только мыло своё скажи.
Вот мыло [EMAIL=ocokin@msn.com]ocokin@msn.com[/EMAIL]
Я решал с помощью boolean'а с названием isplaying: если при перемещении trackbar'a идет проигрывание, то остановить таймер и задать новый position для mediaplayer'a. В этом духе (точно не помню, а под рукой нет). Могу скинуть исходникна неделе, если еще надо.
Конечно надо
Конечно надо
Прога не совсем доделана, но trackbar вроде работал...
Вообще-то это autorun для совмещенного data/audio CD, там много лишнего, но полезного.
Идея такова: 16 треков и 17 - видеофайл. Надо играть из одного окна: когда треки, то listbox, a когда видео, то panel.
Не исключено, что некоторые переменные бессмысленны, прогу я так и не доделал (время проигрывания не всегда правильно переключалось, вроде). Все.
:D , типа
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, MPlayer, ExtCtrls, ComCtrls, StdCtrls, Buttons,MMSystem;
type
TForm1 = class(TForm)
MediaPlayer1: TMediaPlayer;
Panel1: TPanel;
ListBox1: TListBox;
BitBtn1: TBitBtn;
Timer1: TTimer;
BitBtn2: TBitBtn;
tb: TTrackBar;
Panel2: TPanel;
procedure BitBtn1Click(Sender: TObject);
procedure ListBox1DblClick(Sender: TObject);
procedure MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;
var DoDefault: Boolean);
procedure Timer1Timer(Sender: TObject);
procedure p2time(mode:char);
procedure tbChange(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
timeron,formaboutexit,complete: boolean;
nowpl:string;
frompause,fromchange:boolean;
const vi:integer=17;
implementation
uses about;
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
mediaplayer1.Stop;
close
end;
procedure TForm1.ListBox1DblClick(Sender: TObject);
var dd:boolean; i:integer;
begin
with mediaplayer1 do
begin
stop;
if listbox1.Itemindex=vi then
begin
listbox1.Visible:=false;
devicetype:=dtautoselect;
FileName:='v.avi'; Open; Display:=panel1;
EnabledButtons:=[btstop,btpause]; play;
end else
begin
devicetype:=dtCDAudio; open;
timeformat:=tfmilliseconds;
startpos:=trackposition[listbox1.Itemindex+1];
EnabledButtons:=[btstop,btpause]; play;
end;
end;
form1.Caption:=listbox1.Items.Strings[listbox1.Itemindex];
end;
procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;
var DoDefault: Boolean);
begin
with mediaplayer1 do
begin
if button=btplay then
begin
EnabledButtons:=[btpause,btstop];
if frompause=true then play else
ListBox1DblClick(form1);
frompause:=false;
end;
if button=btpause then
begin
pause; frompause:=true;
EnabledButtons:=[btplay,btstop];
end;
if button=btstop then
begin
Stop;
if listbox1.Itemindex=vi then listbox1.Visible:=true;
EnabledButtons:=[btplay];
position:=startpos;
form1.Caption:='Helen V';
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var tt:integer;
begin
timeron:=true;
if mediaplayer1.Mode=mpstopped then exit;
if fromchange=true then
begin
mediaplayer1.Position:=tb.Position;
mediaplayer1.Play;
end;
fromchange:=false;
if mediaplayer1.mode=mpplaying then mediaplayer1.EnabledButtons:=[btpause,btstop];
if listbox1.Itemindex=vi then
begin
with mediaplayer1 do
begin
TimeFormat:=tfframes;
tb.Max:=Length;
if Mode=mpplaying then p2time('v');
if Mode=mpplaying then tb.Position:=Position;
end;
end else
begin
with mediaplayer1 do
begin
TimeFormat:=tfmilliseconds;
tb.Max:=tracklength[listbox1.ItemIndex+1];
if Mode=mpplaying then tb.position:=position-startpos;
if Mode=mpplaying then p2time('a');
end;
end;
tt:=listbox1.ItemIndex;
timeron:=false;
end;
procedure TForm1.tbChange(Sender: TObject);
begin
if timeron=true then exit;
timer1.Enabled:=false;
if listbox1.Itemindex=vi then
begin
//mediaplayer1.stop;
mediaplayer1.TimeFormat:=tfframes;
tb.Max:=mediaplayer1.Length;
p2time('v');
fromchange:=true;
end else
begin
with mediaplayer1 do
begin
stop;
DeviceType:=dtCDAudio;
TimeFormat:=tfmilliseconds;
tb.Max:=tracklength[listbox1.ItemIndex+1];
position:=tb.Position+startpos;
end;
end;
timer1.Enabled:=true;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
form3.Visible:=true;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
if formaboutexit=true then exit;
formaboutexit:=false;
mediaplayer1.EnabledButtons:=[btplay];
listbox1.ItemIndex:=0;
complete:=false;
end;
procedure tform1.p2time(mode:char);
var h,m,s,hc,mc,sc:string; i,ic,t:integer;
begin
case mode of
'v': t:=25;
'a': t:=1000;
end;
i:=tb.Max;
ic:=tb.Position;
h:=inttostr(i div (t*3600)); if (i div (t*3600))<10 then h:='0'+h;
m:=inttostr((i div (t*60)) mod 60); if ((i div (t*60)) mod 60)<10 then m:='0'+m;
s:=inttostr((i div t) mod 60); if ((i div t) mod 60)<10 then s:='0'+s;
hc:=inttostr(ic div (t*3600)); if (ic div (t*3600))<10 then hc:='0'+hc;
mc:=inttostr((ic div (t*60)) mod 60); if ((ic div (t*60)) mod 60)<10 then mc:='0'+mc;
sc:=inttostr((ic div t) mod 60); if ((ic div t) mod 60)<10 then sc:='0'+sc;
panel2.Caption:=hc+':'+mc+':'+sc+' / '+h+':'+m+':'+s;
end;
end.
8) Я ее еще вечерком гляну, если это не рабочая версия - скину еще... 8)
Но то, что надо я вырезал.