Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по Медиа Плееру   Найти похожие ветки 

 
NightDevil ©   (2004-05-08 17:43) [0]

Как сделать, чтобы положение TrackBar"а соответствовало просмотренному в MediaPlayer"e ролику, и чтоб при изменении его положения менялся кадр?


 
student2   (2004-05-08 17:59) [1]

Присвой максу у трекбара количество фреймой у ролика.


 
*BES* ©   (2004-05-08 21:37) [2]

<ТАЙМЕР>
Допустим TrackBar1.Max := Mediaplayer1.lengtj;


 
Юрий Ж. ©   (2004-05-08 22:41) [3]

Сталкивался я стакой проблемой...Единственное что пришло на ум это при изменении (прокрутке) TrackBar"а проверять на сколько он изменился и если меньше, например 100, то ничего не делать, иначе
MediaPlayer.Position:=TrackBar.Position

А по таймеру с интервалом в 1000 млс
TrackBar.Position:=MediaPlayer.Position

А чтобы вообще исчерпать вопрос вот код (САМ ПИСАЛ!!!):

...
var
 Form1: TForm1;
 Paused: boolean = False;
 CurVol: DWord;
 BeginVol: DWord;
 CurIndex: Integer = -1;
implementation
uses MMSystem;
{$R *.dfm}

function GetWaveVolume: DWord; // Получает громкость
var
 Woc : TWAVEOUTCAPS;
 Volume : DWord;
begin
 result:=0;
 if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) = MMSYSERR_NOERROR then
   if Woc.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
     begin
       WaveOutGetVolume(WAVE_MAPPER,@Volume);
       Result := Volume;
     end;
end;

procedure SetWaveVolume(const AVolume: DWord); // Устанавливает громкость
var
 Woc : TWAVEOUTCAPS;
begin
 if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) =MMSYSERR_NOERROR then
   if Woc.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
     WaveOutSetVolume(WAVE_MAPPER, AVolume);
end;

function AlreadyAdd(FileName:String):boolean;
var
 i: integer;
begin
 Result:=False;
 i:=0;
 while i<=Form1.ListBox1.Count-1 do
 begin
   if Form1.ListBox1.Items.Strings[i]=FileName then
   begin
     Result:=true;
     Exit;
   end;
   inc(i);
 end;
end;

procedure PlayFile(FileName: String);
begin
 with Form1 do
 begin
   MediaPlayer1.Close;
   TrackBar1.Position:=0;
   MediaPlayer1.FileName:=FileName;
   MediaPlayer1.Open;
   MediaPlayer1.TimeFormat := tfMilliseconds;
   TrackBar1.Max:=MediaPlayer1.Length;
   Timer1.OnTimer(Timer1);
   Timer1.Enabled:=True;
   MediaPlayer1.Play;
 end;
end;

function AddNeed(Str: String;Need: byte):string;
begin
 Result:=Str;
 while Length(Result)< Need do
   insert("0",Result,1);
end;

procedure TForm1.SpeedButton6Click(Sender: TObject);
var
 i: integer;
begin
 if not OpenDialog1.Execute then Exit;
 if ListBox1.Count=0 then CurIndex:=0;
 for i:=0 to OpenDialog1.Files.Count-1 do
   if not AlreadyAdd(OpenDialog1.Files.Strings[i]) then
     ListBox1.Items.Add(OpenDialog1.Files.Strings[i]);
 if ListBox1.Count=1 then
   CurIndex:= 0;
 ListBox1.ItemIndex:=CurIndex;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
 if Paused then
 begin
   MediaPlayer1.Play;
   Paused:=False;
   Exit;
 end;
 if ListBox1.Count>0 then
 PlayFile(ListBox1.Items.Strings[CurIndex]) else
 begin
   SpeedButton6.OnClick(Self);
   if ListBox1.Count>0 then
   PlayFile(ListBox1.Items.Strings[0]);
 end;
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
 if ListBox1.Count>0 then
 begin
   PlayFile(ListBox1.Items.Strings[ListBox1.ItemIndex]);
   CurIndex:=ListBox1.ItemIndex;
 end;
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
 if not Paused then
 begin
   MediaPlayer1.PauseOnly;
   Paused:=True;
 end else
 begin
   MediaPlayer1.Play;
   Paused:=False;
 end;
