![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"Задисейблить" системную кнопку закрытия формы [D5, 2003]
Smile © (2009-08-16 14:03:00)Уважаемые мастера, в некоторые моменты работы приложения (в частности открытые запросы или датасеты, ну и пр.) запрещаю его закрытие вот таким образом:
SysMenu := GetSystemMenu(Handle, False);
Windows.EnableMenuItem(SysMenu, SC_CLOSE, MF_DISABLED);
При компиляции под D5 все нормально, однако под D2009 системная кнопка закрытия не "дисейблится".
Подскажите, возможно ли каким либо другим способом, осуществить это под D2009?
Anatoly Podgoretsky (2009-08-19 13:58:00) [41]> Kolan (19.08.2009 13:29:33) [33]
Я вспомнил более точно, это был серверный раид и не все операции допустимо прерывать, например перепрошивка БИОС
Kolan (2009-08-19 13:57:00) [42]А если я нажму питание, программа не даст Виндоусу выключится?
Andy BitOff (2009-08-19 13:43:00) [43]У меня есть процесс, который длится очень долго, в зависимости от входных значений может длится до получаса (еще и от мощностей зависит), так вот я не даю закрыть программу юзеру, пока он не нажмет кнопку "Остановит процесс", о чем честно ему и сообщаю. Если он решил закончить, то пусть сознательно остановит процесс и потом не жалуется. А то есть юзеры (коих много на моей памяти), которые не пользуются кнопкой свернуть, а пользуются кнопкой закрыть. Но у нас не КПК, где приложения уходят в фон.
Kolan (2009-08-19 13:29:00) [44]Не убедительный пример. Форматирование диска можно прервать даже в Виндоусе. Более того это процесс можно даже на паузу поставить.
Блокирование кнопки Ресета мне кажется таким же бессмысленны как и запрещение закрытия программы. А вдруг свет выключат и что тогда?
— А надо бесперебойник иметь!
— А свет вырубили 7 часов назад...
То есть я считаю, что такой подход по сутиплох. Лучше сделать так, чтобы при закрытии работа сохранялась сама, а потом её можно было бы продолжить.
Пример того, «чего недопустимо прерывать» еще жду.
Inovet (2009-08-19 13:21:00) [45]> [31] Anatoly Podgoretsky © (19.08.09 11:58)
> У меня на одном из серверов даже кнопка RESET блокируется
> в подобных случаях.
Ничего се, это уже и не ресет получается.
Anatoly Podgoretsky (2009-08-19 11:58:00) [46]> Kolan (19.08.2009 11:44:30) [30]
Ну допустим идет форматирование винчестера или подготовка чего то, чего недопустимо прерывать.
У меня на одном из серверов даже кнопка RESET блокируется в подобных случаях.
Kolan (2009-08-19 11:44:00) [47]Хинт — хорошее решение, наверняка он окажется в локусе внимания.
А интересно, почему программу бывает нельзя закрыть?
Andy BitOff (2009-08-19 11:32:00) [48]
> Kolan © (18.08.09 23:43) [18]
> Не понятно как и где объяснять почему она не работает и что делать, если
> хочется закрыть окно.
У меня в таком случае показывается хинт прямо там где юзер кликнул (т.к. его згляд еще не уше из этой зоны) и желательно на бросающемся в глаза фоне (у меня это желтый), где написано, что программа не может быть закрыта в данный момент, ля-ля-ля, ля-ля-ля...
Kolan (2009-08-19 11:10:00) [49]Не думал, что это слово может вызвать затруднения.
KilkennyCat (2009-08-19 10:54:00) [50]
> Kolan © (19.08.09 09:26) [26]
ну так, так бы и сказал. нафига усложнять?
Kolan (2009-08-19 09:26:00) [51]Априори = к гадалке не ходи. То есть получится: Спор я проиграю, к гадалке не ходи...
:)
brother (2009-08-19 06:00:00) [52]имхо по сабж: крестик закрытия активен, и при нажатии появляется мессадж, который объясняет пользователю, что, надо подождать или сделать что-то,или чтобы он подтердил прекращение текущего действия, но дисэйблить, яб лично не стал...
brother (2009-08-19 05:57:00) [53]> что такое "априори"?
http://ru.wikipedia.org/wiki/%D0%90%D0%BF%D1%80%D0%B8%D0%BE%D1%80%D0%B8
Априо?ри (лат. a priori — буквально «от предшествующего») — знание, полученное до опыта и независимо от него (знание априори, априорное знание). Этот философский термин получил важное значение в теории познания и логике благодаря Канту. Идея знания априори связана с представлением о внутреннем источнике активности мышления. Учение, признающее знание априори, называется априоризмом. Противоположностью априори является апостериори (лат. a posteriori — от последующего) — знание, полученное из опыта (опытное знание). В современной философии априори (как и апостериори) считается видом дескриптивного знания.
KilkennyCat (2009-08-19 01:02:00) [54]
> Kolan © (19.08.09 00:23) [22]
что такое "априори"?
Kolan (2009-08-19 00:23:00) [55]Жаль, что вы столько лет потратили зря, ведь дело не в «юзверях», как вы их называете, это интерфейсы тех программ, что «юзвери», а на самом деле обычные люди, плохие и не понятные.
Но так как вам на все пофиг и вы ничего не читаете, то и спорить с вами не буду.
Не буду рассказывать про то, что модальные окна — это введение режима, а режимы приводят к ошибкам. Не буду еще раз повторять, что в данном случае дисэблить кнопку действительно не нужно, а лучше сделать программу по другому. Не буду, потому что это бесполезно. На вашей стороне опыт, да... Спор я проиграю априори... И букаф многа будет — зачем?
KilkennyCat (2009-08-19 00:20:00) [56]
> TIF © (19.08.09 00:09) [20]
и это тоже косячно.
любой процесс должен иметь возможность быть прерванным. с разрганичением уровня доступа, с многократным подтверждением об опасности но - должен.
TIF (2009-08-19 00:09:00) [57]Кстати, окошечко с обратным отсчётом "завершение работы системы" (shutdown) как раз с disable-крестиком )
KilkennyCat (2009-08-19 00:09:00) [58]
> Kolan © (18.08.09 23:43) [18]
Многа буков.
Интерфейс не должен ввергать пользователя в ступор. Он должен быть логичен и удобен. Этот крестик всегда был для закрытия. Независимо ни от чего. И если закрыть нельзя, потому что что-то там не так, то об этом сообщается.
Умные слова, типа
> 5. Восприятия состояния окружающего пространства.
это конечно, круто.
Собственно, мне пофиг. Я умных книг не читаю. Я сам думаю, я очень много лет обучаю юзверей и решаю их проблемы с непониманием интерфейсов и вполне вправе заявить еще раз:
> нтерфейс должен показывать то, что он может обрабатывать
- это бред.
Kolan (2009-08-18 23:43:00) [59]KilkennyCat, бред про то, что интерфейс должен показывать что с ним можно делать, а что нельзя вы можете прочесть в книгах ИнтерфейсДжефа Раскина и Дизайн привычных вещейДональда Нормана.
Конкретно, если интересно, можно полагать, что человек выполняет различные задачи за семь шагов:
1. Формирование цели.
2. Формирование намерения.
3. Определение необходимых действий.
4. Исполнение действий.
5. Восприятия состояния окружающего пространства.
6. Интерпретация окружающего пространства.
7. Оценка результатов действия.
Подробнее про это есть в моем блоге ( http://ksoftware.ya.ru/replies.xml?item_no=1877).
В данном случае представим, что цель человека — закрыть окно. Так как кнопка закрытия активна, то вполне вероятно, что человек сформирует намерение нажать её. Определит нужные действия (передвижение мыши, клик и т. д.) и выполнит их. Однако ожидаемого результата не получит и ему придется придумывать новые намерения или пересматривать цель.
Таким образом целая туча ментальных и других усилий пропадут за зря, а это не может не раздражать.
Поэтому предложение Антона, в общем, верное, если на кнопку нельзя нажимать, то она и должна выглядеть не нажимаемой.
Другое дело, что в данном случае, с кнопкой закрытия, все сложнее. Не понятно как и где объяснять почему она не работает и что делать, если хочется закрыть окно.
Я думаю, что автор топика пытается таким образом запретить пользователю закрывать окно пока он, допустим, не сохранит данные. В этому случае решение запретить закрытие плохое. Нужно попытаться сделать так, чтобы и окно закрывалось когда угодно и данные не терялись. Как этого достичь зависит от конкретной задачи.
Автор, озвучьте задачу пожалуйста.
KilkennyCat (2009-08-18 23:25:00) [60]и все равно это дурной тон.
предположим, что после задисэйбливание прога виснет(это, конечно, невероятная ситуация, только у чайников прога виснет, но предположим), и что, лишим обыкновенного юзера возможности вызвать завершение программы? Будем надеятся на резет? так у брэндовых компов его нет.