powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Форма произвольной формы с ровными краями
13 сообщений из 13, страница 1 из 1
Форма произвольной формы с ровными краями
    #36750839
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно ктото из вас уже делал такое, подскажите.

Делал через функцию (вырезаешь цвет (маску)):
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 формы...но както это не серьезно.


Дак подскажите как же сделать нормальную красивую с четкими (гладкими) краями произвольную форму + контролы?
...
Рейтинг: 0 / 0
Форма произвольной формы с ровными краями
    #36750878
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот прикрипил фото

то что получается при использовании PNG и UpdateLayeredWindow - справа
то что получаетя при использовании SetLayeredWindowAttributes - слева
...
Рейтинг: 0 / 0
Форма произвольной формы с ровными краями
    #36751072
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 (и это выглядит логично).
...
Рейтинг: 0 / 0
Форма произвольной формы с ровными краями
    #36751078
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедикт,
это я знаю, забыл упомянуть в вопросе, этого тоже не хотелось бы рисовать все контролы
...
Рейтинг: 0 / 0
Форма произвольной формы с ровными краями
    #36751088
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak787Бенедикт,
это я знаю, забыл упомянуть в вопросе, этого тоже не хотелось бы рисовать все контролы
не прочилал предыдущий пост внимательно, нет все надо рисовать заново...

"CreateCompatibleDC function" создает "пустой" DC... и поэтому нужно все прорисовывать заново, что очень не хотелось бы, ввиду такой проблемы как "утечка GDI" (сам еще не сталкивался)
...
Рейтинг: 0 / 0
Форма произвольной формы с ровными краями
    #36751132
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak787ak787Бенедикт,
это я знаю, забыл упомянуть в вопросе, этого тоже не хотелось бы рисовать все контролы
не прочилал предыдущий пост внимательно, нет все надо рисовать заново...Если б встроенные VB-шные контролы поддерживали WM_PRINT, WM_PRINTCLIENT, то проблема была бы сравнительно легко решаемой. Но они, ЕМНИП, не поддерживают.

ak787"CreateCompatibleDC function" создает "пустой" DC... и поэтому нужно все прорисовывать заново, что очень не хотелось бы, ввиду такой проблемы как "утечка GDI" (сам еще не сталкивался)ИМХО, не об утечке ресурсов GDI (которая обычно является следствием банального незакрытия операторных скобок) стоит беспокоиться.

Попробуйте покопаться на vbAccelerator -е.
...
Рейтинг: 0 / 0
Форма произвольной формы с ровными краями
    #36751186
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедикт
Попробуйте покопаться на vbAccelerator -е.
вот версия где "заусенки" на картинке (слева) и есть через ту функцию что там описана
...
Рейтинг: 0 / 0
Форма произвольной формы с ровными краями
    #36751312
bac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak787,

Как-то находил пример, прикладываю архив.
Так же есть программа для рисования произвольных форм (генерит исходник на VB) если надо могу намылить.
...
Рейтинг: 0 / 0
Форма произвольной формы с ровными краями
    #36751365
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bacak787,

Как-то находил пример, прикладываю архив.
Так же есть программа для рисования произвольных форм (генерит исходник на VB) если надо могу намылить.
наверное мне не совсем это нужно, все равно спасибо
...
Рейтинг: 0 / 0
Форма произвольной формы с ровными краями
    #36751375
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а тему наверное можно даже закрывать, думаю все равно никто ничего не предложит, весь день читаю разные форумы, везде спотыкаются ровно на этом же месте и предлагают либо "рисовать" используя GDI, либо "таскать" 2 формы...

для меня оказался самый удачный вариант "таскать 2 формы", оказывается ничего даже не тормозит и не заметно вовсе ;)

Форма таскается просто, обрабатываю сообщение WM_MOVE от главной формы в функции WindowProc.
...
Рейтинг: 0 / 0
Форма произвольной формы с ровными краями
    #36751378
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bac,
нет, через регионы получится как раз "ступеньками".

ak787вот версия где "заусенки" на картинке (слева) и есть через ту функцию что там описанаДа, почитал дома, действительно. Автор написал "опишу работу с UpdateLayeredWindow() в следующей статье", но, видимо, наткнулся на ту же проблему, статьи нет.

Пока видны вполне ожидаемые результаты: народ либо использует отрисовку клиентской части окна, включая дочерние окна (контролы) через WM_PRINT , либо фигурные границы делает одним или несколькими отдельными (не дочерними) окнами (без контролов) . Впрочем, это по результатам очень быстрого поиска.
...
Рейтинг: 0 / 0
Форма произвольной формы с ровными краями
    #36751391
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. я использую 2 формы: одна обычная (главная) с контролами, другая - произвольной формы "таскается" вместе с главной

сам код для использования произвольной формы для картинки PNG с альфа каналом тут
...
Рейтинг: 0 / 0
Форма произвольной формы с ровными краями
    #36751393
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедиктbac,
нет, через регионы получится как раз "ступеньками".

ak787вот версия где "заусенки" на картинке (слева) и есть через ту функцию что там описанаДа, почитал дома, действительно. Автор написал "опишу работу с UpdateLayeredWindow() в следующей статье", но, видимо, наткнулся на ту же проблему, статьи нет.

Пока видны вполне ожидаемые результаты: народ либо использует отрисовку клиентской части окна, включая дочерние окна (контролы) через WM_PRINT , либо фигурные границы делает одним или несколькими отдельными (не дочерними) окнами (без контролов) . Впрочем, это по результатам очень быстрого поиска.

вот и я пришел к выводу, чем весь этот огород городить, лучше таскать 2 формы, хотя еще несколько часов назад, был уверен, что есть метод проще
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Форма произвольной формы с ровными краями
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]