Как сделать форму полностью прозрачной 32-битной альфы? - PullRequest
1 голос
/ 05 июня 2010

Я использую для создания полностью прозрачной формы, но PNG и 32-битное изображение не будут смешиваться с формой, и изображения не будут правильно отображаться. у меня есть концепция здесь , но я не могу надеть на нее кнопку. все объекты невидимы, кроме фона изображения. кстати мой компилятор это delphi7 и D2009

Ответы [ 2 ]

4 голосов
/ 05 июня 2010

Кажется, что Андреас Хаусладен наткнулся на похожую проблему и уже реализовал решение: он переписал TJvTransparentForm в библиотеке JVCL.

Даже если вы не собираетесь использовать этот компонент напрямую, вы можете получить некоторое представление, изучив источник.

Здесь - ссылка на статью Андреаса.

3 голосов
/ 07 июня 2010

Если вы хотите использовать PNG для контроля прозрачности, вы можете заглянуть в «многослойные окна»:

  • SetWindowLong (Handle, GWL_EXSTYLE, GetWindowLong (Handle, GWL_EXSTYLE) или WS_EX_LAYERED);
  • UpdateLayeredWindow

Это позволяет вам иметь переменную прозрачность по всему окну, как это позволяет PNG! Проблема в том, что элементы управления в многослойных окнах не работают, я думаю, это проблема Windows. Мое решение состояло в том, чтобы на самом деле разбить большое окно на несколько меньших окон со всеми элементами управления на не слоистых окнах. Это создает еще одну проблему, потому что теперь у вас есть несколько окон, и вы хотите, чтобы они двигались как одно окно. Решение: реализовать собственный алгоритм перемещения окна по экрану и использовать:

  • BeginDeferWindowPos
  • DeferWindowPos
  • EndDeferWindowPos

... чтобы переместить все окна одновременно, чтобы пользователь не знал, что она смотрит на несколько окон! Наконец, если вы хотите получить фантазию, вы можете заглянуть в SetWindowRgn: это позволяет создавать окно непрямоугольной формы.

P.S .: Читая ссылку Андреа от Уве Раабе, он использует ту же технику, только он упаковал ее, готовую к действию!

...