// при создании формы придеться сделать подобное
Код:
var
Main, Mask: TBitMap;
begin
StackCtrls := TList.Create;
BMain := TBitMap.Create;
BMain.PixelFormat := pf32bit;
BOutMain := TBitMap.Create;
BOutMain.PixelFormat := pf32bit;
Main := TBitMap.Create; Mask := TBitMap.Create;
Main // просто фон ))
Mask // грузим маску собственно все эффекты в самой маске, чем чернее тем прозрачней
BuildCopy24to32(Main, Mask, BMain);
BOutMain.Assign(BMain);
Main.Free; Mask.Free;
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE)
or WS_EX_LAYERED); // позволим форме поддержку слоев
// форму под нашу картинку
Width := BMain.Width;
Height := BMain.Height;
zsize.cx := BMain.Width;
zsize.cy := BMain.Height;
zpoint := Point(0,0);
with zbf do
begin
BlendOp := AC_SRC_OVER;
BlendFlags := 0;
AlphaFormat := AC_SRC_ALPHA;
SourceConstantAlpha := 255; // 255 - полная не прозрачность формы, сразу говорю что форма появлялась плавно это лучше не юзать, у меня лагает все
end;
// на разрушение формы делаем подобное
PopAndDestroy(StackCtrls.Count);
StackCtrls.Free;
BOutMain.Free;
BMain.Free;
// ну собственно обновление
TopLeft := BoundsRect.TopLeft;
UpdateLayeredWindow(Handle, 0, @TopLeft, @zsize, BOutMain.Canvas.Handle,
@zpoint, 0, @zbf, ULW_ALPHA);
Admin: Пользуемся тегами!
// да и еще когда вызывается отрисовка сделайте чтот типа Painting: Boolean;
и вот когда например какой то контрол отрисовывается, а их очень много в очереди отрисовки, ставите Painting = true, и при вызове обновления слоя, проверка на то что Painting = false иначе выходим и таким образом ускорение отрисовки формы и исчезновение эффекта отрисовки формы
ну вот и все ))) кому интересно тут достаточно я выложил