Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Реализация интерфейса-мастера.


Страницы:   1 2 3 4 5

Kolan ©   (2008-02-29 17:02:00) 

Здравствуйте,
 Разрабатываю программу для тач скрина. Интерфейс (все представляют терминал оплаты) состоит из нескольких экранов, которые работают как мастер.

Вопрос как это реализовать?

Как показывать окна я придумал, имхо, надо использовать некие мета данные, где описаны какие окна должны открываться.

А вот как быть с остальными (кроме показа окон) действиями?

Допустим есть 4 шага. На шаге 2 пользователь вводит данные, а на шаге 4 их надо обработать как-то.

У меня есть идея, но она мне ненравится из за условного выражения.
Чтобы перейти на сл экран пользователь жмет «далее». Соотв при нажатии далее возникает событие «Далее(Sender)», где сендер — это окно где нажали далее. Какое следующее окно паказать написанно в мета данных, а что сделать определяется по Sender.

То есть что-то вроде:
if Sender.StepNumber = 2 then
 
if Sender.StepNumber = 4 then
 ShowMessge()


Мне ненравится такой подход из за if'а…

А что вы посоветуете?


Семеныч   (2008-03-03 14:03:00) [81]

> Kolan ©   (03.03.08 13:35) [7]

Вместо if можно вызывать некий метод (или процедуру), но не напрямую, а по ссылке, которая хранится в некоей переменной и устанавливается конечным автоматом в зависимости от его текущего состояния.


Kolan   (2008-03-03 13:35:00) [82]

Плохо тем, что неудобно добавлять или удалять экраны. Кроме того экранов много и иф будет большой — неудобно. А еще есть как-бы разные ветки, несвязаные друг с другом, и все это будет в одном месте…


clickmaker   (2008-03-03 13:15:00) [83]


> Мне ненравится такой подход из за if'а

не вижу логики.
Чем if-то плох?


Kolan   (2008-03-03 10:09:00) [84]

Мож есть у кого еще идеи?


Kolan   (2008-03-01 14:07:00) [85]

> Может взять компонент аля wizard?

А как он работает?

Визард (собссно есть свой) — это страницы (на подобии PageControl) которые лежат на форме, то есть. Мне бы хотелось не создавать ненужные окна.


b z   (2008-03-01 12:42:00) [86]


> Мож есть еще идеии?

Может взять компонент аля wizard?


Kolan   (2008-03-01 10:37:00) [87]

> И анализировать этот State при действиях

И сделать большой кейс? Ну я тоже самое и предложил, только в моем случае эти стейты хроняться в самих окнах как бы, и передаются по событию…

В стейтах плохо то, что трудно модифицировать такой автомат, я так пробовал.

Например бы такой:

case Stae of:
 asStartState:
 begin
   DoSmth;
   State := asState2;
 end;
 asasState2:
 begin
  State := CompleteState;
 end;
 asCompleteState:
 begin
   
 end;


Теперь если надо вставить asState1 между asStartState и asasState2, то надо менять ссылки — неудобно.
Кроме того, нафига состояния если состояние однозначно связано с показываемым экраном, так почему бы не использовать сам экран(то есть форму у меня) в качестве состояния.

Если бы надо было бы только показывать экраны, то я бы сделал, наверно, такой файлик:

У окон есть номера.

[0.0]
Next=0.1
[0.1]
Next=0.2
Back=0.1

То есть некие мета данные… Загружал бы его и при возникновении события «Back» в окне «0.1» я бы знал, что надо перейти в окно 0.1…
Но вот как быть с выполнением действий — хз.

Плюс ко всму окон много и кейс будет здоровый…

Мож есть еще идеии?


Игорь Шевченко   (2008-03-01 00:05:00) [88]


> А что вы посоветуете?


Конечный автомат.

type
 TAutomataState = (asStartState, asState1, asasState2, asCompleteState);

И анализировать этот State при действиях


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо