Thema: Delphi Transparente Fenster?

Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Transparente Fenster?

  Alt 25. Okt 2005, 21:33
naja, dann halt mal ne Erklärung. Wie bereits geschrieben war das ganze für Delphi5
Zur Zusammenfassung erstmal der Komplette Source.
Delphi-Quellcode:
function SetFormTransparent(AFormHandle: HWnd; ATransparentVal: Byte): Boolean;
const
  WS_EX_LAYERED = $00080000;
  LWA_ALPHA = $00000002;
var LStyle: Integer;
    LDLLHandle: Cardinal;
    LSetLayerdProc: function (Hwnd: THandle; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): Boolean; stdcall;
begin
  LDLLHandle := LoadLibrary('user32.dll');
  if LDLLHandle <> 0 then
  begin
    @LSetLayerdProc := GetProcAddress(LDLLHandle, 'SetLayeredWindowAttributes');
    if Assigned(LSetLayerdProc) then
    begin
      LStyle := GetWindowLong(AFormHandle, GWL_EXSTYLE);
      SetWindowLong(AFormHandle, GWL_EXSTYLE, LStyle or WS_EX_LAYERED);

      result := LSetLayerdProc(AFormHandle, 0, ATransparentVal, LWA_ALPHA);
    end else result := False;
    FreeLibrary(LDLLHandle);
  end else result := False;
end;
Da es unter Delphi5 die Funktion "SetLayeredWindowAttributes" noch nicht gab musste diese hier mittels LoadLibrary und GetProcAddress erst eingebunden werden. Die Konstanten LWA_ALPHA und WS_EX_LAYERED gab es auch noch nicht. Wenn man all das Berücksichtigt sieht die Funktion für D2005 so aus:
Delphi-Quellcode:
function SetFormTransparent(AFormHandle: HWnd; ATransparentVal: Byte): Boolean;
var LStyle: Integer;
begin
  LStyle := GetWindowLong(AFormHandle, GWL_EXSTYLE);
  SetWindowLong(AFormHandle, GWL_EXSTYLE, LStyle or WS_EX_LAYERED);
  result := SetLayeredWindowAttributes(AFormHandle, 0, ATransparentVal, LWA_ALPHA);
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat