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;