![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Приветствую! Всё о старом, TRANSPARENT формы, как? [D5, D7, Win2k, WinXP]
IronHawk © (2005-01-21 14:29:00)Приветствую всех, особенно тех, кто меня помнит :)
Вот пришлось вспомнить старое и на WinAPI сваять форму, всё хорошо, только форма определённого цветя меня не устраивает, хочу полупрозрачную!
В Д7 ставим свойство у формы AlfaBlend в True, a AlfaBlendValue в 100 и всё работает, но моя на WinAPI.
Делаю так:
var
ps : TPaintStruct;
ddc: HDC;
begin
WindowProc := 0;
case Msg of
WM_PAINT :
begin
beginPaint(wnd, ps);
ddc := GetDC(wnd);
SetBkMode(ddc,TRANSPARENT);
releasedc(ddc, wnd);
EndPaint(Wnd, ps);
end;
...
Форма прозрачная, но при перетаскивании не обновляется, а остается с куском фрагмента раб.стола.
Пробовал вариант с GetDesktopWindow, тот же прилок.
Подскажите ПЛИЗ!
MBo (2005-01-21 18:29:00) [1]При создании окна (если оперционка Win2K и выше) нужно включить флаг WS_EX_LAYERED, затем SetLayeredWindowAttributes
Посмотри в MSDN, там пример есть
IronHawk (2005-01-21 16:44:00) [2]Я пробовал и GetDesktopWindow и WS_EX_TRANSPARENT но что-то постоянно упускаю.
> MBo © (21.01.05 14:51)
Спасибо, я перед тем как написать в форум просмотрел:
..\Borland\Delphi7\Demos\ActionBands\AlphaBlendMenus\AlphaBlendDemo.dpr
e меня всё в API...
MBo (2005-01-21 14:51:00) [3]кусочек из Forms.pas
if FAlphaBlend or FTransparentColor then
begin
if (AStyle and WS_EX_LAYERED) = 0 then
SetWindowLong(Handle, GWL_EXSTYLE, AStyle or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, FTransparentColorValue, FAlphaBlendValue,
cUseAlpha[FAlphaBlend] or cUseColorKey[FTransparentColor]);
end
Piter (2005-01-21 14:44:00) [4]А ты что, переменную совсем уже очистил?