ďťż

Ładny brzuch

Czesc Wszystkim.
Mam do Was Wielka prosbe.
Jak odtworzyc pliki wav w kolejnosci z domyslnego folderu? (tzn. tego w ktorym bedzie plik exe mojej aplikacji)
i chcialabym by te pliki byly odtwarzane w sposob ciagly czyli robily swoista petle i tak w kolko do konca dzialania mojej aplikacji. Wymyslilam sobie cos takiego?

Procedure StartWav; begin if zmienna = 1 then zmienna := 0; Inc (zmienna); case zmienna of 1 : PlaySound(plik.wav', 0, SND_FILENAME); 2 : PlaySound(plik2.wav', 0, SND_FILENAME); .... .... end; end;

pewnie pokrecilam cos, nie mam pod reka Delphi by to sprawdzic a potrzebuje to na jutro,
Prosze pomozcie



ja i pascal = porazka. Ale ten kod, ktory podalas nie trzyma sie kupy ;-), juz nie mowiac o tym, ze nie opisalas dokladnie problemu. Są dwa pliki, tak? Maja byc odtwarzane w koljnosci: 1,2,1,2,1,2,1.... etc czy tylko jeden z nich ma byc zapetlony?
Co tam robi zmienna "zmienna" ? Decyduje ktory z plikow uruchomic ?
Użytkownik icek edytował ten post 06 lipiec 2007, 21:55
FindFirst+FindNext+While+IF. I chyba wystarczy ;).

Jeżeli chcesz loopa to użyj SND_LOOP.



snd_Loop - odtwarzanie następuje w sposób ciągły.

Tak gdyby byl tylko jeden plik bylo by to dobre rozwiazanie ale czy majac kilka plikow do odegrania i jezeli pierwszemu z nich dam ta flage to czasem ten pierwszy plik czasem nie bedzie odtwarzany w kolko bez konca?
Ja bym chciala kilka plikow zapetlic
za to flaga snd_Ansyc bylaby na miejscu chociarz to ja moge sie mylic

a co do a Ali240 to znalazlam przyklady z FindFirst ... lecz na plikach tekstowych chociarz by wyszukac wav wystarczy pewnie zmienic rozszerzenie z txt tylko co dalej jak go odegrac, nie gniewajcie sie lecz to sa moje naprawde pierwsze kroki w programowaniu i gdzies mi dzwoni lecz nie wiem w ktorym kosciele


snd_Loop - odtwarzanie następuje w sposób ciągły.

Tak gdyby byl tylko jeden plik bylo by to dobre rozwiazanie ale czy majac kilka plikow do odegrania i jezeli pierwszemu z nich dam ta flage to czasem ten pierwszy plik czasem nie bedzie odtwarzany w kolko bez konca?
Ja bym chciala kilka plikow zapetlic
za to flaga snd_Ansyc bylaby na miejscu chociarz to ja moge sie mylic

a co do a Ali240 to znalazlam przyklady z FindFirst ... lecz na plikach tekstowych chociarz by wyszukac wav wystarczy pewnie zmienic rozszerzenie z txt tylko co dalej jak go odegrac, nie gniewajcie sie lecz to sa moje naprawde pierwsze kroki w programowaniu i gdzies mi dzwoni lecz nie wiem w ktorym kosciele

Po co takie kompbinacje.
1. Pobierz scieżki wszytkich plikow do tablicy dynamicznej lub zwykłej
2. Załóz zmienną globalną Przerwij :boolean;
3. Otwurz ORT! pętle repeat z warunkiem na końcu takim aby nigdy nie byłą wylączna
4. Odtwarzaj całą tablice (wszytkie pliki) w tej pętli
5. W tej pętli umieść także warynek if przerwij = true then break;
6. Umiesć gdzieś button na formie i w oncliku jego daj: Przerwij:= true; (buuton służy do zatrzymania pętli);
7. W oncreate forrmy daj Przerwij:=false;
Użytkownik migajek edytował ten post 07 lipiec 2007, 10:53
Powód edycji: ortografia
Czy moglabym prosic o przyklad punktu 1 i 4 bardzo Prosze, potrzebuje to zrobic do wieczora zreszta nie tylko to lecz wiem ze z tym to sobie raczej nie poradze. Bede bardzo wdzieczna i stawiam Duzego Browara :-)

statjacek, też troszkę przekombinowałeś :P Tablice dynamiczne? A od czego TStringList? :)

W FAQ Delphi masz przykład jak wyszukiwać pliki, wyniki szukania trzymasz w TStringList. A reszte opisal juz statjacek :)


Czy moglabym prosic o przyklad punktu 1 i 4 bardzo Prosze, potrzebuje to zrobic do wieczora zreszta nie tylko to lecz wiem ze z tym to sobie raczej nie poradze. Bede bardzo wdzieczna i stawiam Duzego Browara :-)

procedure TForm1.Button1Click(Sender: TObject); var tab : Array [0..4] of string; B : Boolean; I,Czas : integer; begin B:=true; tab[0]:=(ExtractFilePath(Application.ExeName)+'1.wav'); tab[1]:=(ExtractFilePath(Application.ExeName)+'2.wav'); tab[2]:=(ExtractFilePath(Application.ExeName)+'3.wav'); tab[3]:=(ExtractFilePath(Application.ExeName)+'4.wav'); tab[4]:=(ExtractFilePath(Application.ExeName)+'5.wav'); repeat with MediaPlayer1 do begin for i := 0 to High(tab) do begin if Przerwij = false then break; Filename:= tab[I]; open; Czas:=Length+1; play; sleep(Czas); end; end; until B = false; end;
O to chodziło?
Użytkownik statjacek edytował ten post 07 lipiec 2007, 14:21
to już mocno przekombinowales statjacek :P

prostsze, prawda? :)
var i: integer; begin przerwij:= false; for i:= 1 to 4 do begin if przerwij then break; sndPlaySound( PChar( ExtractFilePath(Application.exeName) + inttostr(i) + '.wav' ), SND_SYNC); end;


to już mocno przekombinowales statjacek :P

prostsze, prawda? :)
var i: integer; begin przerwij:= false; for i:= 1 to 4 do begin if przerwij then break; sndPlaySound( PChar( ExtractFilePath(Application.exeName) + inttostr(i) + '.wav' ), SND_SYNC); end;

1) To co najwyżej odtworzy tylko 1.wav Wiesz dla czego :P ?
2) skrypt ma odtwarzć na ogrągło bez przerwy

Tak więc nie sądze abym bardzo przekombinował. Pewnie, że można to skrócić, ale ja chciałem pokazać sposób myslenia bo pliki mogą mieć rożne nazwy.
Użytkownik statjacek edytował ten post 07 lipiec 2007, 14:59

1) To co najwyżej odtworzy tylko 1.wav Wiesz dla czego :P ?
2) skrypt ma odtwarzć na ogrągło bez przerwy

Tak więc nie sądze abym bardzo przekombinował. Pewnie, że można to skrócić, ale ja chciałem pokazać sposób myslenia bo pliki mogą mieć rożne nazwy.

ad1. raczej odtworzy więcej, zauważ że przerwij <> true :P Za to w Twoim kodzie warunek if przerwij = false then break jest troche niedopracowany ;)
ad2. no to wtedy najlatwiej FindFirst / FindNext


ad1. raczej odtworzy więcej, zauważ że przerwij <> true :P Za to w Twoim kodzie warunek if przerwij = false then break jest troche niedopracowany ;)
ad2. no to wtedy najlatwiej FindFirst / FindNext

ad1. odtworzy tylko jeden dlatego, że zacznie odtwarzanie następnego gdy ten jeszcze będzie odtwarzał pierwszy. Kiedys pisałem program w którym musiałem odtwarzać pliki *.wav po kolei. Następny możesz odtwarzać dopiero jak skończy odtwarzać pietwszy. :P Zgadzam się, że warunek "przerwij" jest niedopracowany.

faktycznie, nie testowalem, ale z tego co mowi MSDN na temat sndPlaySound -> SND_SYNC

SND_SYNC The sound is played synchronously and the function does not return until the sound ends. :)


faktycznie, nie testowalem, ale z tego co mowi MSDN na temat sndPlaySound -> SND_SYNC
:)

Prawdopodobnie da się jeśli będzie SND_LOOP + SND_ASYNS. Ale nie testowałem tego.


Prawdopodobnie da się jeśli będzie SND_LOOP + SND_ASYNS. Ale nie testowałem tego.
SND_LOOP bedzie chyba w kolko odtwarzal ten sam dzwiek... :)

A nazwa SND_ASYNC raczej wskazuje na asynchroniczne odtwarzanie, więc nie blokujące funkcji...

Przedewszystkim dziekuje Wam Wszystkim za pomoc i rady. Jesli chodzi o odtwarzanie w tle to urzyłamORT! watkow lecz nadal nie umiem sobie poradzic z samym odtwarzaniem, wlasnie urywa mi kawalek po ilus sekundach i zaczyna odgrywac drugi. Ponizej podam przykladowy kod i jesli moglibyscie to bardzo prosze zerknijcie i w miare mozliwosci pomuzcieORT!
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Math,MMSystem; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type TStartWav = class(TThread) protected procedure Execute; override; end; var Form1: TForm1; implementation {$R *.dfm} procedure TStartWav.Execute; var i: integer; begin for i:= 1 to 2 do begin sndPlaySound( PChar( ExtractFilePath(Application.exeName) + inttostr(i) + '.wav'), snd_FileName ); end; end; procedure TForm1.Button1Click(Sender: TObject); begin TStartWav.Create(False) ; end; procedure TForm1.Button2Click(Sender: TObject); begin Button2.Caption:='aaaaaaaa'; end; end.
Użytkownik migajek edytował ten post 08 lipiec 2007, 23:22
Powód edycji: codebox | ortografia

Przedewszystkim dziekuje Wam Wszystkim za pomoc i rady. Jesli chodzi o odtwarzanie w tle to urzyłamORT! watkow lecz nadal nie umiem sobie poradzic z samym odtwarzaniem, wlasnie urywa mi kawalek po ilus sekundach i zaczyna odgrywac drugi. Ponizej podam przykladowy kod i jesli moglibyscie to bardzo prosze zerknijcie i w miare mozliwosci pomuzcieORT!
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Math,MMSystem; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type TStartWav = class(TThread) protected procedure Execute; override; end; var Form1: TForm1; implementation {$R *.dfm} procedure TStartWav.Execute; var i: integer; begin for i:= 1 to 2 do begin sndPlaySound( PChar( ExtractFilePath(Application.exeName) + inttostr(i) + '.wav'), snd_FileName ); end; end; procedure TForm1.Button1Click(Sender: TObject); begin TStartWav.Create(False) ; end; procedure TForm1.Button2Click(Sender: TObject); begin Button2.Caption:='aaaaaaaa'; end; end.

