Форум: "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