Odtwarzacz Wideo - problem z paskiem postępu. W Turbo C++

0

Witajcie,

Muszę napisać Odtwarzacz Wideo w Turbo C++.

Mam problem z zaimplementowaniem pasku postępu.

Otóż nie działa on poprawnie.

Mój projekt składa się z następujących komponentów:
user image

Otóż wszystko działa bez tego paska postępu, ale jak go zaimplementowałem to pokazuje się postęp, ale film automatycznie nie leci, tylko musze non stop wciskać przycisk PLAY.

Chce żeby film sam leciał i pokazywał się postęp na pasku postępu i można było go w każdej chwili przerwać.

Plik .cpp mojego programu wygląda następująco:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Odtwarzacz.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::m_LoadFromFileClick(TObject *Sender)
{
    //jeśli poprawnie wskazano plik poprzez okno dialogowe
if (OpenDialog1->Execute())
{
  //przypisz nową wartość nazwy pliku wideo
  MediaPlayer1->FileName = OpenDialog1->FileName;
  //załaduj plik wideo do odtwarzacza
  MediaPlayer1->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
      TrackBar1->Position = MediaPlayer1->Position;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{


        MediaPlayer1->Position=TrackBar1->Position;
      TrackBar1->Max=MediaPlayer1->Length;
        ProgressBar1->Max=MediaPlayer1->Length;
       ProgressBar1->Position=TrackBar1->Position;
}
//---------------------------------------------------------------------------

Skompilowany program macie tutaj:
http://hostuje.net/file.php?id=3d20137cf788a835162e330a26de1380

Z góry dziękuję za pomoc.

Pozdrawiam.

0

Stawiam na to, że trzeba rozdzielić wyświetlanie filmu od aktualizacji GUI. Bo teraz program wchodzi do aktualizacji paska postępu i nie może zająć się niczym innym... To taka moja diagnoza :)

0

Powiesz mi jak to zrobić?

0

Wątki, potrzebne wątki. ( CreateProcess... -> Google "Windows wątki c++" "winapi wątki")

0

Jestem początkujący, możesz bardziej po chłopsku wytłumaczyć.

1

Ja tam nie pisałem w Turbo C++, ale:

void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{

  •    MediaPlayer1->Position=TrackBar1->Position;** `//` * po co ta linijka? *
    TrackBar1->Max=MediaPlayer1->Length; `//` * raczej niepotrzebne robienie tego za każdym razem *
     ProgressBar1->Max=MediaPlayer1->Length;
    ProgressBar1->Position=TrackBar1->Position;
    

}

0

Dobra, jest postęp, wywaliłem tą linijkę i film leci płynnie i pokazuje na pasku postępu. Nie mogę natomiast na pasku zatrzymać. Gdzieś znalazłem że do pasku postępu trzeba dodać zdarzenia OnMouse...,
ale ich nie tam nie ma. Jak zrobić tak, żeby klikając na TrackBar móc przesuwać dowolnie film.?

1

Odpowiednio oprogramować zdarzenia od trackbara. Potrzebujesz zdarzenia mouse down (zatrzymać trackbar) mouse up (trackabar ma przesuwać się znowu).

0

Tak, myślałem, ale co przypisać zdarzeniom to pojedyncza laborka i nie bardzo to ogarniam. Przed chwilą zobaczyłem że w Eventach dla TrackBar1 nie ma OnMouseUp i OnMouseDown. Gdzie tego szukać?

0

A wiecie jak zrobić, żeby pokazywało aktualny czas?

0 użytkowników online, w tym zalogowanych: 0, gości: 0