Показать сообщение отдельно
  #2  
Старый 27.06.2009, 04:14
Аватар для Mealgay
Mealgay Mealgay вне форума
Прохожий
 
Регистрация: 27.06.2009
Сообщения: 17
Репутация: 10
По умолчанию

// при создании формы придеться сделать подобное
Код:
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 иначе выходим и таким образом ускорение отрисовки формы и исчезновение эффекта отрисовки формы

ну вот и все ))) кому интересно тут достаточно я выложил
Ответить с цитированием