Activex WindowsMediaPlayer parça bitimi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Activex WindowsMediaPlayer parça bitimi

Mesaj gönderen haydarxxx »

Activex le yüklenmiş olan WindowsMediaPlayer de çalınacak olan parcaların yollarını CheckListBox a alıyorum ve CheckListBox onchance olayına

Kod: Tümünü seç

WindowsMediaPlayer1.URL :=CheckListBox1.Items[CheckListBox1.ItemIndex];
yazarak parcanın çalınmasını sağlıyoruz ama burada bir parçayı seçebiliyoruz haliyle WindowsMediaPlayer da CheckListBox seçili olan itemsleri sırası ile çaldırmak istiyorum yani CheckListBox daki seçili olan ilk itemssi çalması parça bittiğinde bir sonraki seçili parçaya geçmesini nasıl sağlayabiliriz.Google de WindowsMediaPlayer evens olaylarını aradım ama delphi WindowsMediaPlayer kontrolleri hakkında da bir kaynak bulamadım.Teşekkürler
Kullanıcı avatarı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 02:05
Konum: istanbul

Mesaj gönderen dynamo »

public'te index adlı global bir değişkenin olsun.

Kod: Tümünü seç

 public
    { Public declarations }
    index:integer;
    str_dir:string;
bu değişkeni kullanarak ListBox'ta pathi bulunan avi dosyalarını sırayla çalıştırıyoruz.

Listbox'a bir klasör içinde bulunan video dosyalrının path'ini FileListBox ile alıyoruz:

c:\video\MediaPlayer\Yeni Klasör\clock.avi
c:\video\MediaPlayer\Yeni Klasör\cool.avi

gibi.

Kod: Tümünü seç


procedure TForm1.FormShow(Sender: TObject);
var
   s:string;
   i:integer;
begin
   timer1.Enabled:=false;
   Bitbtn1.Visible:=false;
   FileListBox1.Visible:=false;

   //---video dosya adlarını listbox'a al
   ListBox1.Clear;
   str_dir:= ExtractFilePath(Application.ExeName)+'video\';
   FileListBox1.Directory:=ExtractFilePath(Application.ExeName)+'video\';
   for i:=0 to FileListBox1.Count-1 do begin
      ListBox1.Items.Add(FileListBox1.Items.Strings[i]);
   end;

end;
proogramı çalıştırma:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
   h,a: integer;
   x:string;
begin
   index:=0;
   WindowsMediaPlayer1.URL:=str_dir+ListBox1.Items.Strings[index] ;
   x:=(FloatToStr(windowsMediaPlayer1.currentMedia.duration));
   val(x,h,a);
   label1.Caption:=IntToStr(h);
   WindowsMediaPlayer1.controls.play;
   timer1.Enabled:=True;
end;
index:=0; sıfır olduğu için ilk parça çalıyor.


Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   label1.Caption:=WindowsMediaPlayer1.status +' '+WindowsMediaPlayer1.controls.currentPositionString+
   ' ses :'+inttostr(WindowsMediaPlayer1.settings.volume)
   + WindowsMediaPlayer1.currentMedia.durationString ;

   if WindowsMediaPlayer1.status='Durduruldu' then begin
      inc(index);
      if index<Listbox1.Items.Count then
         BitBtn1.Click
      else
         exit ;

   end;
end;
Timer1Timer'da her seferinde index'i bir arttırarak bir parça bittiğnde diğerini çalıyor.

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
var
   h,a: integer;
   x:string;
begin
   WindowsMediaPlayer1.URL:=str_dir+ListBox1.Items.Strings[index] ;
   x:=(FloatToStr(windowsMediaPlayer1.currentMedia.duration));
   val(x,h,a);
   label1.Caption:=IntToStr(h);
   WindowsMediaPlayer1.controls.play;
end;
sen,video adlarını tablodan alıp Listbox'a doldurursun.

örnek uygulama burda

http://www.delphidunyasi.net/index.php? ... en#msg6761

ekte.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

