artykuły

Delphi - Piszemy własny odtwarzacz multimedialny

18:46
Sun, 3 March 2002
Artykuł prowadzący za rękę przy pisaniu pierwszego odtwarzacza multimediów w Delphi opartego na komponencie TMediaPlayer. Objaśnia wiele zagadnień związanych z tematem.

Wprowadzenie

Witam wszystkich czytelników, a szczególnie redakcję! W tym artykule opiszę od podstaw jak zrobić łatwo swój pierwszy program w Delphi. Postaram się wytłumaczyć każdy element, każdą linię kodu, tak, aby nawet ten, który jeszcze nigdy nie miał do czynienia z Pascalem kod zrozumiał.

Gdzie szukać?

Do napisania Odtwarzacza posłuży nam nawet najprostsza wersja Delphi'ego (od 2.0 wzwyż, można nawet spróbować na jedynce, ale jej nie miałem więc nie wiem :). Delphi 6.0 Personal Edition znajdziecie na krążku Chip 10/2001 ( na ostatnich stronach magazynu Chip odnośnik do strony zawierającej kod rejestracyjny ). Przyznam się, że posiadam właśnie Delphi 6.0 PE i część rzeczy może się nie zgadzać, dlatego w razie niejasności, proszę o kontakt na mejl'a (podany w stopce).

Uruchomienie i zapoznanie z Delph'im

Pierwszym krokiem do oświecenia jest uruchomienie wcześniej zainstalowanego programu. Po jego uruchomieniu pokazują się cztery okienka: - okno główne (z menu u góry) - Form1 - formularz (na nim umieszczamy komponenty tj. przyciski, pola tekstowe, etykiety) - Object Inspector - (Inspektor obiektów) w nim edytujesz właściwości danego komponentu np. zmiana jego koloru, nazwy itp. - Object TreeView - jest to drzewo, które zawiera wszystkie okna naszego programu. Jeśli chodzi o funkcjonalność, moim zdaniem Delphi przebija wszystkich.

Rozmiary plików po kompilacji

Jednak tych którzy piszą programy freeware i zamieszczają je w sieci, niepokoić mogą dość duże rozmiary plików wykonywalnych, czyli plików .exe, które można uruchomić. Jest to dość dużą wadą Delph'iego, ponieważ aby internauta mógł pobrać taki plik przypuśćmy za pomocą modemu potrzeba parę minut, a przy większych programach nawet jest tych minut kilkanaście, kilkadziesiąt, a może całe godziny ;) Tak więc, nawet pusty, skompilowany do pliku wykonywlnego .exe formularz będzie zajmował powyżej 350 KB.

Jeszcze trochę o umieszczaniu komponentów

Aby umieścić na formularzu na przykład przycisk, trzeba sięgnąć kursorem do głównego okna programu (tam gdzie menu) i z palety (zakładki) Standard wybrać Button (Przycisk). W Delphi 6 paleta Standard wygląda następująco: Paleta komponentów w Delphi
Jak już napisałem, pewne rzeczy na pewno nie będą się zgadzać. Na pewno w Delphi 2 nie ujrzycie przycisków "ActionList" (strona prawa) i Frames (strona lewa), które zaznaczyłem na czerwono na powyższej ilustracji. Nasz przycisk to prostokąt z napisem "OK", aby zamieścić go na formularzu, klikamy go, a następnie klikamy na formularz (Form1).

Piszemy Odtwarzacz

Obróbka kosmetyczna

Zanim zaczniemy dosłownie pisać program należy umieścić wszystkie komponenty na formularzu oraz nadać im nazwy bądź zmienić niektóre z ustawień w Inspektorze Obiektów. Umieszczamy pierwszy przycisk na formularzu, w tym celu klikamy na niego na palecie Standard, a następnie klikamy na formularzu (Form1). Przycisk będzie potrzebny nam do otwierania pliku muzycznego. Tworzymy kolejny przycisk klikając na odpowiednią ikonkę na palecie Standard, a następnie na fomrularz, ten przycisk będzie nam służył do odtwarzania (Play). Wszystko by było OK gdyby jeszcze można byłoby pauzouwać odtwarzanie. W tym celu posłuży nam trzeci przycisk, który teraz tworzymy. Wszystko dobrze, ale co będzie odtwarzało te pliki ? Oczywiście potrzebne nam będą jeszcze dwa komponenty, które teraz umieszczamy na Formularzu, są nimi: MediaPlayer z palety System oraz OpenDialog z palety Dialogs. MediaPlayer będzie służył do odtwarzania, a OpenDialog to poprostu okno "Otwórz".
Przyszedł czas na Inspektor Obiektów. Jest on bardzo pomocny gdyż można w łatwy sposób zmienić właściwości komponentów umieszczonych na formularzu w tym celu należy je zaznaczyć (klikając raz) i zmienić wartość w Inspektorze Obiektów. Tak więc, zmieniamy nazwy naszych przycisków. Klikamy pojedynczym kliknięciem na pierwszy (Button1) zaznaczając go, następnie z Inspektora Obiektów wybieramy wartość Caption i wpisujemy tam tekst Otwórz. Z drugim i trzecim przyciskiem robimy to samo nadając im nazwy Graj i Pauza. Teraz przyszła kolej na MediaPlayer, czytelnicy chcący mieć więcej możliwości w odtwarzaczu pomijają ten krok, jednak radziłbym go wykonać wszystkim. Dlatego klikamy pojedynczo na komponent MediaPlayer i w oknie Inspektora Obiektów wybieramy wartość Visible (prawie na samym dole) i przestawiamy ją na wartość False (od ang. Kłamstwo, nieprawda co można przetłumaczyć w naszym wypadku jako niewidoczny). Gdy już ukryliśmy nasz "multimedialny komponent" możemy przystąpić do modyfikowania kodu programu.

Kod programu

Zanim zaczniemy chciałbym wszystkich poinformować, że aby wpisać kod do danego zdarzenia (najczęściej) należy podwójnie klinąć na element. Bardziej doświadczonych użytkowników informuję, że kod w Delphi składa się z procedur, jedna procedura odpowiada jednemu zdarzeniu na przykład kliknięciu na przycisk. Zdarzenia możemy wybierać poprzez zakładkę Events w Inspektorze Obiektów, jeśli interesującego nas zdarzenia nie ma na liście wówczas możemy odebrać tak zwane komunikaty wysyłane przez system (ale to już tak na marginesie :). Kod procedury wpisujemy pomiędzy begin a end; zresztą zaraz pokażę przykład. procedure TForm1.Button1Click(Sender: TObject); begin // Tu wpisujemy nasz kod end; Powyżej pokazałem przykład procedury (dla bardziej zaawansowanych dodam, iż procedura to blok kodu, który, w przeciwieństwie do funkcji nie zwraca wyniku swoich, jak by to powiedzieć, "działań"). Za chwilę wpiszemy pierwszy fragment kodu naszego programu, który będzie odpowiedzialny za otwieranie pliku muzycznego. W tym celu dwukrotnie klikamy na pierwszym przycisku, pokazało się nam okno z tekstem, tak to edytor kodu z którym teraz będziemy pracować. Pojawiła się procedura, którą uzupełniamy następująco (kolor granatowy) procedure TForm1.Button1Click(Sender: TObject); begin If OpenDialog1.Execute Then Begin MediaPlayer1.FileName:=OpenDialog1.FileName; MediaPlayer1.Open; end; end; Teraz naciskamy klawisz F12, który przenosi nas do naszego formularza. Klikamy na nim dwukrotnie przycisk Graj i uzupełniamy kod następująco: procedure TForm1.Button2Click(Sender: TObject); begin MediaPlayer1.Play; end; Ponownie naciskamy F12 i klikamy dwukrotnie na ostatni już przycisk - Pauza. Kod procedury uzupełniamy następująco: procedure TForm1.Button3Click(Sender: TObject); begin MediaPlayer1.Pause; end; No i to już wszystko, możecie zapisać program! To była cała filozofia pisania prostego programu. A teraz ciekawostka: nasz program - odtwarzacz nie odtwarza jedynie muzyki ale również filmy !!! Stworzyliście właśnie uniwersalny odtwarzacz multimediów, odtwarzający zarówno muzykę (mp3, mid, wav itp.) jak również filmy (avi, mpeg itp.). Teraz postaram się objaśnić wszystkie instrukcję, ale najpierw powiem jak zapisać program. Otóż są to najczęściej dwie czynności. Jedna to kompilacja - proces polegający na przekształcaniu naszego kodu do pliku wykonywalnego exe, zaś druga to zapisanie nie skompilowanego projektu programu. Najlepiej zastosować obie naraz. W tym celu klikamy na menu File i Save as... i zapisujemy plik (ważne jest by wszystkie pliki danego programu były w jednym katalogu [aby potem nie szukać]). Teraz zapisujemy nasz projekt programu. Aby to zrobić posługujemy się poleceniem Save Project As... z menu File i zapisujemy projekt w tym samym katalogu. Aby skompilować program należy z menu Project wybrać opcję Build (opcja kompile w zasadzie kompiluje program lecz bez istotnego pliku, bez którego nie będziemy mogli otworzyć naszego programu na innym komputerze, który nie posiada zainstalowanego Delphi, na przykład u kolegi). Zapisaliśmy już program, teraz czas na tłumaczenie.If OpenDialog1.Execute ThenPowyższa linia odpowiada za wyświetlenie okna Otwórz.MediaPlayer1.FileName:=OpenDialog1.FileName;Ta linia "pokazuje" komponentowi MediaPlayer gdzie ma szukać naszego pliku muzycznego.MediaPlayer1.Open;Ta linia odpowiedzialna jest za załadowanie pliku muzycznego do komponentu MediaPlayer.MediaPlayer1.Play;Powyższa linia odgrywa muzykę, film czy co tam jeszcze sobie zażyczyliśmy ;)MediaPlayer1.Pause;Niniejsza linia pozwala zapauzować w dowolnym momencie nasz utwór, a potem za pomocą przycisku Graj (Play) wrócić do tego miejsca gdzie zapauzowaliśmy utwór

