Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Пацаны помогите пожалуйста вместо скрытия подсказок ( 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 нормальные кнопки в заголовке!
Буду очень признателен!

вот исходник на дельфи

Последний раз редактировалось Johny777, 26-03-2013 в 15:57.


Отправлено: 15:11, 07-02-2013 | #1623