![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Полупрозрачная форма и текст на ней.
IceBeerg © (2005-12-15 13:26:00)Уважаемые. Подскажите, как на полупрозрачной форме написать нормальный текст, без эффекта полупрозрачности. Что-то никак не получается ни canvas, ни установка свойства прозрачности компонету TStaticText не помогает, уже незнаю куда копать.
Ворму "обрабатываю" так:
Procedure TransparentForm(WND:HWND;Value:Integer);
Var
Temp_WS: LongInt;
Handle: HWND;
Begin
If Value>0 Then Begin
Temp_WS:=GetWindowLongA(WND,GWL_EXSTYLE);
SetWindowLongA(WND,GWL_EXSTYLE,Temp_WS or WS_EX_LAYERED);
SetLayeredWindowAttributes(WND,0,Value,LWA_ALPHA);
End
Else SetWindowLongA(WND,GWL_EXSTYLE,Temp_WS or WS_EX_LAYERED);
End;
IceBeerg (2005-12-15 16:50:00) [1]Antonn © (15.12.05 14:56) [4]
Понятно. Спасибо. Думал есть проще способ, просто до меня не доходит...
Antonn (2005-12-15 14:56:00) [2]IceBeerg © (15.12.05 13:39) [3]
Да с таким количеством параметров рехнуться можно...
да их там не много :)
procedure TLayerRender.RenderForm;
var zsize:TSize; zpoint:TPoint; zbf:TBlendFunction;
TopLeft: TPoint; DC:HDC;
begin
SetWindowLong(F.Handle,GWL_EXSTYLE, GetWindowLong(F.Handle,GWL_EXSTYLE) or WS_EX_LAYERED);
zsize.cx := _OutBitmap.Width;
zsize.cy := _OutBitmap.Height;
zpoint := Point(0,0);
with zbf do begin
BlendOp := AC_SRC_OVER;
BlendFlags := 0;
AlphaFormat := AC_SRC_ALPHA;
SourceConstantAlpha := transparent;
end;
DC:= GetDC(0);
TopLeft:=mainform.BoundsRect.TopLeft;
UpdateLayeredWindow(mainform.Handle,DC,@TopLeft,@zsize,_OutBitmap.Canvas.Handle,@zpoint,0,@zbf, ULW_ALPHA);
end;
где _OutBitmap -32битный битмап, который заменяет битмап(изображение?) формы. Т.е. будет виден только он.
Альфаканал работает как маска. А самый гемор, это то, что изображение нужно обновлять самому, т.е. получила кнопка фокус, нужно обновлять, нажали кнопку - обновлять... А перед обновлением пробежать все видимые контроллы и нарисовать их на этом самом _OutBitmap. Зато будут обалденные эффекты (для примера - Konfabulator).
Antonn (2005-12-15 13:39:00) [3]но геморрою от этого...
IceBeerg (2005-12-15 13:39:00) [4]Antonn © (15.12.05 13:32) [1]
UpdateLayeredWindow()
Да с таким количеством параметров рехнуться можно...
Antonn (2005-12-15 13:32:00) [5]нужно использовать не SetLayeredWindowAttributes(), а UpdateLayeredWindow()