Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
Возможно ктото из вас уже делал такое, подскажите. Делал через функцию (вырезаешь цвет (маску)): Public Sub SetTranspColor(ByVal hwnd As Long, ByVal color As Long) Call SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED) Call SetLayeredWindowAttributes(hwnd, color, 0, LWA_COLORKEY) End Sub ... но получается грубыми краями. Дальше делал по другому варианту (GDI) через UpdateLayeredWindow, картинку загружал PNG с альфа каналом через GdipLoadImageFromFile. Все замечательно, все красиво и гладко но нет контролов на форме. (: Еще есть вариант таскать 2 формы...но както это не серьезно. Дак подскажите как же сделать нормальную красивую с четкими (гладкими) краями произвольную форму + контролы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 17:42 |
|
||
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
вот прикрипил фото то что получается при использовании PNG и UpdateLayeredWindow - справа то что получаетя при использовании SetLayeredWindowAttributes - слева ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 18:00 |
|
||
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
ak787, не делал такого, но судя по примечанию в описанию функции UpdateLayeredWindow(), The source DC should contain the surface that defines the visible contents of the layered window. For example, you can select a bitmap into a device context obtained by calling the CreateCompatibleDC function. Я понимаю это так, что всё, включая элементы управления, должно быть уже отрисовано в source DC (и это выглядит логично). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 19:46 |
|
||
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
Бенедикт, это я знаю, забыл упомянуть в вопросе, этого тоже не хотелось бы рисовать все контролы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 19:47 |
|
||
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
ak787Бенедикт, это я знаю, забыл упомянуть в вопросе, этого тоже не хотелось бы рисовать все контролы не прочилал предыдущий пост внимательно, нет все надо рисовать заново... "CreateCompatibleDC function" создает "пустой" DC... и поэтому нужно все прорисовывать заново, что очень не хотелось бы, ввиду такой проблемы как "утечка GDI" (сам еще не сталкивался) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 19:53 |
|
||
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
ak787ak787Бенедикт, это я знаю, забыл упомянуть в вопросе, этого тоже не хотелось бы рисовать все контролы не прочилал предыдущий пост внимательно, нет все надо рисовать заново...Если б встроенные VB-шные контролы поддерживали WM_PRINT, WM_PRINTCLIENT, то проблема была бы сравнительно легко решаемой. Но они, ЕМНИП, не поддерживают. ak787"CreateCompatibleDC function" создает "пустой" DC... и поэтому нужно все прорисовывать заново, что очень не хотелось бы, ввиду такой проблемы как "утечка GDI" (сам еще не сталкивался)ИМХО, не об утечке ресурсов GDI (которая обычно является следствием банального незакрытия операторных скобок) стоит беспокоиться. Попробуйте покопаться на vbAccelerator -е. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 20:25 |
|
||
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
Бенедикт Попробуйте покопаться на vbAccelerator -е. вот версия где "заусенки" на картинке (слева) и есть через ту функцию что там описана ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 21:19 |
|
||
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
ak787, Как-то находил пример, прикладываю архив. Так же есть программа для рисования произвольных форм (генерит исходник на VB) если надо могу намылить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 22:59 |
|
||
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
bacak787, Как-то находил пример, прикладываю архив. Так же есть программа для рисования произвольных форм (генерит исходник на VB) если надо могу намылить. наверное мне не совсем это нужно, все равно спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 23:40 |
|
||
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
а тему наверное можно даже закрывать, думаю все равно никто ничего не предложит, весь день читаю разные форумы, везде спотыкаются ровно на этом же месте и предлагают либо "рисовать" используя GDI, либо "таскать" 2 формы... для меня оказался самый удачный вариант "таскать 2 формы", оказывается ничего даже не тормозит и не заметно вовсе ;) Форма таскается просто, обрабатываю сообщение WM_MOVE от главной формы в функции WindowProc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 23:45 |
|
||
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
bac, нет, через регионы получится как раз "ступеньками". ak787вот версия где "заусенки" на картинке (слева) и есть через ту функцию что там описанаДа, почитал дома, действительно. Автор написал "опишу работу с UpdateLayeredWindow() в следующей статье", но, видимо, наткнулся на ту же проблему, статьи нет. Пока видны вполне ожидаемые результаты: народ либо использует отрисовку клиентской части окна, включая дочерние окна (контролы) через WM_PRINT , либо фигурные границы делает одним или несколькими отдельными (не дочерними) окнами (без контролов) . Впрочем, это по результатам очень быстрого поиска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 23:46 |
|
||
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
т.е. я использую 2 формы: одна обычная (главная) с контролами, другая - произвольной формы "таскается" вместе с главной сам код для использования произвольной формы для картинки PNG с альфа каналом тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 23:51 |
|
||
|
Форма произвольной формы с ровными краями
|
|||
|---|---|---|---|
|
#18+
Бенедиктbac, нет, через регионы получится как раз "ступеньками". ak787вот версия где "заусенки" на картинке (слева) и есть через ту функцию что там описанаДа, почитал дома, действительно. Автор написал "опишу работу с UpdateLayeredWindow() в следующей статье", но, видимо, наткнулся на ту же проблему, статьи нет. Пока видны вполне ожидаемые результаты: народ либо использует отрисовку клиентской части окна, включая дочерние окна (контролы) через WM_PRINT , либо фигурные границы делает одним или несколькими отдельными (не дочерними) окнами (без контролов) . Впрочем, это по результатам очень быстрого поиска. вот и я пришел к выводу, чем весь этот огород городить, лучше таскать 2 формы, хотя еще несколько часов назад, был уверен, что есть метод проще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 23:53 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36751072&tid=2159557]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 376ms |

| 0 / 0 |
