Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Вниз

Не могу отцентрировать 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.037 c
8-1118403597
Dwarfer
2005-06-10 15:39
2005.11.06
NCTVideoStudio ActiveX DLLs


4-1125652375
Darts
2005-09-02 13:12
2005.11.06
Не могу отцентрировать PropertyPage


2-1129393807
Alex77777
2005-10-15 20:30
2005.11.06
Вопрос по Ehlib


14-1129572157
eagle_ua
2005-10-17 22:02
2005.11.06
Как создать объект в Delhpi?


1-1129726945
Dush
2005-10-19 17:02
2005.11.06
Excel и Stringgrid





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский