![]() |
|
|
![]()
|
|
| aTBepTKa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 8.3.2009 Репутация: нет Всего: нет |
Собственно вопрос. Как разместить каринку над кнопкой. Т.е. чтобы картинка прикрывала кнопку. Первая мысль - разместить картинку на панели, но у меня картинка не квадратная (PNG). Как же тогда реализовать это дело?
|
|||
|
||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Если я все правильно понял, то поможет компонент TBitBtn.
-------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| aTBepTKa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 8.3.2009 Репутация: нет Всего: нет |
Не, BitBtn это не то. Мне вообще надо чтобы на проигрываемом видео вылазила картинка. В первом посте написал про кнопку, чтобы не путать людей, т.к. принцип всеравно должен быть одинаковый.
|
|||
|
||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Эмм... забавно... ну да ладно...
-------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| aTBepTKa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 8.3.2009 Репутация: нет Всего: нет |
Хммм. Похоже стоило сразу коректно задавать вопрос.
В общем нужно как-то вывести над проигрывающимся видео (ТМедиаПлеер) картинку (PNG). Если бы она имела прямоугольную форму, обошолся бы простой панелькой. Но это не тот случай. Тут хорошую идею подсказали: Image1->Parent = ... . Вот не могу понять что туда вписать. В случае с кнопкой всё понятно. А тут не совсем. |
|||
|
||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
В Display что задано?
-------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| aTBepTKa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 8.3.2009 Репутация: нет Всего: нет |
MediaPlayer1->Display=Form1
|
|||
|
||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Уже интересней. Канва успехов не даст... а вот если что-то с прозрачностью. Возможно фреймы, сейчас подумаю.
Добавлено через 4 минуты и 31 секунду Похоже вот:
-------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| aTBepTKa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 8.3.2009 Репутация: нет Всего: нет |
Что означает эта строка: Canvas->Handle = GetDC(0); ?
А вообще интересный эффект получился Может быть я в корне не правильно для себя задачу поставил. Пишется программа, которая загружает видеофайл в окно. Внутри программы управление решил реализовать при помощи выдвигающейся панели, где будут расположены всякие кнопочки. Эта панель - и есть та картинка, о которой идёт речь в этой теме. Может быть будет проще переработать графическую часть, и сделать так, чтобы картинка была прямоугольная? Тогда её можно будет повесить на панель, что было бы намного проще; но заниматься этим ой как не хочится. |
|||
|
||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Конечно можно просто изменить подход - сделать изображения квадратными или просто использовать их вне формы.
Существует таймер, он может постоянно рисовать ваши картинки, вопрос в том, что происход процесс прорисовки, в котором канва рисует на экране (это и есть Canvas->Handle = GetDC(0)) изображение, после чего, MediaPlayer прорисовывает на форме видео). Из-за того, что прорисовка происходит методом наложения на экране - возникает подобный эффект. Если бы происходил просчет, а потом прорисовка, вопроса бы и не было. Сейчас посмотрю, что можно сделать через перехват событий прорисовки, если не удасться добиться "мягкого" эффекта, то это можно будет реализовать имхо только через перехват видео... но тут лично я вам помочь не смогу. Добавлено через 1 минуту и 26 секунд Хотя есть простой, но грубый вариант. Можно создать вторую форму и сделать ее прозрачной и на ней расположить нужные изображения. Тормозов вообще не будет, но как и сказал - это грубый вариант. -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Нет, сообщения ничего не дают. Похоже, что самым рациональным методом будет все-таки вторая форма. Хотя возможно существуют другие компоненты, для воспроизведения видео, которые смогут помочь реализовать задачу.
-------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| aTBepTKa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 8.3.2009 Репутация: нет Всего: нет |
Да, наверное формы лучше всего будет использовать. Но тут одно но: как сделать форму прозрачной? Конечно, это очень просто когда имеется две отдельные формы. Ставим какой-нибудь цвет фона, такой же цвет в транспарент колор, и всё работает отлично. Но если вторая форма будет дочерней от первой, то тут это не прокатит. И другие схожие способы тоже.
Придумал следующий выход из ситуации: оставить две формы, не зависимыми друг от друга, но вторую "привязать" к первой. И в тот момент, когда пользователь вызывает навигационную панель (эту самую форму), изменять не left, как я планировал сразу, а параметр width. Т.е. не двигать форму, а растягивать её. Klin, спасибо за помощ. |
|||
|
||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Способ реализовать "привязку" очень много, так что тут думаю вопросов возникнуть не должно, но как всегда - существует наш форум.
За помощь - всегда пожалуйста. Только не забудьте пометить вопрос, как решенный ;) -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
MediaPlayer играет видео через DirectX (DirectShow). И ему глубоко фиолетово, какие окна будет пытаться GDI расположить поверх его окна вывода. Работать это нормально не будет - готовьтесь поиметь феерверк глюков разных размеров и оттенков
Если хотите вставлять свои картинки в вывод - пользуйтесь DirectShow напрямую и VideoOverlay (кажется так, нету сейчас DXSDK под рукой) |
|||
|
||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
xvr, вы же понимаете, что существует порядок вывода окон? Поэтому здесь осложнений и глюков возникнуть не должно. Просто это грубый способ... хотя возможно не очень то он и грубый. По началу я думал, что нужно сделать простой логотип поверх отображаемого видео. А нужно реализовать своеобразное меню, то потом, даже если сделать все красиво через DirectShow, то возникнет необходимость заниматься перехватом координат мыши, в зависимости от размера и положения видео. Так что, возможно, это не такой плохой вариант, как я думал.
-------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| aTBepTKa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 8.3.2009 Репутация: нет Всего: нет |
Может я что-то не правильно сделал, но у меня всё отлично работает. Уже как только не тестировал - всё ок. В качестве доказательства могу экзэшник показать. |
|||
|
||||
| xvr |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Окна, выводимые через DirectDraw, отрабатываются напрямую драйвером видеокарты, поэтому при их наложении на что-то или наложении на них чего то, не все будет определяться порядком вывода окон
Добавлено через 1 минуту и 48 секунд
Вам повезло - ваша видеокатрочка с этим справилась, другая может и не справится
|
||||||||||
|
|||||||||||
| Klin |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
На форуме есть раздел для тестирования программ.
Если возникают проблемы при наложении, то даже если вести прорисовку через DirectDraw проблем будет не мало. На новых машинах подобных глюков не видел, но на старых встречались не раз проблемы с выводом. Обычно подобный эффект возникал, когда были попытки запустить игру, рассчитанную на более мощную конфигурацию. Так же подобный эффект возможен при подвисании компьютера, когда он просто не успевает верно обработать все данные. DirectDraw безусловно уменьшит нагрузку и решит проблемы на старых машинах, но повторюсь, что уже давно подобного эффекта не видел. -------------------- Я человек - попробуйте обвинить меня за это. |
||||
|
|||||
| aTBepTKa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 8.3.2009 Репутация: нет Всего: нет |
Получается что от глюков я не защищён. Наверное придётся отказаться от моего способа управления программой. Запугали меня с этим DirectDraw
Мне тут ещё одна идея в голову пришла. Набор компонентов BusinessSkinForm с потдержкой скинов. Думаю многие знакомы с этой штукой. Может быть вместо дополнительной формы засунуть панель, все нужные кнопочки; и потом в качестве скина назначить свои картинки? Панелька - это не окно, можно ли быть увереным что проблем с наложением не будет? |
|||
|
||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
aTBepTKa, никто вас не пугает, нет гарантии, что в то время когда пользователь запустит программу, не будет происходит запуск коллайдера. Но желательно продумать этот момент и программа должна выдать сообщение о том, что программа завершает работу в связи с уничтожением мира.
На самом деле, если вас интересует ответ на ваш новый вопрос, то лучше создать новую тему, ибо нужно помнить о старых и добрых правилах форума. Одна тема - один вопрос. -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
ИМХО. Если видео просвечивает через более верхние окошки - вот это скорее глюк конкретной системы. Лично у меня, если запустить видео, а сверху положить окошко ничего не просвечивает. Идет видео себе и его частично видно. Ориентироваться на нестандартное поведение некоторых систем так можно в параноика превратиться.
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |