Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.25;
Скачать: CL | DM;

Вниз

Варианты решения задачи на проектирование UI   Найти похожие ветки 

 
Piter ©   (2005-11-29 19:28) [40]

arhis   (29.11.05 18:51) [28]
И откуда только у некоторых программистов такие дурацкие вопросы только появляются


только из-за того, что они программисты, а не батонокидатели.


 
Джо ©   (2005-11-29 19:37) [41]


>  [33] Gero ©   (29.11.05 18:59)
> Незачем. Просто пользователи привыкли именно к такому варианту,
> к последовательности. А «умные» варианты могут запросто
> его запутать.

Надо полагать, статистика уже собрана? ;) На основании чего такой вывод?

Про специальный контрол-селектор тоже думал. Как мне показалось, будет неудобно вводить длинные интервалы. Представьте, что нужны будут данные за несколько лет, "с" и "по" определенную дату. Очень мелкий "ползунок" будет и большая погрешность при перетаскивании.


 
Янис Прасол ©   (2005-11-29 19:40) [42]


> На основании чего такой вывод?

На основании личных ощущений, например.

> Про специальный контрол-селектор тоже думал. Как мне показалось,
> будет неудобно вводить длинные интервалы. Представьте, что
> нужны будут данные за несколько лет, "с" и "по" определенную
> дату. Очень мелкий "ползунок" будет и большая погрешность
> при перетаскивании.

Это точно. Нужны конкретные значения.


 
vuk ©   (2005-11-29 19:53) [43]

У нас для ввода периода есть специальный элемент управления.
Для начала поясню, что для удобства выделены несколько видов периодов:
1. год (вводится число)
2. квартал года (Год, номер квартала)
3. месяц (Год, месяц)
4. Произвольный (две даты)
5. За последние X дней (число дней)

Элемент управления представляет собой редактор с 3-мя кнопками. По нажатию на кнопку вываливается диалог, где есть PageControl c закладкой на каждый вид периода. Оставшиеся две кнопки предназначены для быстрого сдвига вперед и назад на интервал, который меняется в зависимости от выбранного вида периода. Например, если выбран вид периода "месяц", то нажатие на кнопки будет сдвигать период вперед или назад на месяц.

Примерно так...


 
Antonn ©   (2005-11-29 19:54) [44]

Янис Прасол ©   (29.11.05 18:22)
Вопрос: как поступать, если пользователь ввел начальную дату больше конечной?

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


 
GuAV ©   (2005-11-29 23:02) [45]


> Вариант №1 плох еще и тем, что такая пара полей не
> одна. Представьте, каково будет пользователю, если он
> допустил ошибки в нескольких сразу?

Он увидит только одно окно и фокус будет установлен на нужное поле.


> Гораздо лучше не дать ему возможности совершать
> некорректные действия.

Ну поставь dtpSince.MaxDate := dtpTo.Date и dtpTo.MinDate := dtpSince.Date . Вряд ли это кому понравится.


 
Янис Прасол ©   (2005-11-29 23:26) [46]

На основании советов постараюсь принять какое-то решение.
Всем ответившим спасибо.


 
iZEN ©   (2005-11-30 00:15) [47]


> Янис Прасол ©   (29.11.05 18:22)

Классическая задачка из области проектирования удобного и дружественного пользовательского интерфейса.
Решение можно найти в книжке Джефа Раскина "Интерфейс".

Основные принципы:
1. Не позволять пользователю указывать неверные значения в силу невозможности произведения оных (у вас возможно).
2. Никакие диалоги типа "Это неверно! Повторите ввод." ненужны.

Возможное решение (по-моему): один слайдер шкалы времени с двумя физически непересекающимися движками, которые указывают на "Начальная дата" и "Конечная дата" соответственно; заданный интервал - расстояние между движками. И, конечно же, кнопка начала операции. Боюсь, что этот вариант возможен только в контролах Java Swing, для Windows нужно штудировать литературу.


 
Gero ©   (2005-11-30 01:14) [48]


iZEN ©   (30.11.05 00:15)
> один слайдер шкалы времени с двумя физически непересекающимися
> движками

Подобный вариант уже обсуждали. Недостатки смотри в [41].


 
КаПиБаРа ©   (2005-11-30 05:54) [49]


>Основные принципы:
> 1. Не позволять пользователю указывать неверные
> значения в силу невозможности произведения оных (у вас
>возможно).
> 2. Никакие диалоги типа "Это неверно! Повторите ввод."
> ненужны.


В соответствии с этими правилами.

1. Если в текущий момент времени введен некоректный диапазон кнопку "Продолжить" сделать неактивной.

2. Показать пользователю в чем проблема. Для этого вывести сообщение прямо над кнопкой, а лучше возле того контрола в котором введены некорректные значения. Для этого можно использовать всплывающую подсказку или специальный значек (как в MS Excel).


 
ANB ©   (2005-11-30 09:30) [50]

Ползунок - жутко неудобно.
Коррекцию контролов делал - не очень удобно, хотя если интервал, как правило, фиксированный - то это оправдано.
Нормальных идей 2 :
1. Сообщение об ошибке (лучше не окошко)
2. Поменять местами начало и конец.
Все стырено.
Кстати, во времена ЕС ЭВМ при написании программ для терминалов в виде формы ввода частенько использовался следующий прием :
При посылке данных в компьютер (нажатие ввода) данные проверялись в программе и, если что не так - выводилась строка об ошибке (моргала внизу экрана) и курсор устанавливался на место ошибки. Было довольно удобно. Когда пошли программы под ДОС на бейсике - жутко добивал построчный ввод.

Неактивные кнопки без объяснения ошибки жутко неудобны и потребуют написания и изучения пользователем толстого руководства. Пример - проект который сопровождается у нас. Пока разберешься, почему кнопка не активна и чего от тебя хотят - либо полконторы оббегаешь, либо час доку читать придется (или и то и другое).


 
msguns ©   (2005-11-30 09:42) [51]

>2. Не давать возможности нажать на кнопку, пока значения не будут введены верно (делать ее неактивной).
>3. Не давать возможности ввести конечную дату меньше начальной (вешаться на OnChange) и наоборот.

Страшно неудобный интерфейс, не позволяющий вводить данные в произвольном порядке, в т.ч. частично Есть одна прога из "Центра", которая требует строго последовательный ввод всех данных (порядка 30 полей) - жутко противная прога !

>4. При поиске менять местами границы интервала.

Вообще рулез ;))

>5. Игнорировать подобную некорректность, просто при поиске выдавать 0 результатов.

Ага, особенно на базе из нескольких десятков миллионов записей. Думать будет минут 10, а в это время юзер будет материть "тупую" прогу, ищущую документы "с февраля по январь".

Оптимальный способ ввода периода указал uk ©   (29.11.05 19:53) [43]
Очень удобно, быстро, понятно. Покрывает 100% потребности. Реализуется достаточно просто.


 
vlad433 ©   (2005-11-30 09:52) [52]

По-моему, проще всего в OnExit конечной даты проверять и выдавать сообщенние с фокусом на ней.


 
msguns ©   (2005-11-30 09:56) [53]

>vlad433 ©   (30.11.05 09:52) [52]
>По-моему, проще всего в OnExit конечной даты проверять и выдавать сообщенние с фокусом на ней.

Прочитай [51] (первый комментарий)


 
vlad433 ©   (2005-11-30 10:08) [54]

[43]-сложнее и юзеру думать надо. А две даты обычно повторяются, в смысле при показе формы уже присвоены. Например бух считает обороты. Он их за день считает раз 100 и все время те же (для баланса). Что ему, каждый раз думать, что вводить ? :)


 
КаПиБаРа ©   (2005-11-30 10:11) [55]

msguns ©   (30.11.05 9:42) [51]
Оптимальный способ ввода периода указал uk ©   (29.11.05 19:53) [43]
Очень удобно, быстро, понятно. Покрывает 100% потребности. Реализуется достаточно просто.


vuk ©   (29.11.05 19:53) [43]
4. Произвольный (две даты)


Опять возвращаемся к нашему вопросу. Как реализовать ввод двух дат? :)


 
ANB ©   (2005-11-30 13:02) [56]


> Опять возвращаемся к нашему вопросу. Как реализовать ввод
> двух дат? :)

Надо сделать специальный компонент для ввода периода.


 
vuk ©   (2005-11-30 17:46) [57]

to vlad433 ©   (30.11.05 10:08) [54]:
>сложнее и юзеру думать надо.
Ну... Юзеру думать всегда надо, просто так никто в фильтры не лезет, и значит уже подумал. В любом случае интервал дат не с потолка берется. А в данном элементе управления нужный интервал обычно всего выбирается в один клик мышкой, т.к. чаще всего выставлен интересующий пользователя вид периода и нужен только его сдвиг (например, навигация вперед или назад по дням или месяцам). Наличие же периодов типа "за x последних дней" приводит к тому, что интервал часто вообще не нужно выбирать - он уже нужный стоит при открытии пользователем формы. Дело в том, что как показала практика, самый распространенный фильтр - "за 1 последний день".

>Что ему, каждый раз думать, что вводить ? :)
А запомнить настройки формы - не судьба?

to КаПиБаРа ©   (30.11.05 10:11) [55]:
>Опять возвращаемся к нашему вопросу. Как реализовать ввод двух дат? :)
Два выпадающих календаря. Выбор во втором даты меньше, чем в первом или выбор в первом даты больше, чем во втором не проходит. То есть остается старое значение, никакой ругани. Выбор не самый быстрый из возможных, но с учетом того, что произвольный период реально используется реже всего, это не страшно.



Страницы: 1 2 вся ветка

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.032 c
14-1133273376
sedot
2005-11-29 17:09
2005.12.25
Как снять защиту SSL-протокола?


1-1133426979
general
2005-12-01 11:49
2005.12.25
Ограничение на длину элемента списка в TMemo


2-1133759989
Gem
2005-12-05 08:19
2005.12.25
Определение реального текущего номера записи таблицы


14-1133475106
sedot
2005-12-02 01:11
2005.12.25
Анонимная почта


1-1133431567
archisan
2005-12-01 13:06
2005.12.25
Internet Explorer :(