Главная страница
    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.041 c
1-1129651397
TStas
2005-10-18 20:03
2005.11.06
Как отследить прекращение работы консольного приложения?


2-1129462287
STEEL
2005-10-16 15:31
2005.11.06
Перевод курсора на новую строку


2-1129392436
Nicolas1989
2005-10-15 20:07
2005.11.06
Работа с COM портом


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


2-1129199319
Dust
2005-10-13 14:28
2005.11.06
Значение формальных и фактических параметров различается!!!!!!!!!





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