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

Вниз

«Интерфейс пользователя» → Хорошая замена MessageBox а   Найти похожие ветки 

 
Kolan ©   (2009-04-14 16:15) [0]

*Пост в рамках не существующей конференции «Интерфейс пользователя».*

То, что диалоговое окно с надписью и кнопкой ОК (в Делфи, напомню,
для создание такого окна есть функция MessageBox) не должно
существовать — совершенно очевидно. Однако думаю, что многие
вообще об этом не задумывались.

Что же плохого в таком окне?

Во-первых, это окно модальное, а значит, создает режим — крупнейший
источник ошибок, путаницы, ненужных ограничений
и сложности в интерфейсе.
(см. Джефа Раскина http://raskin-interface.narod.ru/interface/chapter3.htm)

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

В своей книге Джеф Раскин сформулировал простое правило:
если пользователь в следующий момент может выполнить
только одно действие, пусть это действие выполнит компьютер


Если применить его к диалоговым окнам с единственной
кнопкой «OK», то получается, что её должен нажать сам компьютер,
то есть диалогового окна просто не должно существовать.

Использование MessageBox"а свидетельствует о творческой импотенции
проектировщика интерфейса или вообще об отсутствии такового.

Чем заменить MessageBox?

Совсем убрать такие окна из программы очень просто.
Прекрасный вариант показан в описании интерфейса НТ-МДТ,
сделанного Артемом Горбуновым (http://www.artlebedev.ru/everything/nt-mdt/ia/).

Сделать хорошую замену MessageBox"у на Делфи можно за 5 минут.
С помощью обычной формы, например.
(http://www.ksoftware.ru/wiki/klibrary/kcomponents/kinfoedit).

Я думаю, многие более опытные участники могут привести
много примеров реализации подобных окон с сообщениями на Делфи.
Было бы очень любопытно на них взглянуть.


 
DVM ©   (2009-04-14 16:20) [1]

Я, честно говоря, не вижу абсолютно ничего плохого в MessageBox. Конечно если в нем более одной кнопки.


 
AndreyV ©   (2009-04-14 16:20) [2]

С ShowMessage() не путаешь?


 
Cobalt ©   (2009-04-14 16:23) [3]

А как быть с программой, у которой будет только одна кнопка "Сделать всё" ?

Пользователь будет в недоумении - он команд никаких не давал, а оно уже...
А он и не хотел прям щас...

И потом, иногда надо обращать внимание пользователя.


 
Kolan ©   (2009-04-14 16:23) [4]

Да, действительно — перепутал. На самом деле наличии двух, трех или N кнопок не слишком оправдывает дизайнера. Окно все равно остается модальным, а следовательно создает режим.


 
Ega23 ©   (2009-04-14 16:25) [5]


> Я, честно говоря, не вижу абсолютно ничего плохого в MessageBox.
>  Конечно если в нем более одной кнопки.


Да и с одной кноой нормально. Например, Exception Message показать.


 
Kolan ©   (2009-04-14 16:26) [6]


> И потом, иногда надо обращать внимание пользователя.

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

В рассказе про НТ-МДТ типичный пример. Разработчики фотошопа думали, что то, что пользователь ничего не выделил важно, и надо привлечь его внимание. А в действительности это не так.


 
test ©   (2009-04-14 16:26) [7]

subj
Вывод ошибок, предупреждений в стандартном окне, вполне логично. Если следующее действие опасно, пусть компьютер выполнит молча.

DVM ©   (14.04.09 16:20) [1]

Вот так напрмер?

---------------------------------------------------
|                                               Х |
|                                                 |
|  Вы действительно хотите отформатировать диск?  |
|                                                 |
|                 --------                        |
|                |  ЫЫЫЫ  |                       |
|                 --------                        |
---------------------------------------------------


 
test ©   (2009-04-14 16:28) [8]

Пробелы разьехались((


 
AndreyV ©   (2009-04-14 16:29) [9]

> [4] Kolan ©   (14.04.09 16:23)
> Да, действительно — перепутал. На самом деле наличии двух,
> трех или N кнопок не слишком оправдывает дизайнера. Окно
> все равно остается модальным, а следовательно создает режим.

На то и модальное, что без ответа пользователя неизвестно что делать дальше, и принять решение, кроме пользователя, некому.


 
Kolan ©   (2009-04-14 16:29) [10]

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


 
DVM ©   (2009-04-14 16:32) [11]


> test ©   (14.04.09 16:26) [7]

не, кнопки в заголовке окна не в счет.


 
Kolan ©   (2009-04-14 16:33) [12]

test, это совершенно дурацкое окно не делает равным счетом ничего.

Если локус внимания пользователя занять чем-то другим, то он легко может нажать «ЫЫЫЫ» и отформатировать диск. Вспомните сколько раз вы отвечали на подобные вопросы не читая самого сообщения.

Авторы таких окно совершенно не знакомы с основами когнетики и свойствами человеческого мозга.


 
DVM ©   (2009-04-14 16:35) [13]


> Kolan ©   (14.04.09 16:33) [12]


> Если локус внимания

Это где у меня такой орган?


 
Kolan ©   (2009-04-14 16:35) [14]

test, мда, у вас там одна кнопка, сразу не понял. Такая форма, конечно, фантастика. В [12] я говорил о варианте с «Да» и «Нет».


 
AndreyV ©   (2009-04-14 16:35) [15]

> [10] Kolan ©   (14.04.09 16:29)
> Ega23, действительно фатальная ошибка, из-за которой работа
> системы далее невозможна имеет полное право на модальное
> окно, но таких ошибок не так уж много.

("Сохранить документ перед закрытием", MB_YES | MB_NO). Без "ненужных" диалогов не даём пользователь закрыть приложение (а системе?) с несохранённым документом и причину не сообщаем, пусть догадается, что надо самому сохранить, а уж потом закрывать. Так получается.


 
@!!ex ©   (2009-04-14 16:37) [16]

> [0] Kolan ©   (14.04.09 16:15)

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


 
Kolan ©   (2009-04-14 16:39) [17]


> Это где у меня такой орган?

Это не орган, это понятие. Локус — это объект.

Локус, если просто, это то, о чем вы думаете. Можно писать программу, смотреть в монитор, а размышлять о жареной картошке. Картошка будет локусом.

Привожу цитату из Раскина. Я очень люблю этот пример. Он невероятен, но это правда.

Поглощенное внимание привело к гибели 101 человека

   Крайним примером такого случая является катастрофа, происшедшая в декабре 1972 года, в результате которой погиб 101 человек. Обычно в кабине пилотов загорается зеленый индикатор, сигнализирующий о том, что шасси выпущено и готово к посадке. Во время того полета индикатор выпуска шасси не зажегся, поэтому командир самолета решил подняться на высоту 2000 футов, чтобы сделать круг, а второй пилот переключил на этой высоте управление самолетом в режим автопилота. После этого все три члена экипажа стали пытаться заменить лампочку индикатора, но она застряла, и ее никак нельзя было вытащить. Наверное, из-за всех этих манипуляций с лампочкой кто-то случайно выключил автопилот. Во всяком случае каким-то образом он оказался выключенным. Вскоре, как впоследствии показала запись бортового самописца, зазвучала автоматическая сигнализация — полусекундный сигнал предупредил пилотов о том, что самолет снизился на 250 футов ниже установленной высоты. Также зажегся желтый индикатор предупреждения. Члены экипажа, поглощенные проблемой с зеленой лампочкой, не заметили все эти сигналы. Немного позже, все еще продолжая возиться с лампочкой, второй пилот заметил, что альтиметр показывает угрожающе малую высоту 150 футов. После этого он спросил командира: «Мы еще на высоте 2000, да?» В ответ командир воскликнул: «Эй, что происходит?»

   В этот момент зазвучала сирена, предупреждающая о малой высоте. «Несмотря на почти нулевые показания альтиметра, желтый сигнал, предупреждающий об отклонении от назначенной высоты, почти нулевые показания радиоальтиметра и его звучащую сирену, каждый член экипажа был настолько уверен, что самолет находится на высоте 2000 футов, что никто из них не предпринял никаких действий, и уже спустя 8 секунд после того, как командир экипажа посмотрел на показания альтиметра, самолет упал в болота Флориды». (Цитата из Garrison, 1995.)


 
AndreyV ©   (2009-04-14 16:40) [18]

> [13] DVM ©   (14.04.09 16:35)
> > Если локус внимания
>
> Это где у меня такой орган?

Это опечатка. Правильно Логос.

(" слово-термин", введенный древнегреч. философом Гераклитом; для него логос - всеобщий закон, основа мира; стоики понимали логос как мировой разум, стоящий над материальным миром; у Филона Александрийского логос - это мысль Бога, слово, сын Божий, Божественная сила, стоящая между Богом и людьми и с помощью которой было создано все сущее) logos

Третий глаз его рецептор.

Шучу я.:)


 
Kolan ©   (2009-04-14 16:43) [19]

«...если работаю параллельные потоки или скрипты.»
@!!ex, пользователь и знать не знает о том что это такое. Это вам программистам надо что-то там учитывать.

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

AndreyV, нет. Система не имеет права испортить работу пользователя. Это вообще аксиома.


 
Kerk ©   (2009-04-14 16:43) [20]

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


 
Городской Шаман   (2009-04-14 16:49) [21]


> Kolan ©   (14.04.09 16:15)  


Я думаю стоит разделять:
- режим подтверждения действия;
- режим уведомления(например об ошибке).

Для режима подтверждения MessageBox полезен(и неважно сколько там кнопок).
Режим уведомления должен быть неблокирующим, тоесть не раздражать пользователя.

Я использовал два варианта - специальный объект ErrorLogger - который хранит и показывает ошибки(окно, статус бар), пишет в файл по требованию.

Второй вариант ошибка тупо идёт в файл лога. Если она пользователю будет мешать, то он просто пришлёт лог, вместо 20 минут секса по телефону.


 
Игорь Шевченко ©   (2009-04-14 16:49) [22]


> То, что диалоговое окно с надписью и кнопкой ОК (в Делфи,
>  напомню,
> для создание такого окна есть функция MessageBox) не должно
> существовать — совершенно очевидно


Не очевидно


 
AndreyV ©   (2009-04-14 16:51) [23]

> [19] Kolan ©   (14.04.09 16:43)
> AndreyV, нет. Система не имеет права испортить работу пользователя.
> Это вообще аксиома.

О системе там в скобках, а как об остальном содержании поста? Но и система тоже, по инициативе самого пользователе или аварийно, по сигналу от ИБП, например, но это уже нештатная ситуация, можно предусмотреть сохранение в какое-либо место кроме основного.


 
DVM ©   (2009-04-14 16:52) [24]


> Kerk ©   (14.04.09 16:43) [20]

Отказ от модальных окон, как мне кажется, может очень усложнить процесс программирования интерфейса пользователя. Да и сам интерфейс сделать непривычным для пользователя.

Вот уже упомянутый вариант с выходом из текстового редактора при несохраненном тексте (да/нет/отмена) чем его еще можно заменить? Где сообщение выводить?


 
Игорь Шевченко ©   (2009-04-14 16:54) [25]

а всякие так локусы - это хитрые яйцеголовые придумали, чтобы программистам мозги засорить, а с пользователей бабла состричь


 
Kolan ©   (2009-04-14 16:55) [26]

«Для режима подтверждения MessageBox полезен»

Зачем подтверждать то, что я уже скомандовать сделать?
Если подтверждение нужно для предотвращения случайных ошибок, то оно от них не избавит. Зато будет постоянно раздражать в случае, когда действие обдумано.


 
test ©   (2009-04-14 16:55) [27]

Kolan ©   (14.04.09 16:39) [17]
Странно что они не позвали стюардесс и кого нибудь из пассажиров, сколько человек надо чтобы заменить лампочку? Привет дизайнеру, если кроме лампочки положение шасси можно проверить только выглянув в окошко.


 
Котик Б   (2009-04-14 16:55) [28]

*Пост в рамках не существующей конференции «Всеобщего посылания на# МЛДЁ».*

Автор попросту не понимает, зачем нужны модальные окна, в часности MessageBox
Не хочешь использовать - да наздоровье, только не нужно при этом создавать шумиху из ничего :)


 
Ega23 ©   (2009-04-14 16:57) [29]


> Зачем подтверждать то, что я уже скомандовать сделать?


drop database


 
Игорь Шевченко ©   (2009-04-14 16:58) [30]

Kolan ©   (14.04.09 16:55) [26]


> Если подтверждение нужно для предотвращения случайных ошибок,
>  то оно от них не избавит. Зато будет постоянно раздражать
> в случае, когда действие обдумано.


Обычно подтверждение запрашивается для нечастых необратимых действий, а нечастые необратимые действия пользователь совершает, сам понимаешь, нечасто. Потому с раздражением ему придется смириться.


 
Kolan ©   (2009-04-14 16:58) [31]

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

Игорь, пользователям, к счастью, в отличие от программистов, про это рассказывать не нужно.


 
Cobalt ©   (2009-04-14 17:01) [32]

Вот насчет окна с ОДНОЙ ЕДИНСТВЕННОЙ кнопкой - поддерживаю.
Как минимум надо писать в журнал сообщений, а по хорошему, чтобы пользователь мог бы его и прочитать потом

" - он мне выдал какое-то окошко, я и нажала кнопку.
- А что в окошке было написано?
- да откуда я знаю..."


 
Kolan ©   (2009-04-14 17:02) [33]

Игорь, важно понимать, что запрос подтверждения не избавляет от ошибок. Это с одной стороны. А с другой, часто бывает, что такими окнами злоупотребляют.


 
Игорь Шевченко ©   (2009-04-14 17:02) [34]

Kolan ©   (14.04.09 16:58) [31]


> Игорь, пользователям, к счастью, в отличие от программистов,
>  про это рассказывать не нужно.


нужно.

Кроме того, ты сказал, что MessageBox зло, и это очевидно, начал про локусы рассказывать.

Так вот - MessageBox, это никак не зло, и как всякий овощ, приносит пользу, будучи употреблен надлежащим образом в надлежащее время.

А то начитаются Раскиных и подавай им специальную клавиатуру.


 
Cobalt ©   (2009-04-14 17:02) [35]

Пожалуй, за исключением диалога Неры с предложением "Вставьте диск, пригодный для записи или нажмите "Отмена" если не хотите записывать"


 
Kolan ©   (2009-04-14 17:03) [36]

«...
— А что в окошке было написано?
— Да откуда я знаю...»

Имхо, от количества кнопок не зависит.


 
Игорь Шевченко ©   (2009-04-14 17:03) [37]

Kolan ©   (14.04.09 17:02) [33]


> Игорь, важно понимать, что запрос подтверждения не избавляет
> от ошибок. Это с одной стороны. А с другой, часто бывает,
>  что такими окнами злоупотребляют


Скажи мне, какую книгу ты прочитал и я скажу кто ты :)


 
Real ©   (2009-04-14 17:04) [38]

Хочется ответить автору цитатой из песни П.Мамонова: "Начитался книг!" :)


 
DVM ©   (2009-04-14 17:04) [39]


> Kolan ©   (14.04.09 17:02) [33]


> Игорь, важно понимать, что запрос подтверждения не избавляет
> от ошибок.

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


 
Городской Шаман   (2009-04-14 17:04) [40]


> DVM ©   (14.04.09 16:52) [24]
>
> Вот уже упомянутый вариант с выходом из текстового редактора
> при несохраненном тексте (да/нет/отмена) чем его еще можно
> заменить? Где сообщение выводить?


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

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



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

Форум: "Прочее";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.007 c
13-1124000957
cherrex
2005-08-14 10:29
2009.06.21
COM и .NET


15-1239395408
Юрий
2009-04-11 00:30
2009.06.21
С Днём рождения ! 11 апреля 2009 суббота


2-1241521321
Леша
2009-05-05 15:02
2009.06.21
Обновление одной записи.


9-1179168683
Pa5ha
2007-05-14 22:51
2009.06.21
Джойстик


6-1203935494
manarov
2008-02-25 13:31
2009.06.21
Navigate неверно работает?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский