Форум: "Прочее";
Текущий архив: 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