Главная страница
    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.46 MB
Время: 0.037 c
4-1125318964
Uran
2005-08-29 16:36
2005.11.06
Разрешения в реестре


6-1121512855
Dust
2005-07-16 15:20
2005.11.06
Сниферы и PPP-адаптер


1-1129609852
7#Z$Ad!*7
2005-10-18 08:30
2005.11.06
Не работает TopItem в компоненте TTreeView


3-1127815585
Андрей Жук
2005-09-27 14:06
2005.11.06
Шифрование данных в блобе


3-1127550029
menart
2005-09-24 12:20
2005.11.06
ADO API





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский