Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];

Вниз

Варианты решения задачи на проектирование 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.012 c
14-1133377927
jack128
2005-11-30 22:12
2005.12.25
Что ты видишь на картине??


14-1133804628
БарЛог
2005-12-05 20:43
2005.12.25
Вот... перевожу статью про ООП с английского...


9-1121961704
Conferno
2005-07-21 20:01
2005.12.25
Bump map - Specular Texture(GLScene)


14-1133268089
КаПиБаРа
2005-11-29 15:41
2005.12.25
Недопонимание - главный бич человечества. (restore)


2-1134256939
Antony17
2005-12-11 02:22
2005.12.25
Запуск стандартных процедур





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский