[Code]
//--Действие с CallBackCtrl-----
type
TCallbackProcI = function(h:hWnd;Msg,wParam,lParam:Longint):Longint;
//----------------------------------------------
const
WM_NCLBUTTONDOWN = $00A1; // нажатие левой кнопки мыши по неклиентской области окна
HTCAPTION = 2; // константа определяет заголовок окна
GWL_WNDPROC = -4;
//--Действие с CallBackCtrl-----
function WndProcCallBackI(Callback:TCallbackProcI;ParamCount:Integer):LongWord; external 'wrapcallbackaddr@files:CallBackCtrl.dll stdcall';
//----------------------------------------------
function SetLayeredWindowAttributes(hwnd: HWND; crKey: TColor; bAlpha: BYTE; dwFlags: DWORD): Boolean; external 'SetLayeredWindowAttributes@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
function ReleaseCapture(): Longint; external 'ReleaseCapture@user32.dll stdcall';
var
OldProc: Longint;
function MyProc(h: HWND; Msg, wParam, lParam: longint): Longint;
begin
if (Msg = WM_NCLBUTTONDOWN) and (wParam = HTCAPTION) then begin
SetWindowLong(h, (-20), GetWindowLong(h, (-20)) or $80000);
SetLayeredWindowAttributes(h, 0, 150, 2); // делаем окно полупрозрачным изменяя bAlpha - у меня 150
ReleaseCapture;
SendMessage(WizardForm.Handle,$0112,$F012,0);
SetWindowLong(h, (-20), GetWindowLong(h, (-20)) or $80000);
SetLayeredWindowAttributes(h, 0, 255, 2); // делаем окно снова непрозрачным bAlpha = 255
Result:= 0;
Exit;
end;
Result:= CallWindowProc(OldProc, h, Msg, wParam, lParam);
end;
procedure InitializeWizard();
begin
OldProc:= SetWindowLong(WizardForm.Handle, GWL_WNDPROC, WndProcCallBackI(@MyProc,4)); { для стекла }
end;
procedure DeinitializeSetup();
begin
SetWindowlong(WizardForm.Handle, GWL_WNDPROC, OldProc);
end;