Zakończenie

To już niestety wszystko! Udoskonalajcie swój program i jeśli chcecie podsyłajcie go mnie ( namiary w stopce ). Aha jeszcze jedno, mianowicie gdy chcecie wybrać ikonkę dla waszego programu można skorzystać z opcji w Delph'im. W tym celu należy otworzyć menu Project i posłużyć się poleceniem Options, następnie przejść na kartę Application, kliknąć na przycisk Load Icon i wybrać swoją ikonę.
Do artykułu dołączam kod źródłowy pisanej aplikacji. Jeśli macie jakieś pytanie/problem wystarczy napisać do mnie, a ja postaram się odpowiedzieć (adres na stopce).

12345
Delphi - Piszemy własny odtwarzacz multimedialny Autor opinii: Czytelnicy, data przesłania: 3

Podobne artykuly:

Skomentuj

Aby zamieścić komentarz, proszę włączyć JavaScript - niestety roboty spamujące dają mi niezmiernie popalić.






Komentarze czytelników

    • Adik0160
    • Wed, 28 December 2011, 18:30
    • przy zabawie z wyświetlaczami siedmisegmentowymi polecam mikrokontrolery avr, więcej możliwości




      Odp: Zgoda, jednak artykuł jest o dekoderze 1 z 10. Mikrokontrolery mają zdecydowanie większe pole do popisu niż sterowanie siedmiosegmentowym wyświetlaczem. Ja również z przyjemnością użyłbym scalonego kodera BCD, zamiast budowania opisanego w artykule układu, ale nie o to tutaj chodzi.
    • Ewenement
    • Mon, 12 December 2011, 19:30
    • Witam.
      Jak zrobić ProgresBar do MediaPlayera tak żeby odczytywał długość utworu i ładował się razem z odtwarzaniem piosenki?




      Odp: Odpowiadałem już na to pytanie kilka komentarzy niżej. Pozdrawiam.
    • Dawid
    • Thu, 11 November 2010, 20:12
    • Witaj, stworzylem program dzieki twojemu poradnikowi, wszystko dziala , muzyka się odtwarza, jednak problem jest z filmami... Dzialaja za szybko. Wiem, ze musze pobrac informacje o klatce w danym filmie, jednak nie wiem jak? Czy znasz odpowiedz na mój problem? Pozdrawiam.




      Odp: Ktoś już mnie kiedyś o to pytał. Komponent TMediaPlayer ma za zadanie sam z siebie odtwarzać filmy z prawidłową prędkością (nie jest potrzebna tutaj Twoja interwencja jako programisty - nie jest prawdą to co piszą na forach). Jeśli tak nie jest to coś jest nie tak. Pierwsza rzecz, która mi się nasuwa to zainstalowane w systemie kodeki. Spróbuj odinstalować wszystkie, a następnie zainstalować FFDShow'y. Na potwierdzenie dodam, iż u mnie odtwarzacze tego typu (zbudowane na TMediaPlayer) działają bez żadnych dodatkowych zabiegów z mojej strony, odtwarzając filmy z prawidłową prędkością.
    • TomRiddle
    • Thu, 8 July 2010, 14:34
    • Witam.
      A mogę spytać, jak skopmilować muzykę razem z progamem?
      Tak, by można było odtwarzać tylko JEDEN utwór, i by można go było odtworzyć również na komputerze, na którym nie ma tego utworu.
      Napisz na GG.
      5228983




      Odp: Poczytaj o zasobach. Na LHP masz artykuł Delphi - Zasoby, Delphi - Strumienie danych - TResourceStream. Poczytaj. Pozdrawiam!
    • E.Loaders
    • Wed, 20 January 2010, 18:03
    • Jak do całości już zrobionego odtwarzacza dodać listę odtwarzania i automatyczne jej przechodzenie. jedna piosenka koniec i następna się zacznie według listy. I jeszcze funkcja przeciągnięcia plików muzycznych na listę i rozpoczęcie odtwarzania.



      Odp: Według mojej wiedzy i doświadczenia (kiedyś czytelnik zadał mi identyczne pytanie) na komponencie TMediaPlayer tego nie zrobisz tak prosto. Lepiej skorzystać z paczki DSPack i tamtejszych komponentów, takich jak TDSTrackBar, TFilterGraph. Co do przeciągania i upuszczania plików na listę odtwarzania, dodaj do listy uses słówko ShellAPI, dodaj też deklarację procedury:


      procedure UpuszczeniePlikow(var msg:TWMDropFiles); message WM_DROPFILES;


      i jej definicję (na szybko przekopiowana z mojego programu):


      procedure TfmMainForm.UpuszczeniePlikow(var msg:TWMDropFiles);
      var
      hDrop: THandle;
      FileCount: Integer;
      FileNameLength: Integer;
      FileName: array[0..MAX_PATH] of char;
      FileNameStr : string;
      rozszerzenie : string;
      i,k : integer;
      begin
      hDrop := msg.Drop;
      // Zwraca ilosc przeciaganych plikow
      FileCount:= DragQueryFile(hDrop, $FFFFFFFF, nil, 0);

      for i:=0 to FileCount-1 do
      begin
      // Odczytuje długosc nazwy naszego pliku
      FileNameLength:=DragQueryFile(hDrop, i, nil, 0);
      // Zwraca do bufora nazwę pliku
      DragQueryFile(hDrop, i, FileName, Length(FileName));
      // Bufor jest większy niż nazwa pliku, dlatego wycinamy string o długosci FileNameLength z bufora
      FileNameStr := '';
      for k:=0 to FileNameLength-1 do FileNameStr := FileNameStr + FileName[k];
      begin
      ListBox1.Items.Add(FileNameStr);
      end;
      end;
      end;


      no i w procedurze wywoływanej przy starcie programu poinformuj system, że Twój program lubi jak się na niego upuszcza pliki (może być w procedurze OnCreate()):

      DragAcceptFiles(Self.Handle, True);


      Pozdrawiam!
    • Hybrid_Micheal
    • Wed, 18 November 2009, 20:21
    • A jak można dodać listę odtwarzania, a także procedurkę z automatycznym powtórzeniem kiedy utwór lub film skończą się?




      Odp: No niestety, trzeba to robić "na około", ponieważ komponent TMediaPlayer jest dosyć ograniczony w swej prostocie i nie udostępnia nam zdarzenia wywoływanego gdy utwór się skończy. Najprościej jest wykorzystać komponent Timer (czyli w zasadzie dodatkowy wątek), który będzie co jakiś czas sprawdzał aktualną pozycję odtwarzania w utworu i odpowiednio zareaguje gdy utwór się skończy. Możesz też wykorzystać zdarzenie Appliation.OnIdle (lub stworzyć osobny wątek) zamiast używać komponentu Timer.

      Pozdrawiam!
    • dave
    • Sun, 13 September 2009, 19:21
    • strasznie szybko mi otwarza filmy i nie mam głosu prosze o pomoc
    • RybakPL
    • Thu, 16 April 2009, 17:05
    • Siema! Trzeba mi jeszcze tzw. progressbar odtwarzacza. Da się?




      Odp: Patrz - jeden komentarz niżej.
    • E.LOADERS
    • Tue, 17 March 2009, 15:30
    • jak przewijac film za pomoca scroll bar?




      Odp: Jeśli na formularzu masz już ustawiony komponent TMediaPlayer i komponent TScrollBar możesz łatwo "dorobić" przewijanie filmu do dowolnej pozycji. Posadź na formularzu jeszcze komponent TTimer z palety System. Kilknij na niego dwukrotnie i wypełnij procedurę następująco:

      procedure TForm1.Timer1Timer(Sender: TObject);
      begin
      // Jeśli nic nie jest otwarte (żaden plik) to nie rób nic
      If MediaPlayer1.FileName = '' Then Exit;
      // Ustaw pozycję przesuwaka ScrollBar na aktualną pozycję filmu
      // Jednym słowem - przesuwanie suwaka wraz z odtwarzaniem filmu
      ScrollBar1.Position := MediaPlayer1.Position;
      end;


      Po czym zaznacz komponent ScrollBar i w Inspektorze Obiektów odszukaj zdarzenie OnScroll, po czym kliknij dwukrotnie nań aby wygenerować procedurę obsługi zdarzenia OnScroll (wykonywanego przy przesuwaniu suwaka). Procedurę uzupełnij następująco:


      procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
      var ScrollPos: Integer);
      begin
      // Zapauzuj film
      MediaPlayer1.Pause;
      // Ustaw pozycję filmu taką, jak pozycja suwaka
      MediaPlayer1.Position := ScrollBar1.Position;
      // Wznów odtwarzanie
      MediaPlayer1.Play;
      end;


      Teraz ważna sprawa. W procedurze otwierającej film, dopisz po instrukcjiMediaPlayer1.Open następującą instrukcję:


      // Ustawianie maksymalnej pozycji ScrollBara (taka jak długość filmu)
      ScrollBar1.Max := MediaPlayer1.Length;
    • E.LOADERS
    • Mon, 16 March 2009, 17:39
    • jak zrobic w delphi ekran odpowiadajacy dekodowaniu i wyswietlaniu filmu?
      oraz fullscren?




      Odp: Cóż, nawiązując do artykułu, najprościej jest wykorzystać w tym celu komponent MediaPlayer (można również korzystać z dużo bardziej zaawansowanych komponentów z paczki DSPack). Aby to zrobić, musimy mieć na formularzu coś co nam będzie wyświetlało ten film - przykładowo komponent Panel (paleta Standard). Prócz komponentu Panel, na formularzu potrzebne nam będą jeszcze komponenty MediaPlayer oraz Button. Po ich wstawieniu, zaznaczamy komponent MediaPlayer1 i w Inspektorze Obiektów ustawiamy jego właściwość Display na Panel1. Klikamy teraz dwukrotnie na przycisk i wpisujemy taki kod (odpowiedzialny za otworzenie filmu i rozciągnięcie obrazu na cały komponent Panel).


      procedure TForm1.Button1Click(Sender: TObject);
      begin
      // Otwieramy przykładowy plik c:f1.mpeg
      MediaPlayer1.FileName := 'c:f1.mpeg';
      MediaPlayer1.Open;
      // Ustawiamy rozmiar obrazu (taki sam jak rozmiar panelu
      // na którym jest wyświetlany)
      // Tą linię umieszczamy koniecznie PO funkcji Open
      MediaPlayer1.DisplayRect := Panel1.ClientRect;
      end;


      W ten sposób możemy mieć film przeskalowany do dowolnych rozmiarów. Teraz, aby zrobić pełny ekran, wystarczy rozciągnąć komponent Panel na cały ekran.
    • E.LOADERS
    • Fri, 13 March 2009, 22:41
    • CZY MOZE JEST JAKIŚ PROGRAM KTURYM
      MOZNA BY POWSTAWIAĆ BOOTONY I PO KLIKNIĘCIU ZEBY SIE MUZYKA ODTWARZALA. PROSTY JAKIŚ. WIZUALIZACJE, SKINY, TAKIE TAM ZEBY MOZNA BYLO ZROBIC. LISTA ODTWARZANIA. ?????????
      E.LOADERS@WP.PL




      Odp: Nie wiem o co dokładnie pytasz, ale jeśli pytasz o program
      którego zadaniem jest tworzenie odtwarzaczy multimedialnych to... nie słyszałem o takim wynalazku - co nie wyklucza, że coś takiego nie istnieje.
      Tak naprawdę za sprawą komponentów w Delphi można zrobić praktycznie wszystko. Jeśli nauczysz się programować (przykładowo w Delphi) to będziesz w stanie napisać w nim odtwarzacz posiadajacy funkcje o których wspominasz, a więc odtwarzacz z playlistą, wizualizacjami, skórkami i wszystkim tym co sobie wymyślisz. Do sukcesu nie ma windy - trzeba iść po schodach.
    • PM2A
    • Tue, 17 February 2009, 17:12
    • Mam pytanie jak regulować dźwięk za pomocą track bar lub scroll bar ?



      Odp: Niestety komponent TMediaPlayer nie pozwala regulować głośności odtwarzanej muzyki. Należy więc skorzystać z funkcji systemowych. W tym celu, do listy modułów (uses) dodaj słowo MMSystem.
      Gdzieś w kodzie (w sekcji implementation) dodaj takie dwie procedury:

      // Zmiana głośności dźwięku typu Wave
      procedure SetWavVolume(Lewy,Prawy:Byte);
      begin
      waveOutSetVolume(WAVE_MAPPER, Integer((Lewy shl 24) or (Prawy shl 8 )));
      end;

      // Zmiana głośności muzyki z płyt CD
      procedure SetCDVolume(Lewy,Prawy:Byte);
      begin
      auxSetVolume(0, Integer((Lewy shl 24) or (Prawy shl 8 )));
      end;

      Na formularzu umieść komponent TScrollBar i w Inspektorze obiektów ustaw jego właściwość Max na 127. Kliknij na niego dwukrotnie. Powinna zostać wygenerowana procedura ScrollBar1Change(). Wpisz do niej następujący kod:

      // Zmiana głośności dla normalnych plików dźwiękowych (WAV lub Mp3)
      SetWavVolume(ScrollBar1.Position,ScrollBar1.Position);
      // Zmiana głośności dla muzyki odtwarzanej z płyt CD
      SetCDVolume(ScrollBar1.Position,ScrollBar1.Position);
    • gizmo
    • Fri, 6 February 2009, 20:39
    • Wszystko było by ok ale.. Filmy odtwarzane są w przyspieszonym tempie.. Jak sobie z tym poradzić..?
    • bez problemu ;)
    • Tue, 6 May 2008, 17:03
    • już wszystko dobrze ;) czy jest jakiś sposób aby moja aplikacja mogłabyć otwierana na innym komputerze, na którym delphi nie jest zajnstalowany ?



      >> Odp: No proste ;-) Inaczej pisanie aplikacji w Delphi byłoby fatalne i nikt by się tym nie zajmował. Ale już odpowiadam. Jeśli pytasz czy jest jakiś sposób by te aplikacje się uruchamiały na innych komputerach to domyślam się, że najprawdopodobniej aktualnie się one nie uruchamiają ;-) Domyślnie (przynajmniej wersja którą ja posiadam) Delphi jest skonfigurowane tak by pisane aplikaje mogły się uruchamiać również w systemach, które nie posiadają zainstalowanego Delphi (chodzi o istnienie w systemie specjalnej paczki bibliotek VCL). Rozwiązaniem jest po prostu wkompilowanie jej w Twój program. Aby to zrobić, kliknij menu Project > Options > Karta Packages > i odznacz opcję "Build with runtime packages" Od tej pory Twoje programy powinny się uruchamiać na każdym systemie Windows.
    • mam problem
    • Thu, 1 May 2008, 14:31
    • gdy klkam na button "graj" wyświetla mi się błąd, co robie źle ?



      >> Cóż... Na odległość nie mogę nic powiedzieć. Patrzyłeś może na dołączony kod źródłowy? Najprawdopodobniej wczytujesz nieobsługiwany format pliku dźwiękowego. Spróbuj coś nagrać przez Windows'owy "Rejestrator dźwięku" i odtworzyć nagranie przez swój program. Jeśli nadal nie działa - napisz do mnie - postaram się pomóc.
    • Lukas
    • Sat, 15 March 2008, 18:28
    • Cześć, chciałem zbadać informacje o niedziałającej funkcji Pause(), napisałem program dokładnie według instrukcji w artykule i funkcja Pause() działa znakomicie. Dołączyłem do artykułu kod źródłowy.
    • Adam
    • Sat, 15 March 2008, 16:43
    • U mnie nie działa Pause!
    • AcantheR
    • Fri, 29 February 2008, 19:04
    • Niezłe :)
Dexter