Пацаны помогите пожалуйста вместо скрытия подсказок (
http://forum.oszone.net/post-2080773-1638.html ) добавить кнопку "свернуть" в
заголовок формы ( BorderStyle := bsDialog )
а именно через функцию DrawFrameControl(..., DFCS_CAPTIONMIN, ...)
вот мой потр (не рабочий):
читать дальше »
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
[code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
const
GWL_WNDPROC = -4;
SM_CXSIZE = 30;
SM_CYSIZE = 31;
SM_CXFRAME = $20;
SM_CYFRAME = 33;
DFC_BUTTON = 4;
DFCS_BUTTONPUSH = $10;
DFCS_PUSHED = $200;
WM_NCACTIVATE = $0086;
DFCS_CAPTIONMIN = 1;
type
LPARAM = Integer;
WPARAM = Integer;
LRESULT = Integer;
TFNWndProc = Integer;
HDC = LongWord;
PRect = TRect;
var
OldWindowProc: Longint;
R: TRect;
Press: Boolean;
function GetWindowDC(hWnd: HWND): HDC; external 'GetWindowDC@user32.dll stdcall';
function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';
function DrawFrameControl(DC: HDC; Rect: PRect; uType, uState: UINT): BOOL; external 'DrawFrameControl@user32.dll stdcall';
function ReleaseDC(hWnd: HWND; hDC: HDC): Integer; external 'ReleaseDC@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';
function Bounds(ALeft, ATop, AWidth, AHeight: Integer): TRect;
begin
Result.Left := ALeft;
Result.Top := ATop;
Result.Right := AWidth;
Result.Bottom := AHeight;
end;
procedure DrawBtn(Ctrl: TWinControl);
var
WDc: HDC;
Cx, Cy: Integer;
XFrame, Yframe: Integer;
iHandle: HWND;
begin
iHandle := Ctrl.Handle;
WDc := GetWindowDc(iHandle);
Cx := GetSystemMetrics(SM_CXSIZE);
Cy := GetSystemMetrics(SM_CYSIZE);
xFrame := GetSystemMetrics(SM_CXFRAME);
yFrame := GetSystemMetrics(SM_CYFRAME);
R := Bounds(Ctrl.Width - xFrame - 4*Cx + 2, yFrame + 2, Cx - 2, Cy - 4);
if Press then
DrawFrameControl(WDc, R ,DFC_BUTTON, DFCS_CAPTIONMIN or DFCS_PUSHED)
else
DrawFrameControl(WDc,R, DFC_BUTTON, DFCS_CAPTIONMIN);
ReleaseDc(iHandle,WDC);
end;
function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
if Msg = WM_NCACTIVATE then DrawBtn(WizardForm);
Result := CallWindowProc(OldWindowProc, hWnd, Msg, wParam, lParam);
end;
procedure InitializeWizard();
begin
WizardForm.BorderStyle := bsDialog;
OldWindowProc := SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('WindowProc'));
//
end;
procedure DeinitializeSetup();
begin
SetWindowlong(WizardForm.Handle, GWL_WNDPROC or -21, OldWindowProc);
end;
очень хочу 2 нормальные кнопки в заголовке!
Буду очень признателен!
вот исходник на дельфи