Главная страница
    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.04 c
14-1129632342
vanek_kg
2005-10-18 14:45
2005.11.06
Помогите новичку


3-1127905586
Бульбаш
2005-09-28 15:06
2005.11.06
Передача строкового параметра


1-1129094952
SANEK_10289
2005-10-12 09:29
2005.11.06
Помогите пожалуйста... Я из реестра беру имя пользователя...


1-1129549303
Trifle
2005-10-17 15:41
2005.11.06
Поменять надписи на кнопках MessageDlg?


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