To jest to o czym pisałem. Zobacz na mój post z nr 9. Ty musisz zacząć odtwarzać nastepny plik dopiero jak się skończy odtwarzanie pliku pierwszego.
1. Musisz zmierzyć czas w jakim jest odtwarzany plik 1
2. Musisz wsztrymać odtwarzanie pliku drugiego dopuki nie zostanie odtwaorzony plik pierwszy
3.Usuń z niego linijke : if Przerwij = false then break;
4.Wstaw na forme Tmediapleyer i ustaw jego Visible na false.
Użytkownik statjacek edytował ten post 09 lipiec 2007, 07:39
Przepraszam ze tyle pytam i pisze, nie zloscie sie, prosze Was tylko jeszcze o sprawdzenie i mala podpowiedz bo dodalam przyklad statjacek - a do watku i Delphi mi sie burzy w tej procedurze ze nie zna MediaPlayer1, play itd, W innej procedurze np Buttonclick wszystko jest w porzadku, dodam tylko jeszcze ze gdy kombinowalam z tym drugim przykladem z watkiem bylo wszystko wporzadku, pewnie oczyms zapomnialam lecz nie potrafie dojsc czego, Prosze zerknijcie jeszcze na to i podpowidzcie jesli mozecie:

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, MPlayer, StdCtrls,ShellAPI,mmsystem; type TForm2 = class(TForm) Button1: TButton; MediaPlayer1: TMediaPlayer; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type TStartWav = class(TThread) protected procedure Execute; override; end; var Form2: TForm2; implementation {$R *.dfm} procedure TStartWav.Execute; var tab : Array [0..1] of string; B : Boolean; I,Czas : integer; begin B:=true; tab[0]:=(ExtractFilePath(Application.ExeName)+'1.wav'); tab[1]:=(ExtractFilePath(Application.ExeName)+'2.wav'); repeat with MediaPlayer1 do begin for i := 0 to High(tab) do begin Filename:= tab[I]; open; Czas:=Length+1; play; sleep(Czas); end; end; until B = false; end; procedure TForm1.Button1Click(Sender: TObject); begin TStartWav.Create(False); end;

nie jestem pewien ale pewnie chodzi o dziedziczenie czy cos takiego. Ogolnie to watek chyba tak powinien wygladac:
procedure TStartWav.Execute; var tab : Array [0..1] of string; B : Boolean; I,Czas : integer; begin B:=true; tab[0]:=(ExtractFilePath(Application.ExeName)+'1.wav'); tab[1]:=(ExtractFilePath(Application.ExeName)+'2.wav'); repeat with [b]Form1.[/b]MediaPlayer1 do begin for i := 0 to High(tab) do begin Filename:= tab[I]; open; Czas:=Length+1; play; sleep(Czas); end; end; until B = false; end;

wystarczy dodac przed "Mediaplayer1" nazwe formy na ktorej to lezy i chyba tyle. Od razu mowie ze nie testowalem i glowy nie daje czy jest dobrze
Użytkownik salat25 edytował ten post 09 lipiec 2007, 14:27
Dokładnie tak. Ja zaś jestem tego pewien. Zmień linijke: with MediaPlayer1 do na with Form2.MediaPlayer1 do i musi działać.
Użytkownik statjacek edytował ten post 09 lipiec 2007, 16:02
Stokrotnie Wam za wszystko dziekuje, zreszta juz pomecze sie sama.

Znalazlam temat chyba nawet tu na forum wlasnie odnosnie prezentacji a moj programik ma wygladac podobnie - kilka fotek moze jakis filmik (wyjdzie w praniu) ma to byc taka niespodzianka na urodziny i dlatego ma sie otworzyc w konkretnym dniu, znalazlam bardzo fajny sposob na to w necie:

http://damnedangels....ticles/show/14/

lecz odnosnie tego tematu jest tam napisane ze takie prezentacje robic raczej we flashu, ze Delphi sie dotego nie nadaje,
moze lepiej bylo by to wlasnie zrobic we fleshu a w Delphi tylko ustawic by ten plik sie uruchomil w konkretnym dniu.

Zrobie to tez do konca w Delphi nie poto tyle trulam :-) by teraz to zostawic pozatym polubilam Delphi tylko tak na przyszlosc jak to powinno byc zrobione fachowo?, moze wlasnie z uzyciem tez innych programow,bibliotek?

Jeszcze raz Wam B A R D Z O D Z I E K U J E za wszystko


Stokrotnie Wam za wszystko dziekuje, zreszta juz pomecze sie sama.

