Диалог в стиле wizard'а
Автор: Dynamic
Источник: http://dynamic.nm.ru/
В этой статье на простом примере я покажу, каким образом можно организовать в своей программе диалоговое окно с пошаговым выполнением (уточнением) какой-либо задачи (такое окно обычно называют мастером или визардом (от англ. wizard - волшебник, маг)). Наибольшее распространение мастера получили в программах-инсталляторах, а также в других программах, требующих для выполнения своей задачи строго определенной последовательности действий, которая (последовательность) может оказаться сложной для новичка.
Существует немало способов решить нашу задачу, например, использовать для каждого шага собственную отдельную форму, фрейм, или панель, компонент TNotebook с закладки Win31 или более современный TPageControl. Есть даже готовые инструменты для создания такого рода диалогов. Выбор, в итоге, остается за вами, я же покажу некоторые принципы их построения на примере компонента TPageControl.
Итак, кладем на форму компонент TPageControl и добавляем требуемое количество закладок. Я для примера создал пять закладок:
- Первая страница. Особенность: кнопка "Назад" неактивна (куда ж идти то?). Обычно здесь располагается общая информация о задаче (программе);
- Вторая страница. Особенность: переход на следующую страницу возможен только при выполнении определенного условия. В программах установки таким условием является согласие пользователя с лицензионным соглашением;
- Третья страница. С нее в зависимости от выбора пользователя будет осуществляться переход либо на следующую страницу, либо сразу на пятую (последнюю в нашем примере);
- Четвертая страница. Ничего особенного, нужна как "заглушка" для предыдущего шага;
- Пятая страница. Конечный этап: кнопка "Далее" отключается, появляется кнопка "Готово".
Первым делом нам предстоит избавиться от закладок: они позволяют произвольно переключаться между страницами, а это противоречит условию нашей задачи. Вот как это можно сделать:
procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
// Прячем закладки. В принципе эту операцию можно выполнить
// и в Инспекторе объектов, но так будет более универсально
for i := 0 to PageControl1.PageCount-1 do
PageControl1.Pages[i].TabVisible := false;
// Делаем активной (видимой) первую страницу
PageControl1.ActivePageIndex := 0;
// Обновляем элементы управления
CheckChange(0);
end;
procedure TForm1.CheckChange(NewIdx: integer);
begin
// Контролируем "крайние" закладки:
btBack.Enabled := NewIdx > 0;
btFrwrd.Enabled := NewIdx < PageControl1.PageCount-1;
// Кнопка "Готово" видна только на последней странице
btend.Visible := not btFrwrd.Enabled;
// Метка с сообщением, что предыдущая страница была пропущена
Label6.Visible := RadioGroup2.ItemIndex > 0;
// дополнительные проверки в зависимости от номера текущей страницы (закладки)
case NewIdx of
1: btFrwrd.Enabled := btFrwrd.Enabled and (RadioGroup1.ItemIndex > 0);
2: btFrwrd.Enabled := RadioGroup2.ItemIndex > -1;
3: if RadioGroup2.ItemIndex > 0 then
if GoBack then
PageControl1.SelectNextPage(false, false) else
PageControl1.SelectNextPage(true, false);
end;
end;
Логическая переменная GoBack позволяет определить направление переключения закладок: вперед или назад. Ее значение формируется в обработчиках соответствующих кнопок "Вперед" и "Назад":
procedure TForm1.btFrwrdClick(Sender: TObject);
begin
GoBack := false;
PageControl1.SelectNextPage(true, false);
end;
procedure TForm1.btBackClick(Sender: TObject);
begin
GoBack := true;
PageControl1.SelectNextPage(false, false);
end;
Теперь посмотрим - когда же необходимо вызвать процедуру CheckChange() для обновления состояния элементов управления.
Во-первых, после смены любым способом активной страницы (TPageControl генерирует при этом событие OnChange):
procedure TForm1.PageControl1Change(Sender: TObject);
begin
CheckChange(PageControl1.ActivePageIndex);
end;
Во-вторых, при изменении состояния групп радиокнопок (в вашей программе это, конечно, могут быть любые другие элеметы управления):
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
CheckChange(PageControl1.ActivePageIndex);
end;
procedure TForm1.RadioGroup2Click(Sender: TObject);
begin
CheckChange(PageControl1.ActivePageIndex);
end;
Автор — Dynamic
Статья добавлена: 14 апреля 2007
Следующая статья: Использование компонента TCoolBar »
Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.
Статьи, похожие по тематике
- Web-страничка внутри приложения
- Бегущая строка
- Введение в Synapse
- Виртуальный ListView
- Выравнивание компонентов
- Добавляем компонент в стандартный Message Dialog
- Использование компонента TCoolBar
- Компоненты Ribbon в Delphi
- Написание инсталлятора на Delphi
- Обучающий курс. 13. Ввод и вывод
- Обучающий курс. 6. Обзор свойств формы
- Обучающий курс. 7. Обзор палитры компонент - Standard, Additional
- Перемещение TImage по форме во время работы приложения
- Рисуем график функции в Delphi
- Создание интерфейса с использованием PNG-графики
- Создание своего диалога выбора цвета
- Читаем цитаты с bash.org.ru своей программой
Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:
Ссылка для форумов (BBCode):
Быстрая вставка ссылки на статью в сообщениях на сайте:
{{a:33}} (буква a — латинская) — только адрес статьи (URL);
{{статья:33}} — полноценная HTML-ссылка на статью (текст ссылки — название статьи).
Поделитесь ссылкой в социальных сетях:
Комментарии читателей к данной статье
Пока нет комментариев к данной статье. Оставьте свой и он будет первым.
Оставлять комментарии к статьям могут только зарегистрированные пользователи.