end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
 MediaPlayer1.Stop;
 Timer1.Enabled:=False;
 TrackBar1.Position:=0;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 if (ListBox1.Count > 1) and (CurIndex > 0) then
 begin
   PlayFile(ListBox1.Items.Strings[ListBox1.ItemIndex-1]);
   ListBox1.ItemIndex:=CurIndex-1;
   Dec(CurIndex);
 end;
end;

procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
 if (ListBox1.Count > 1) and (CurIndex < ListBox1.Count -1) then
 begin
   PlayFile(ListBox1.Items.Strings[ListBox1.ItemIndex+1]);
   ListBox1.ItemIndex:=CurIndex+1;
   Inc(CurIndex);
 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 i,l: integer;
begin
 TrackBar1.Position:=MediaPlayer1.Position;
 i:=MediaPlayer1.Position;
 l:=MediaPlayer1.Length;
 l:=l div 1000;
 i:=i div 1000;

 Label10.Caption:=Format("Time: %s:%s / %s:%s",
 [AddNeed(IntToStr(i div 60),2), AddNeed(InttoStr(i mod 60),2),
  AddNeed(IntToStr(l div 60),2),AddNeed(IntToStr(l mod 60),2)]);
end;

procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
var
 i : integer;
begin
 if Key = vk_delete then
 begin
  i:=ListBox1.ItemIndex;
  ListBox1.DeleteSelected;
  ListBox1.ItemIndex:=i;
  CurIndex:=i;
 end;
 if (Key = vk_return) and (ListBox1.Count > 0) then
   ListBox1.OnDblClick(ListBox1);
end;

procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
 with MediaPlayer1 do
 if NotifyValue = nvSuccessful then
 begin
   Notify := True;
   SpeedButton5.OnClick(Sender);
 end;
end;

procedure TForm1.TrackBar2Change(Sender: TObject);
begin
 if TrackBar2.Position <= 80 then
 begin
   SetWaveVolume(MakeLong(CurVol,CurVol-(100-TrackBar2.Position)*(CurVol div 100)));
   Label1.Caption:=IntToStr(100-TrackBar2.Position)+"% LEFT";
 end;
 if TrackBar2.Position >= 120 then
 begin
   SetWaveVolume(MakeLong(CurVol-(TrackBar2.Position-100)*(CurVol div 100),CurVol));
   Label1.Caption:=IntToStr(TrackBar2.Position-100)+"% RIGHT";
 end;
 if (TrackBar2.Position > 80) and (TrackBar2.Position < 120) then
 begin
   TrackBar2.Position:=100;
   SetWaveVolume(MakeLong(CurVol,CurVol));
   Label1.Caption:="CENTER";
 end;
end;

procedure TForm1.TrackBar3Change(Sender: TObject);
begin
 CurVol:=TrackBar3.Position*655;
 TrackBar2.OnChange(Self);
 Label6.Caption:=IntToStr(TrackBar3.Position)+"%";
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 BeginVol:=GetWaveVolume;
 TrackBar3.OnChange(Self);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 SetWaveVolume(BeginVol);
end;

procedure TForm1.ListBox1Exit(Sender: TObject);
begin
 ListBox1.ItemIndex:=CurIndex;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
 if abs(TrackBar1.Position-MediaPlayer1.Position)>1000 then
 begin
   MediaPlayer1.Stop;
   MediaPlayer1.Position:=TrackBar1.Position;
   MediaPlayer1.Play;
 end;
end;

end.


Если что-то не понятно - объясню.



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.029 c
14-1089278711
ПИТОН
2004-07-08 13:25
2004.07.25
Объявления


1-1089638173
Alkmas
2004-07-12 17:16
2004.07.25
Как узнать о состоянии процесса ?


11-1077899962
ALeX.B.
2004-02-27 19:39
2004.07.25
ICSовский FTPSRV просит 2 отсутствующих файла WinProc и WinTypes.


14-1088965195
Интересующийся
2004-07-04 22:19
2004.07.25
DLL из EXE?


14-1089013165
Александр Иванов
2004-07-05 11:39
2004.07.25
Свершилось :).





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский