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

Вниз

«Интерфейс пользователя» → Хорошая замена 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;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.015 c
15-1239967211
passlight
2009-04-17 15:20
2009.06.21
Кому-нибудь нужны книги по программированию (базы данных, .NET)?


2-1240933165
@!!ex
2009-04-28 19:39
2009.06.21
ShortString в С++


13-1120595885
vveird
2005-07-06 00:38
2009.06.21
Технология .NET


6-1204103887
webSQLNeederr
2008-02-27 12:18
2009.06.21
Код для определения Google PR и Yandex ТиЦ


2-1241465604
ford
2009-05-04 23:33
2009.06.21
Ошибка при освобождении памяти выделенной переменной Pointer