![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Можно сделать так чтобы только форма была прозрачной, а компоненты которые на ней расположены оставались нормальными? и как это делается? (еще вопрос можно ли сделать только часть формы прозрачной?)
Последний раз редактировалось PeKpyT, 06.07.2010 в 18:56. |
#2
|
|||
|
|||
![]() Да можно.
Свойство формы TransparentColor := true; TransparentColorValue:=ClGreen; все что будет зеленое будет прозрачным. 2-ой вопрос да можно. выполняем пункт 1. цвет формы ставим green кидаем панель и растягиваем на половину. |
#3
|
|||
|
|||
![]() Смотря как стоит задача.
В общем случае, прозрачность части формы делается через регионы. Это самый правильный путь. Кстати, скины используют именно этот путь. Все остальное - это обходной путь для реализации ПОЧТИ того, что хочется. Еще, начиная с Delphi 7 можно управлять полу-прозрачностью всей формы (вместе со всеми компонентами, которые на форме расположены). Это делается с помощью средств операйионной системы и, соответсвенно, дает делать только так, как расчитано и ни как иначе. |
#4
|
||||
|
||||
![]() Black Raider
Цитата:
Это чото нето! форма ссловно "дырявая" получается, а мне нужно именно прозрачная, ктому же комп как то напрягается, да еще и к правому краю монитора "прилипает". А можно ли ето реализовать спомощью свойства AlphaBlendValue? lmikle Цитата:
Вообщем мне нужно чтобы форма была прозрачной приблизительно как при AlphaBlendValue=220, а остальные элементы управления расположеные на форме имели нормальную прозрачность! |
#5
|
||||
|
||||
![]() Цитата:
способ 2. UpdateLayeredWindow. во вторым способам не справишься наверняка. Arrrgh |
#6
|
|||
|
|||
![]() Если делать честно, то надо писать свою форму, которая реализует прозрачность не за счет возможностей windows. Т.е. она как-бы не прозрачная, но сама отрисовывает на канве то, что скрыто под ней. При этом компоненты будут работать нормально.
|
#7
|
||||
|
||||
![]() Цитата:
Arrrgh |
#8
|
|||
|
|||
![]() ну почему сразу лагать.
если делать аккуратно, то это не так и напряжно для компа. собственно, вопрос только в одном - как получить изображение под формой. Остальное делается на ура и никак не тормозит. |
#9
|
||||
|
||||
![]() Цитата:
Arrrgh |
#10
|
|||
|
|||
![]() ну, при очень быстрых перемещениях - возможно. однако, в таком случае пользователь все-равно фиг чего увидит
![]() |
#11
|
||||
|
||||
![]() Цитата:
Arrrgh |
#12
|
|||
|
|||
![]() Нет, на вскидку не напишу - надо порыться как получать картинку под формочкой. Если сделаешь этот код, то с быстрым отображением помогу. Самому копаться просто лень, бо как мне это нафиг не надо.
|
#13
|
|||
|
|||
![]() На:
Код:
procedure TForm1.FormPaint(Sender: TObject); var C : TCanvas; H : THandle; R : TRect; begin C := TCanvas.Create; H := GetDesktopWindow; C.Handle := GetWindowDC(H); R := Rect(0,0,Screen.Width,Screen.Height); If H <> 0 Then GetWindowRect(H,R); Self.Canvas.CopyRect(Rect(0,0,Width,Height),C,Rect(Left,Top,Left + Width,Top + Height)); C.Free; end; Немножко не то, но очень близко. Дальше дотачивай сам. |
#14
|
||||
|
||||
![]() еще на 95 таким образом делал прозрачность (встроенной то нет) - ничего не тормозило, код не остался. по памяти: запоминать что под формой нужно в WM_ERASEBKGND, рисовать в WM_PAINT
|