Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Подскажите как сделать (http://forum.oszone.net/showthread.php?t=29339)

rootKit 22-10-2004 16:27 203426

В NVIDIA ForceWare есть опция, благодаря которой можно совершенно любое окно в системе сделать полупрозрачным. Подскажите как это можно организовать в своей программе на Delphi.

[s]Исправлено: rootKit, 16:33 22-10-2004[/s]

JCooper 22-10-2004 16:47 203427

rootKit
А разве это не на уровне GDI делается?

rootKit 22-10-2004 17:09 203428

Я в этом совсем чайник. Хоть строчку кода пожалуста.

[s]Исправлено: rootKit, 17:24 22-10-2004[/s]

JCooper 23-10-2004 14:54 203429

rootKit
http://wasm.ru/article.php?article=1001020

rootKit 29-10-2004 17:31 203430

Уй ё!:o А полегче некак?

Netscaper 29-10-2004 19:20 203431

AlphaBlend. Только в Win2000 и более новых, в старых Windows никакого эффекта не будет. Для Delphi 5 - не помню, а в Delphi 6+:
Код:

procedure TForm1.Button1Click(Sender: TObject);
begin
  AlphaBlendValue:=128;
  AlphaBlend:=not AlphaBlend;
end;


[s]Исправлено: Netscaper, 19:31 29-10-2004[/s]

JCooper 29-10-2004 21:59 203432

Netscaper
Я так понял человек хочет сделать ЛЮБОЕ окно полупрозрачным, а не окно своей программы.

Netscaper 30-10-2004 04:14 203433

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;


rootKit 17-12-2004 16:17 280970

Looks perfect... Но можно ли где небудь достать исходник, илюстрирующий данную возможность?

hasherfrog 24-12-2004 23:26 283185

гугль рулит не по детски


Время: 02:57.

Время: 02:57.
© OSzone.net 2001-