Znalazlam temat chyba nawet tu na forum wlasnie odnosnie prezentacji a moj programik ma wygladac podobnie - kilka fotek moze jakis filmik (wyjdzie w praniu) ma to byc taka niespodzianka na urodziny i dlatego ma sie otworzyc w konkretnym dniu, znalazlam bardzo fajny sposob na to w necie:

http://damnedangels....ticles/show/14/

lecz odnosnie tego tematu jest tam napisane ze takie prezentacje robic raczej we flashu, ze Delphi sie dotego nie nadaje,
moze lepiej bylo by to wlasnie zrobic we fleshu a w Delphi tylko ustawic by ten plik sie uruchomil w konkretnym dniu.

Zrobie to tez do konca w Delphi nie poto tyle trulam :-) by teraz to zostawic pozatym polubilam Delphi tylko tak na przyszlosc jak to powinno byc zrobione fachowo?, moze wlasnie z uzyciem tez innych programow,bibliotek?

Jeszcze raz Wam B A R D Z O D Z I E K U J E za wszystko

Delphi lepiej się nadaje do prezentacji niż flash. Po za tym fleszke można również odpalić w delphi i to na kilkasposobów. Zapewne zrobienie prezentacji we flesh jest prostrze. PowerPoin tez sie nadaje do robienia prezentacji. Własnie po to zostal on napisany. Proponuje ten swoj programik, ktory bedzie odpalal sie w dniu urodzin troszke zmienic, aby mozna bylo zdalnie zmieniac date odpalenia programu, ale to juz bedzie sie nazywal trojan. Tak wiec na wiezej okazji sie przyda. :)
Użytkownik statjacek edytował ten post 09 lipiec 2007, 19:04
Witajcie ponownie, zmienilam ta linijke tak jak mowilscie, wszystko chodzi jak chcialam - dziekuje. Jest tylko problem z zamknieciem - przy prubie zmkniecia pisze iz program nie odpowiada po chwili go oczywicie zamknie.
Dlaczego tak sie dzieje moze to byc jeszcze wina kodu? Niby wszystko chodzi, wlasnie chcialam dodac bitmapki wyswietlane automatycznie(co 10 sekund), tylko boje sie zeby mi sie puzniej nie posypalo z tego powodu bo nie wiem czy wtedy dam rady dojsc do przyczyn

Zmienilam priorytet w button1.Click

procedure TForm1.Button1Click(Sender: TObject); var Start : TStartWav; begin Start := TStartWav.Create(FALSE); Start.Priority := tpLowest;

bo moze procesor byl zbytnio obciarzony ale to nic nie dalo,
po modyfikacji w procesach uruchmionych program z uzywal CPU 4 100 K a problem nadal pozostal
Użytkownik Izunia92 edytował ten post 10 lipiec 2007, 13:01
A nie wygodniej timera ustawić zamiast tworzyć nowy wątek? Zbijasz wątek przy zamykaniu programu (masz tam nieskończoną funkcję więc musisz go dziabnąć w OnClose czy czymś podobnym)?


A nie wygodniej timera ustawić zamiast tworzyć nowy wątek? Zbijasz wątek przy zamykaniu programu (masz tam nieskończoną funkcję więc musisz go dziabnąć w OnClose czy czymś podobnym)?

Dziekuje za podpowiedz. Watek zalozylam dlatego by muzyka byla odgrywana w tle i nie zajmowala aplikacji, prubowalam to zrobic sposobem rowniez ktory podal Migajek ale jak bym go nie pozmieniala to nie dzialalo tak jakbym tego chciala, zreszta opisalam problemy wyzej.

