создание интерфейса мастера в delphi 7

Я использую delphi 7 и пытаюсь создать интерфейс мастера. Я не знаю, есть ли более простой способ сделать мастер, поэтому я думал сделать отдельные формы для каждого шага мастера, и когда пользователь нажимает «Далее», активная форма закрывается и открывается следующая.

Вот скриншот двух последовательных форм: screen-shot

Я сделал процедуру, которая принимает 2 формы в качестве параметров: форму, которая будет закрыта, и следующую форму мастера.

class Procedure Tspad.nextForm(showForm, closeForm: TForm);
begin
   closeForm.Close;
   showForm.Showmodal;
end;

Когда я нажимаю кнопку «Далее», выполняется следующий код:

Tspad.nextForm(echipContractForm, clientContractForm);

Когда я запускаю программу и нажимаю кнопку «Далее», появляется следующая форма, но текущая не закрывается.

Как я могу заставить это работать, или есть другой более эффективный способ создать мастер?


person Mike Spadaru    schedule 05.12.2011    source источник
comment
Используйте TPageControl: delphi.about.com/od/delphitips2007/qt/hidepagectrltab.htm   -  person SimaWB    schedule 05.12.2011
comment
Project Jedi (JVCL) имеет компонент мастера, который называется TJvWizard.   -  person LU RD    schedule 05.12.2011


Ответы (6)


Одним из очень распространенных способов создания мастера является использование элемента управления страницей. Каждая отдельная страница мастера — это отдельная страница/вкладка в элементе управления страницами. Я считаю, что именно так Windows реализует мастеров.

Естественно, вы хотите скрыть все вкладки. Сделайте это, установив TabVisible на False для каждой вкладки. Если вы хотите перемещаться вперед и назад по мастеру, например. когда пользователь нажимает кнопку «Далее» или «Предыдущий», сделайте это, установив ActivePage или ActivePageIndex в зависимости от ваших предпочтений.

person David Heffernan    schedule 05.12.2011
comment
Вот как я делал это в прошлом. Создайте для своего мастера отдельную форму с элементами управления страницей и несколькими кнопками. - person Marcus Adams; 05.12.2011
comment
я согласен с этим, но также и с идеей LaKraven сделать форму на странице и закрепить страницы во время выполнения. В противном случае волшебники имеют тенденцию превращаться в гигантский шар спагетти. - person Warren P; 05.12.2011
comment
@Warren LaKraven на самом деле предлагает фреймы, а не формы, и я предполагаю, что прикрепляю их во время разработки. Но в любом случае работает и может быть очень хорошим методом, чтобы держать спагетти в страхе, я согласен. - person David Heffernan; 05.12.2011
comment
Для лучших результатов вы можете установить для DoubleBuffered значение true. - person Benjamin Weiss; 15.05.2013

Хорошей практикой для разделения контента, отображаемого в одной форме, является использование фреймов.

Фрейм очень похож на форму, за исключением того, что он не имеет собственного окна, а находится внутри хост-формы.

В сочетании с (как предложил Дэвид Хеффернан) TPageControl или даже TNotebook (что почти то же самое, что TPageControl, только у него нет табуляции для начала), вы в конечном итоге получите с помощью простого в обслуживании мастера.

person LaKraven    schedule 05.12.2011
comment
+1, но TNotebook немного странно. Он выглядит устаревшим для меня и, возможно, немного сложнее в использовании. - person David Heffernan; 05.12.2011
comment
Я упоминаю об этом, потому что не могу вспомнить, действительно ли существует TPageControl в Delphi 7 (в последнее время я использую его ОЧЕНЬ много, но не помню, чтобы когда-либо видел его примерно в Delphi 7). - person LaKraven; 05.12.2011
comment
Да, это было в D7 и задолго до этого. - person David Heffernan; 05.12.2011
comment
Полезно знать :) TNotebook находится на вкладке Win 3.1, так что да... Я бы предположил, что это наследие ;) - person LaKraven; 05.12.2011
comment
отлично :) Я настоятельно рекомендую отметить ответ Дэвида как правильный, так как мой больше расширяет его;) - person LaKraven; 05.12.2011

JVCL имеет хороший контроль, чтобы сделать мастер очень простым и эффективным способом (TJvWizard). См. http://jvcl.delphi-jedi.org/.

person Community    schedule 05.12.2011
comment
Согласованный. Сэкономит вам много времени на изобретение велосипеда. - person Robert Oschler; 06.12.2011

Вы можете попробовать эти:

person menjaraz    schedule 05.12.2011

Вы можете протестировать некоторые компоненты, которые могут помочь вам с этой задачей (внутренне используя tPageControl или TNotebook). См. эту ссылку.

С уважением.

person Germán Estévez -Neftalí-    schedule 05.12.2011

Вы также можете использовать TMS TAdvSmoothStepControl (не бесплатно!). Другое решение, но только «внешнее» по отношению к вашей программе, заключается в использовании Inno Setup для создания мастера , даже для целей «не для установки».

На самом деле, с Inno Setup вы можете сделать много вещей (изменить .ini-файл и реестр, запустить/остановить программы...), которые могут быть полезны мастеру без «установки» программы.

person philnext    schedule 05.12.2011
comment
Последнее утверждение в вашем ответе предполагает, что OP пытается создать мастер установки. Скриншоты говорят об обратном. Я предлагаю отредактировать эту часть вашего ответа и оставить рекомендацию TAdvSmoothStepControl (что, безусловно, является хорошим компонентом) - person LaKraven; 06.12.2011
comment
@LaKraven Хотя Inno Setup в основном используется для создания настройки установки, вы также можете использовать его (с некоторым взломом) в качестве мастера для простых операций, таких как закрытие программы, изменение файлов .ini в соответствии с выбором пользователя и запуск снова запрограммировать. Может быть, это не ясно для всех, и я отредактирую свой ответ. - person philnext; 07.12.2011