Thema: Delphi Alphablend?

Einzelnen Beitrag anzeigen

DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: Alphablend?

  Alt 5. Mär 2004, 14:03
hatte ich auch mal zu D5 zeiten gebraucht hatte aber damals schwierigkeiten
mit win98

versuchs mal mit folgendem code und D5

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

const
  WS_EX_LAYERED = $80000;
  LWA_COLORKEY = 1;
  LWA_ALPHA = 2;

type
  TSetLayeredWindowAttributes = function(
    hwnd: HWND; // handle fuers fenster
    crKey: TColor; // die farbe
    bAlpha: byte; // wert fuer die blend funktion
    dwFlags: DWORD //
    ): BOOL; stdcall;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure SetTransparentForm(AHandle: THandle; AValue: byte = 0);
var
  Info: TOSVersionInfo;
  SetLayeredWindowAttributes: TSetLayeredWindowAttributes;
begin
 // geht meines wissen ab win2000
  Info.dwOSVersionInfoSize := SizeOf(Info);
  GetVersionEx(Info);
  if (Info.dwPlatformId = VER_PLATFORM_WIN32_NT) and
    (Info.dwMajorVersion >= 5) then
  begin
    SetLayeredWindowAttributes := GetProcAddress(GetModulehandle(user32), 'SetLayeredWindowAttributes');
    if Assigned(SetLayeredWindowAttributes) then
    begin
      SetWindowLong(AHandle, GWL_EXSTYLE, GetWindowLong(AHandle, GWL_EXSTYLE) or WS_EX_LAYERED);
        //und jetzt transparent zeichnen
      SetLayeredWindowAttributes(AHandle, 0, AValue, LWA_ALPHA);
    end;
  end;
end;




procedure TForm1.FormCreate(Sender: TObject);
begin
    // 0 --> voll transparent
    // 255 --> nicht trabsparent
  SetTransparentForm(Handle, 240);

end;

end.
[edit=Admin]CODE-Tags in DELPHI-Tags gewandelt. Mfg, Daniel[/edit]
  Mit Zitat antworten Zitat