Wlasnie prubuje go zabic i lecz predzej to ja ze zlosci na siebie wyjde oknem, dalam w OnClose cosik takiego

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var start : TStartWav begin start.Terminate; start.Destroy; end;
i nic :-(
Użytkownik Izunia92 edytował ten post 10 lipiec 2007, 15:06
Ja bym raczej starał się odpalać muzykę z SND_ASYNS w timmerze. A jeżeli chodzi o wątek to daj może tamto "B" jako zmienną całego wątku i przy wyjściu ustawiaj na false, czekaj aż wątek się zakończy i go zabij. Albo w ogóle zamiast go zabijać daj FreeOnTerminate (czy coś koło tego - piszę z pamięci) i sam się zwolni po zakończeniu. Pamiętam, że można jakoś wymusić żeby wątek się zakończył ale nie pamiętam jak. No ale skoro jest w pętli sprawdzany warunek to wystarczy go ustawić na false tak jak pisałem i tyle ;].

// A długie te dźwięki masz?
Użytkownik Ali240 edytował ten post 10 lipiec 2007, 15:21
Prubowalam Ali240 z ta flaga SND_ASYNS odtwarzanie bylo w tle lecz uruwalo mi kawalki po ilus sekundach a dzwieki to poprostu piosenki w formacie wav, chcialabym to zrobic z mp3 ale niechce sie odrazu na to rzucac, gdyz zamalo jeszcze potrafie a wtedy bym tak namieszala ze sama niewiedzialabym oco chodzi.

Moglabym tez wszystkie wav-y polaczyc w jakims programie w jeden utwor i nie bylo by problemu
lecz nie chce tego zrobic od tak na jedna okazje tylko sie czegos nauczyc.

Co do warunku ze zmienna B ktora ustawilam na globalna i dalam w onClose na false lecz nic nie pomoglo

Nie globalnie tylko w obrębie wątku ;). Z mediaplayerem za dużo nie podpowiem bo go nie lubię i nie używałem za wiele. Za to polecam bass'a ;]. Na pierwszy rzut oka trudny, ale w rzeczywistości jest bardzo przyjemny w użytkowaniu.

Co do bass-a napewno jest lepszy ale3 ja sobie nie umiem poradzic tutaj z tym wiec raczej na bass-a sie narazie nie rzuce

Kombinuje tak jak wyzej Statjacek ze zmienna globalna przerwij tylko troche inaczej i tez nie trybi w zaden sposob

repeat with Form1.MediaPlayer1 do begin for i := 0 to High(tab) do begin Filename:= tab[I]; open; Czas:=Length+1; if przerwij = false then TstartWav.destroy; // w tej lini pokazuje ponizszy blad play; sleep(Czas); end; end; until b=false end;

lecz tez cos nie tak przy prubie kompilacji wywala blad

This form of method call only allowed for class methods
Użytkownik Izunia92 edytował ten post 10 lipiec 2007, 16:39

lecz tez cos nie tak przy prubie kompilacji wywala blad

This form of method call only allowed for class methods

Odwołujesz się do klasy, a nie do obiektu.
Dopiero teraz zobaczyłem co tam wcześniej robiłaś:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var start : TStartWav begin start.Terminate; start.Destroy; end;
Co Ty tu chcesz zwolnić? Nieistniejący obiekt start?? Całkiem źle.

procedure TForm1.Button1Click(Sender: TObject); var Start : TStartWav; begin Start := TStartWav.Create(FALSE); Start.Priority := tpLowest;
Zdefiniuj Start w opisie klasy formy i wywal stąd deklaracje.
Przy zamykaniu formy zobacz czy zadziała jak zrobisz start.Terminate(); i start.Free();

Jeżeli nadal będzie się sypać (a nie powinno raczej) to:
W poprzednim kodzie dodaj w opisie klasy b: boolean;
TStartWav = class(TThread) public b: boolean; protected procedure Execute; override; end;
W Execute, wywal deklarację B. I dodaj FreeOnTerminate := true; Potem przy zamykaniu formy robisz start.b = false; i powinno samo się zwolnić jak się muzyka skończy.
Użytkownik Ali240 edytował ten post 10 lipiec 2007, 18:19
Dziekuje Jeszcze raz Wam Wszystki za rady, pomoc a zwlaszcza za cierpliwosc jestescie Kochani.
Zrobilam to troszeczke jeszcze inaczej. Ponizej przedstawie kod lecz jak narazie wszystko dziala i zamyka sie poprawnie, pozyjemy zobaczymy.
Jesli by Wam sie cos rzucilo w oczy ze jest jednak zle albo da sie prosciej to prosze w przeciwnym razie zamknijmy juz ten temat.

Mialabym tylko prosbe do kogos z Was byscie moze zamiescili taki wlasnie przyklad w faq gdyz mysle ze odtwarzanie kilku plikow w tle dzialajacej aplikacji w dodatku odtwarzanym w kolko przyda sie napewnu nie jednemu poczatkujacemu, niekoniecznie ten kod ale cos na tej zasadzie, zrobcie to Wy mi to jeszcze nie przysluguje :-) - w koncu to dzieki Wam.

A oto ten twor :-)

type TStartWav = class(TThread) public b: boolean; protected procedure Execute; override; end; var Form1: TForm1; Start : TStartWav; klik : boolean; implementation {$R *.dfm} procedure TStartWav.Execute; var tab : Array [0..1] of string; I,Czas : integer; begin klik := true; b := true; tab[0]:=(ExtractFilePath(Application.ExeName)+'1.wav'); tab[1]:=(ExtractFilePath(Application.ExeName)+'2.wav'); repeat with Form1.MediaPlayer1 do begin for i := 0 to High(tab) do begin Filename:= tab[I]; open; Czas:=Length+1; play; sleep(Czas); end; end; until B = false; end; procedure TForm1.Button1Click(Sender: TObject); begin Start := TStartWav.Create(FALSE); end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if klik = true then Start.Terminate; end; procedure TForm1.FormCreate(Sender: TObject); begin klik := false; end; end.
Użytkownik Izunia92 edytował ten post 11 lipiec 2007, 16:41
Polecam jednak start i klik zdefiniować w obrębie klasy formy. Nie jest to błąd, ale raczej powinno się unikać zmiennych globalnych o ile nie są na prawdę potrzebne w takiej formie (ładniej to wygląda, mniejszy bałagan - przy małym projekciku nie ma większego znaczenia, ale przy dużych przydaje się ten nawyk ;)).
A ja osobiście nie przepadam za MP - jakoś wolę bardziej optymalne zewnętrzne biblioteki (jak np. bass). MP jak dla mnie takie trochę mułowate. No ale to już moje odczucia. Polecam sprawdzić bass'a (lub inne tego typu biblioteki - nazwy padały na forum) i zobaczyć czy nie przypadnie do gustu ;).

Witajcie ponownie. Mozecie mi tylko doradzic bo zmienilam tylko we wlasciwosciach MediaPlayera visieble z true na false i znow jest ten dziwny blad z zamknieciem programu. Zmienie spowrotem na true znow jest wszystko wporzadku, ja bialej goraczki zaraz dostane :-(


Witajcie ponownie. Mozecie mi tylko doradzic bo zmienilam tylko we wlasciwosciach MediaPlayera visieble z true na false i znow jest ten dziwny blad z zamknieciem programu. Zmienie spowrotem na true znow jest wszystko wporzadku, ja bialej goraczki zaraz dostane :-(
Hmm myślę, że to nie ma zwiazku, że to bład kompilatora. Sprobuj zapisać to troszke inaczej np umieśc gdzie indziej ta linijke: if klik = true then Start.Terminate;
np w oncloseClowery czy jak się to tam pisze - nie mam tu delphi. Lub wstaw tą linijkę do jakieś procedury. Myślę, że należy zrobić nieco iny zapis.

Mój sposób przerwania odtwarzania myśle, że można by było troszkę przerobić bo on dzialał na jedną pętle for. Zrobić to samo + na petle repeat. Trzeba pokobminować
Użytkownik statjacek edytował ten post 13 lipiec 2007, 14:15
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •