| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Plasound & image.show |
| Автор: SlaUr 10.10.2003, 07:13 |
| Проблема такая: Image1.Show PlaySound('click1',h11,SND_Pesourse) //Проигрываем звук из ресурса Image1.Hide Картинка не появляется , Если убрать Image1.Hide Картинка появляется после проигрывания звука . Как это побороть? Нужно Показывать картинку пока проигрывается звук. Заранее спасибо. |
| Автор: Cashey 10.10.2003, 11:01 | ||
Только через внешнюю активацию, вот пример через таймер:
Причем конструкция должна быть именно такая. Почему? Не вникал, видать он блокирует св-во Visible. |
| Автор: p0s0l 10.10.2003, 11:41 |
| Cделай так: Image1.Show Image1.Refresh; // или Update PlaySound('click1',h11,SND_Pesourse) //Проигрываем звук из ресурса Image1.Hide |
| Автор: Cashey 10.10.2003, 12:05 | ||
| p0s0l это было первое, что я попробовал, он тогда мегает, картинкой, на секунду и исчезает. PS кстати, прикольно он (image) не виден, но Visible = true, смотри:
но музыка играет. |
| Автор: <Spawn> 10.10.2003, 12:20 | ||
попробуй так:
|
| Автор: Cashey 10.10.2003, 14:20 |
| <Spawn> неужели так трудно проверить перед тем как обнародовать? |
| Автор: p0s0l 10.10.2003, 14:30 |
| Странно, Cashey, что у меня с Refresh'oм или Update'ом почему-то без миганий... Кстати, ты вместо PlaySound используешь медиаплаер... PlaySound - синхронный, а MediaPlayer ? Никогда им не пользовался... Щас попробую. Если он асинхронный, то тогда понятное дело, картинка мигнет на долю секунды и обратно исчезнет... |
| Автор: p0s0l 10.10.2003, 15:16 |
| Ну да, так и есть - MediaPlayer асинхронный. Из-за этого у тебя картинка и исчезает сразу,Cashey... А способ <Spawn>'а тоже рабочий. Так что, Cashey, будь внимательнее в следующий раз. Если бы в PlaySound стоял флаг SND_ASYNC, тогда бы можно было вместо PlaySound'а использовать MediaPlayer. Или же надо дожидаться, пока проиграется звук на MediaPlayer'е, а потом уже делать Hide... |
| Автор: Cashey 13.10.2003, 09:21 |
| А что за PlaySound такой? Я хелп посмотрел, но там даже не сказано в каком он модуле сидит. |
| Автор: Cashey 13.10.2003, 13:13 | ||
Так ладно разобрался она из модуля mmsystem. И при флаге SND_ASYNC мигает так же как MediaPlayer (и работает только через внешний рефреш), а при флаге SND_SYNC работают все три способа (согласен был не прав), но прервать выполнение звука не удается, конструкцию
|
| Автор: p0s0l 13.10.2003, 13:56 | ||||||
Длинная - недлинная, какая разница. SlaUr'у нужно проиграть ПОЛНОСТЬЮ звук, а потом уже скрыть картинку.
А зачем ему останавливать звук ? Если нужно останавливать звук, то тогда надо ставить SND_ASYNC. А если звук длинный и неохото, чтобы из-за этого работа проги останавливалась, то можно сделать что-то типа:
А вызывать проигрывание будет так:
|
| Автор: Cashey 13.10.2003, 16:13 |
| Возможно я не правильно понял задачу, но так как ее понял я, следует, что требуется показать какой-то image (например, фото исполнителя), во время проигрывания звука (например, mp3). Только где сказано, что звук должен проигрываться обязательно полностью?. Конечно, p0s0l прав, можно поставить это дело на поток, я сам так хотел зделать, но мне показалось, что вызвать через таймер более рационально с точки зрения производительности. IMHO лучше стараться избегать потоков, там где это возможно. Но повторяю - это мое мнение и оно не обязательно справедливо. |
| Автор: SlaUr 14.10.2003, 09:03 |
| Spawn: Image1.Show; Application.ProcessMessages; PlaySound('click1',h11,SND_Pesourse); //Проигрываем звук из ресурса Image1.Hide; Спасибо,это то что нужно p.s. А как работает Application.ProcessMessages (может еще можно где-нибудь использовать) |