Вы должны отслеживать свой предыдущий индекс страницы вручную. Например, в обработчиках событий OnClick кнопок «Следующая» и «Предыдущая» вы можете сделать что-то вроде этого:
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@
person
Nat
schedule
25.08.2009