Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.22;
Скачать: CL | DM;

Вниз

Полупрозрачная форма и текст на ней.   Найти похожие ветки 

 
IceBeerg ©   (2005-12-15 13:26) [0]

Уважаемые. Подскажите, как на полупрозрачной форме написать нормальный текст, без эффекта полупрозрачности. Что-то никак не получается ни 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;


 
Antonn ©   (2005-12-15 13:32) [1]

нужно использовать не SetLayeredWindowAttributes(), а UpdateLayeredWindow()


 
Antonn ©   (2005-12-15 13:39) [2]

но геморрою от этого...


 
IceBeerg ©   (2005-12-15 13:39) [3]

Antonn ©   (15.12.05 13:32) [1]
UpdateLayeredWindow()

Да с таким количеством параметров рехнуться можно...


 
Antonn ©   (2005-12-15 14:56) [4]

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).


 
IceBeerg ©   (2005-12-15 16:50) [5]

Antonn ©   (15.12.05 14:56) [4]
Понятно. Спасибо. Думал есть проще способ, просто до меня не доходит...



Страницы: 1 вся ветка

Текущий архив: 2006.01.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
14-1135874295
ПЛОВ
2005-12-29 19:38
2006.01.22
Кто нибудь юзает xD Picture Card


14-1135680476
ANB
2005-12-27 13:47
2006.01.22
Таки поднялся Крымский вопрос.


5-1121781895
Destroyer
2005-07-19 18:04
2006.01.22
Создание кнопки с вертикальным текстом


1-1134722112
scorpio_md
2005-12-16 11:35
2006.01.22
Как закрыть EXCEL без запроса на сохранение


9-1123498084
Дюша
2005-08-08 14:48
2006.01.22
OpenGl в Delphi