dynamo teşekkür ediyorum çok sağolasın kodlar süper yanlız burada bir işlem daha soracağım ben CheckListBox kullanıyorum ve bir sonraki parçaya timer daki kod geçiriyor ya burada CheckListBox da seçili olan itemslere göre bir arttırarak çalmaya devam etsin istedim yani seçili bir items se sadece o birden fazla items seçilmişse sadece itemsleri true olanları çalsın dedim ve şu kodu denedim tımer a

Kod: Tümünü seç

 if WindowsMediaPlayer1.status='Durduruldu' then
   begin
    inc(index);
burada Duruduruldu onayı ile inc yapılıyor

Kod: Tümünü seç

   if WindowsMediaPlayer1.status='Durduruldu' then
   begin  
if  CheckListBox1.Checked[index]=true then
  inc(index);
ile CheckListBox daki items in true mi false mi olduğunu kontrol ettirip true ise bir sonrakine inc olarak arttırsın istedim ama becermedim :oops: for döngüsü de denedim

Kod: Tümünü seç

 if WindowsMediaPlayer1.status='Durduruldu' then
   begin

for i:=0 to JvCheckListBox1.Count-1 do
if JvCheckListBox1.Checked[i]=True then
 begin
         inc(index);
kontrolünü sağlayamadım :cry:
Kullanıcı avatarı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 02:05
Konum: istanbul

Mesaj gönderen dynamo »

public'te index global değişkeni tanımla:

Kod: Tümünü seç

public
    { Public declarations }
    index:integer;
  end;


Tablo'dan parçaların isimlerini CheckListBox'a alalım:

Kod: Tümünü seç

procedure TForm1.FormShow(Sender: TObject);
var
   i:integer;
begin
   CheckListBox1.Clear;
   Table1.First;
   for i:=0 to Table1.RecordCount-1 do begin
      CheckListBox1.Items.Add(Table1.FieldByName('path').AsString);
      if Table1.FieldByName('durum').AsBoolean=true then
         CheckListBox1.Checked[i]:=true
      else
         CheckListBox1.Checked[i]:=false;
      Table1.Next;
   end;

   timer1.Enabled:=false;
   Bitbtn1.Visible:=false;

end;

programı çalıştıralım:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
   h,a: integer;
   x:string;
begin
   index:=0;
   WindowsMediaPlayer1.URL:=CheckListBox1.Items.Strings[index] ;
   x:=(FloatToStr(windowsMediaPlayer1.currentMedia.duration));
   val(x,h,a);
   label1.Caption:=IntToStr(h);
   WindowsMediaPlayer1.controls.play;
   timer1.Enabled:=True;

end;

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
var
   h,a: integer;
   x:string;
begin
   WindowsMediaPlayer1.URL:= CheckListBox1.Items.Strings[index] ;
   x:=(FloatToStr(windowsMediaPlayer1.currentMedia.duration));
   val(x,h,a);
   label1.Caption:=IntToStr(h);
   WindowsMediaPlayer1.controls.play;
end;

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   label1.Caption:=WindowsMediaPlayer1.status +' '+WindowsMediaPlayer1.controls.currentPositionString+
   ' ses :'+inttostr(WindowsMediaPlayer1.settings.volume)
   + WindowsMediaPlayer1.currentMedia.durationString ;

   if WindowsMediaPlayer1.status='Durduruldu' then begin
      inc(index);
      if index>=CheckListBox1.Items.Count then exit;
      if  CheckListBox1.Checked[index]=true then begin
         if index<CheckListBox1.Items.Count then
            BitBtn1.Click
         else
            exit ;
      end
      else
         exit ;
   end;

end;
index CheckListBox1.Items.Count'a büyük eşit olduğunda timer'ı durdurur.

örnek uygulamayı burda:

http://rapidshare.tc/39612814

programı paradox tablosunu kullandığından , programı C:\ anadizininde çalıştırın.

.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Hocam elinize kolunuza sağlık çok ama çoook teşekkürler
Cevapla