Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запуск видеоролика в отдельном потоке


Антоныч ©   (2005-08-31 11:04:00) 

Раньше с потоками работать не приходилось, поэтому решил свой вопрос закинуть в эту конференцию. У меня есть форма-заставка, которая появляется, пока загружается основная программа. Решил поместить небольшой видеоролик, который проигрывался бы в отдельном потоке, пока идет загрузка. Вот код:
Файл .dpr:
program kab_mas;

uses ...

begin
 // форма-заставка
 SPLForm := TSPLForm.Create(Application);
 SPLForm.Show;
 SPLForm.UpdForm(0);
 SPLForm.Update;
 Application.Initialize;
 Application.CreateForm(TDM, DM);
 SPLForm.UpdForm(1);
 SPLForm.Update;
 Application.CreateForm(TForm1, Form1);
 SPLForm.UpdForm(2);
 SPLForm.Update;
 ...
 SPLForm.Free;
 Application.Run;
end.


Файл заставки:

type
 TSPLForm = class(TForm)
...
 end;

 TVideo = class (TThread)
 protected
   procedure Execute; override;
   procedure PlayVideo;
 end;

var
 SPLForm: TSPLForm;
 VideoRolic: TVideo;

implementation

{$R *.dfm}

procedure TSPLForm.UpDForm(i: integer);
begin
 case i of
 0: Label2.Caption:='Подключение к базам данных...';
 1: Label2.Caption:='Обработка баз данных...';
 ...
 end;
end;

procedure TSPLForm.FormCreate(Sender: TObject);
begin
 VideoRolic:=TVideo.Create(False);
end;

procedure TVideo.Execute;
begin
 Synchronize(PlayVideo);
end;

procedure TVideo.PlayVideo;
begin
 SPLForm.MediaPlayer1.Play;
end;

end.


Так вот, видео не проигрывается, а в программе после закрытия формы-заставки вылетает Access Violation. Подскажите, что я не так делаю?


Digitman   (2005-09-01 12:51:00) [1]


> Антоныч ©   (01.09.05 12:24) [6]
> Спасибо, MediaPlayer1.Open помогло


неужели ?

могло бы помочь и гораздо раньше, если бы ты справку читал, в которой черным по белому написано :

Play method (TMediaPlayer)
..
Plays the media loaded in the openmultimedia device


Антоныч   (2005-09-01 12:24:00) [2]

Спасибо, MediaPlayer1.Open помогло :)


Котик Бегемотик   (2005-09-01 09:08:00) [3]

>Подскажите, что я не так делаю?

Вот это SPLForm.MediaPlayer1.Play;- на этом месте по идее должен отрисовываться только один кадр.

Посмотри исходники TAnimate а также TAnimatedImage и TRxGIFAnimator из RX Library - многие вопросы отпадут сами собой :)

PS: А вообще считаю использование видеовставок на сплеш-форме плохим тоном ...


Erik1   (2005-08-31 17:34:00) [4]

Прикольный код и выполняется в основном потоке.


Digitman   (2005-08-31 12:18:00) [5]


> без потока пишет ошибку


а где написано, что именно использование доп.потока устраняет эту (или "что-то вроде того") ошибку ?

ты даже ее источник не сподобился выяснить, и уже ничтоже сумняшеся принял решение присандалить к проекту доп.поток)


> или что-то вроде того


уж не "No MCI device open" ли ?
если так, то то вполне объяснимо - перед Play нужно ввыполнить Open, а ты его нигде судя по приведенному коду не выполняешь


Антоныч   (2005-08-31 12:03:00) [6]

А без потока пишет ошибку "Could not initialize MCI device" (или что-то вроде того :) )


Digitman   (2005-08-31 11:39:00) [7]


> что я не так делаю?


все.

более того - непонятно, зачем вообще здесь нужен дополнительный поток


Наверх

Титульная страница Поиск, карта сайта Написать письмо