26 / 21 / 11
Регистрация: 26.10.2013
Сообщений: 108
|
||||||
1 | ||||||
Форма с полупрозрачным фоном GDI+22.07.2015, 23:35. Показов 3845. Ответов 31
Метки нет (Все метки)
Доброе время суток!
Уже давно ищу способ реализации формы, пример которой показан на рисунке во вложении... Она может быть не обязательно прямоугольной, а иметь произвольную форму, как и png-картинки внутри. Последнее, на чём остановился - так это GDI+. Подскажите, пожалуйста, как можно загрузить (с диска, из библиотеки или ресурсов - не важно) png-файл и вставить его в, скажем, Image1? Идея в том, чтобы сделать bsNone-форму, и полностью закрыть её картинкой, создав таким образом фон (на рисунке - белый полупрозрачный прямоугольник), сохранив все остальные элементы непрозрачными. P. S. Я пробовал разные способы: наложение форм одной на другую не подходит из-за того, что картинки внутри формы тоже могут быть произвольной формы, и простая установка TransparentColor приводит к тому, что края становятся "квадратными" из-за сливания полупрозрачных пикселей с цветом, установленным прозрачным. Чистый GDI тоже не подходит, так как мне нужна сама форма... Дошёл до этого момента:
0
|
22.07.2015, 23:35 | |
Ответы с готовыми решениями:
31
Builder C++ Форма на основе PNG изображения (GDI+,RocketDock,и т.д..) Есть ли в WPF полноценная замена GDI+? Чтобы можно было всё, что можно в GDI+? Просто думаю углубляться в работу с изображениями в WPF или GDI. Создать правило для абзаца с собственным фоном, прозрачным фоном Конвертировать png c прозрачным фоном на jpg с "x" фоном |
26 / 21 / 11
Регистрация: 26.10.2013
Сообщений: 108
|
|
27.07.2015, 22:56 [ТС] | 21 |
Выяснил: причина ошибки в том, что один из BMP-файлов не соответствует требованиям функции. Остаётся только вопрос с тем, как сделать, чтобы просвечивал рабочий стол...
0
|
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
|
|
28.07.2015, 15:56 | 22 |
Поправьте меня, если я ошибаюсь..., - сделать полупрозрачное окно возможно, двигать его "за картинку" тоже трудностей не представляет. Но как на него поместить непрозрачный контрол (ту же кнопку), не прибегая к использованию второй формы - я не представляю! У меня даже не получилось со второй формой: делаю её прозрачной, так что только кнопки на виду, "привязываю" по OnConstrainedResize к другой форме, но когда запускаю, - кнопки "покрываются" этой полупрозрачной формой и выглядят "из под неё", т.е. не ахти... .
0
|
26 / 21 / 11
Регистрация: 26.10.2013
Сообщений: 108
|
|
28.07.2015, 16:55 [ТС] | 23 |
nick42, вот-вот, тоже застревал на этом Делал по образу и подобию, как показано здесь: Привязка формы к форме. В итоге первая форма была полупрозрачной целиком, а во второй с помощью свойства TransparentColor и задания TransparentColorValue убирался фон. В принципе, получалось с кнопками и прочими элементами, но не с картинками, как хотелось бы...
0
|
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
|
|
28.07.2015, 20:54 | 24 |
А-а, всё; картинка сложилась. В моём понимании, конечно (если идиллию не разрушит volvo либо Avazart... ). Первую (главную) форму делаем с прозрачным (допустим - белым) слоем и на нее кладём картинку с белым же фоном и свойством прозрачности; можно поверх нее накидать других элементов управления. Рамки (бордюра) - нет. Таким образом, видны только контролы и сам рисунок (без фона). Вторая форма имеет свойство прозрачности. На нее также натягивается картинка (в нашем случае - оранжевый фон) и обрезается полигон ( CreatePolyPolygonRgn() ). При старте программы она габаритами и положением копирует главную форму и делается Show(). Дальше всё просто: вторая форма и рисунок на ней - !Enabled (иначе при клике мышкой будет перехват), у всех контролов, за которые предполагается "таскать" сэндвич в свойствах OnMouseDown - Perform. Не придумаю вот только, каким образом таскать по экрану сию конструкцию, держа мышку на оранжевом поле второй формы... .
0
|
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
|
|
28.07.2015, 21:19 | 25 |
Вот сама игрушка__
1
|
26 / 21 / 11
Регистрация: 26.10.2013
Сообщений: 108
|
|
28.07.2015, 21:46 [ТС] | 26 |
Классно получилось! Однако у обезьянки резкий чёрный контур без плавного перехода за счёт полупрозрачных пикселей - это главная проблема, к которой я возвращался несколько лет подряд, чтобы затем снова отложить на будущее за неимением идеи реализации
0
|
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
|
|
28.07.2015, 22:05 | 27 |
.. может быть потому, что я картинку взял bmp, где на белом полотне контрастное изображение. Это ж у jpg все цветовые границы смягчаются. Вот для примера с кроликом (чистый png )... .
0
|
28.07.2015, 22:33 | 28 |
Не по теме: Когда вы уже на играетесь с этой фигней уже... VCL не поддерживает не сглаживания, ни алфа канала. Из чего следует что нужно использовать GdiPlus, а значит не стоит надеяться на корректную работу совместно с VCL свойствами. И что самое главное картинки уже должны быть с гладкими краями (размытием сглаживанием) либо должны быть нарисовано (линиями,фигурами пр. примитвами) в режиме сглаживания с помощью GdiPlus
0
|
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
|
|
28.07.2015, 23:49 | 29 |
0
|
26 / 21 / 11
Регистрация: 26.10.2013
Сообщений: 108
|
|
29.07.2015, 07:03 [ТС] | 30 |
Нет, дело не в PNG, ведь даже у него есть обводка чёрным цветом на форме - Avazart дело говорит. А раз так, то не могли бы вы подсказать (лучше, конечно, с примерами что-нибудь), как с помощью GdiPlus реализовать такую программу, если возможно...
1. Вывод PNG-изображений друг поверх друга, учитывая их порядок (или z-индекс, как у слоёв) и положение на экране (отслеживание положения левого верхнего угла, чтобы отображать не в одно и то же место, а чётко над самым первым изображением с заданными отступами сверху и слева, как на форме); 2. Перетаскивание такой конструкции; 3. Выполнение действий при нажатии на определённые картинки (наподобие события OnClick). Если подойдёт LayeredWindow, то как с его помощью это можно сделать и получится ли? Добавлено через 5 минут Просто в статье говорилось только про AlphaBlend(), и на рис. 4 в ней - именно то, что нужно (если при перетаскивании формы под полупрозрачной картинкой рабочий стол будет просвечивать соответственно, а не сделанный однократно снимок), но нет примера, только сказано про "очевидную" модификацию кода.
0
|
26 / 21 / 11
Регистрация: 26.10.2013
Сообщений: 108
|
||||||
05.08.2015, 08:54 [ТС] | 32 | |||||
Всем доброе утро! Задачку удалось решить с использованием Layered Windows, рисуя любые PNG-изображения Вот окончательный вариант кода, если кому-то потребуется:
3
|
05.08.2015, 08:54 | |
05.08.2015, 08:54 | |
Помогаю со студенческими работами здесь
32
Кнопка с полупрозрачным градиентом Как сделать изображение полупрозрачным? Как сделать объект полупрозрачным? Как сделать фон блока полупрозрачным? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |