Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

Не могу отцентрировать PropertyPage   Найти похожие ветки 

 
Darts   (2005-09-02 13:12) [0]

В структуре TPROPSHEETHEADER в dwFlags указываю флаг создания callBack-функции PSH_USECALLBACK.
Сама callBack-функция - это PropSheetPageProc.
В PropSheetPageProc ловю сообщение PSCB_INITIALIZED, вызываю функцию центровки окна CenterWindow, которая возвращает не нуль - и ничего не происходит...
Куда копать?

Ниже фрагмент кода

function CenterWindow(const Window: HWnd): Boolean;
var
 R: TRect;
begin
 GetWindowRect(Window, R);
 Result :=
   MoveWindow(
   Window,
   (GetSystemMetrics(SM_CXSCREEN) - (R.Right - R.Left)) div 2,
   (GetSystemMetrics(SM_CYSCREEN) - (R.Bottom - R.Top)) div 2,
   R.Right - R.Left,
   R.Bottom - R.Top,
   True);
end;

....
function PropSheetPageProc(Window: HWnd; uMsg: Integer; ppsp: PPropSheetPage): Integer; stdcall;
var
 i: Integer;
 b: Boolean;
begin
 PropSheetPageProc := -1;
 case uMsg of
   PSCB_INITIALIZED:
   begin
     b := CenterWindow(Window);
     if b then MessageBox(0, "Ooooops!!!", PChar(IntToStr(Window)), 0);
   end;
 end; // case
end;

....
//
procedure ParametersDialog(const Table: XBase; const HInstance: HInst; const Handle: HWnd);
var
 i: Integer;
 PropPage:   array[0..PAGES] of PROPSHEETPAGE;
 aHandle:    array[0..PAGES] of Pointer;
 PropHeader: TPROPSHEETHEADER;
begin

 // Создание страниц
 for i := 0 to PAGES do begin
   with PropPage[i] do begin
     FillChar(PropPage[i], SizeOf(PROPSHEETPAGE), 0);
     dwSize      := SizeOf(PROPSHEETPAGE);
     dwFlags     := PSP_USETITLE or PSP_USECALLBACK;
     hInstance   := HInstance;
     pResource   := {$ifdef FPC}LPCDLGTEMPLATE{$endif}(PChar(STARTRES + i));
     pszTitle    := aTitle[i];
     //case i of
     //  0:
     //pfnDlgProc := DlgProc(@ConfirmationsDlg);
     pfnDlgProc := {$ifdef FPC}DlgProc{$endif}(@ConfirmationsDlg);
     //pfnCallBack := LPFNPSPCALLBACK(@PropSheetPageProc);
     //pfnCallBack := PropSheetPageProc;
   end;
   aHandle[i] := CreatePropertySheetPageA({$ifdef FPC}@{$endif}PropPage[i]);
 end;

 with PropHeader do begin
   FillChar(PropHeader, SizeOf(TPROPSHEETHEADER), 0);
   dwSize      := SizeOf(TPROPSHEETHEADER);
   dwFlags     := PSH_NOAPPLYNOW or PSH_USECALLBACK;
   hwndParent  := Handle;
   hInstance   := hInstance;
   pszCaption  := PChar(TITLE);
   nPages      := PAGES + 1;
   nStartPage  := 0;
   ppsp        := Addr(aHandle);
   //pfnCallback := PFNPROPSHEETCALLBACK(@PropSheetPageProc);
   pfnCallback := TFNPropSheetCallback(@PropSheetPageProc);
 end;
 {$ifdef FPC}
 PropertySheet(@PropHeader);
 {$else}
 PropertySheet(PropHeader);
 {$endif}


 
begin...end ©   (2005-09-02 15:07) [1]

> Darts   (02.09.05 13:12)

А сообщение-то ловится?

> PropSheetPageProc := -1

А почему -1, а не 0?


 
Darts   (2005-09-02 15:19) [2]

1. Сообщение - да. MessageBox и отладчик доказывают.
2. В case .. end был опущен else, который возвращает 0. Текст был подрезан ждя экономии места.


 
begin...end ©   (2005-09-02 15:23) [3]

> Darts   (02.09.05 15:19) [2]

> В case .. end был опущен else, который возвращает 0.

А почему 0 возвращается только в else?


 
Darts   (2005-09-02 16:09) [4]

А зачем мне остальные сообщения, кроме того, что мне нужно. Обрабатывая его, возвращаю -1, остальные игнорирую, поэтому - 0. Для диалоговой процедуры - это норма.


 
begin...end ©   (2005-09-02 16:23) [5]

В MSDN поле _PROPSHEETHEADER.pfnCallback описано как PFNPROPSHEETCALLBACK.

Сам PFNPROPSHEETCALLBACK описан как

int CALLBACK PropSheetProc(HWND hwndDlg,
   UINT uMsg,
   LPARAM lParam
)

и указано, что возвращаться должен ноль. Я не прав?



Страницы: 1 вся ветка

Текущий архив: 2005.11.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
11-1110634509
Watcher
2005-03-12 16:35
2005.11.06
Transparent


14-1128783117
ReStudent
2005-10-08 18:51
2005.11.06
Бинарное дерево


2-1127840799
bogdan
2005-09-27 21:06
2005.11.06
задача на вычисление количества чисел


2-1129301080
Qand
2005-10-14 18:44
2005.11.06
Как в PageControl сделать невидимой одну из страниц?


2-1129059369
DroNIX
2005-10-11 23:36
2005.11.06
Как рационально изменить формулу