Вы должны отслеживать свой предыдущий индекс страницы вручную. Например, в обработчиках событий OnClick вашей кнопки Next и Previous вы можете сделать что-то вроде этого:
procedure TWizardForm.NextClick(ASender: TObject);
begin
SwitchPage(True);
end;
procedure TWizardForm.PreviousClick(ASender: TObject);
begin
SwitchPage(False);
end;
SwitchPage () будет выглядеть примерно так:
procedure TWizardForm.SwitchPage(AForward: boolean);
var
LGotoPage: integer;
begin
LGotoPage := PageControl.ActivePageIndex;
if AForward and (PageControl.ActivePageIndex < PageControl.PageCount) then
inc(LGotoPage)
else if PageControl.PageIndex > 0 then
dec(LGotoPage);
if (LGotoPage <> PageControl.ActivePageIndex)
and AllowSwitchFrom(ActivePageIndex) then
begin
FPreviousPage := PageControl.ActivePageIndex;
PageControl.ActivePageIndex := LGotoPage;
end;
end;
Или что-то на этот счет. :)
Редактировать: Аргалатыр правильный, а я неправильный, в случае, если вы хотите перемещаться по мастеру в последовательном порядке, который, как я предполагаю, имеет место здесь.
Обработчик OnChanging действительно запускается, и страница, с которой вы приходите, (все еще) является активной страницей.
Событие OnChanging не срабатывает, когда вы устанавливаете индекс страницы напрямую, как в моем примере, поэтому вы должны отслеживать старый индекс страницы. Это происходит от кодирования мастеров с помощью дополнительных страниц (не последовательных).
Я должен был проверить немного лучше, прежде чем отправлять. Извиняюсь за неправильный ответ.
N @