Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Подскажите как сделать
Показать сообщение отдельно

Аватара для Netscaper

Пользователь


Сообщения: 84
Благодарности: 0

Профиль | Отправить PM | Цитировать


Kuper
Возможно. Функция Windows API:
Код: Выделить весь код
BOOL SetLayeredWindowAttributes(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags);
Окно hwnd должно обладать атрибутом WS_EX_LAYERED(в расширенных стилях GWL_EXSTYLE), который устанавливается при его создании или с помощью функции SetWindowLong после его создания. Указывается структура COLORREF (4-х байтный TColor в Delphi) - указывается цвет, который должен выступать в роли прозрачного, если надо, скажем, сделать неровные границы. bAlpha - уровень прозрачности 0-255, где 255 - непрозрачный,
dwFlags это:
LWA_COLORKEY - сделать прозрачным цвет
LWA_ALPHA - сделать прозрачным окно.
Вот как делает это Delphi 6 (см. исходники VCL):
Код: Выделить весь код
procedure TCustomForm.SetLayeredAttribs;
const
  cUseAlpha: array [Boolean] of Integer = (0, LWA_ALPHA);
  cUseColorKey: array [Boolean] of Integer = (0, LWA_COLORKEY);
var
  AStyle: Integer;
begin
  if not (csDesigning in ComponentState) and
    (Assigned(SetLayeredWindowAttributes)) and HandleAllocated then
  begin
    AStyle := GetWindowLong(Handle, GWL_EXSTYLE);
    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
    else
    begin
      SetWindowLong(Handle, GWL_EXSTYLE, AStyle and not WS_EX_LAYERED);
      RedrawWindow(Handle, nil, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);
    end;
  end;
end;

Отправлено: 04:14, 30-10-2004 | #8

Название темы: Подскажите как сделать