![]() |
| ||
|
|
Новости |
Поиск |
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?
Kolan (2009-08-19 16:20:00) [21]Не надо только делать сворачивание по кнопке закрыть. Это много хуже варианта с хинтом, это дезинформация. Хотя смайлик всё объясняет.
Andy BitOff (2009-08-19 16:08:00) [22]
> Leonid Troyanovsky © (19.08.09 16:04) [54]
> надо еще корректно обработать WM_QUERYENDSESSION.
Ну, это само-собой ;)
Leonid Troyanovsky (2009-08-19 16:04:00) [23]
> Andy BitOff © (19.08.09 15:42) [53]
> не в трей, а просто minimize. Но это опять же блокировка
> закрытия.
Но, это уже осознанный выбор, особенно хорошо, если настраивать
будет админ, уже не отмажешься :)
Ну, и там тоже не просто minimize, надо еще корректно обработать
WM_QUERYENDSESSION.
--
Regards, LVT.
Andy BitOff (2009-08-19 15:42:00) [24]
> Leonid Troyanovsky © (19.08.09 15:34) [51]
> Которая "Убить процесс", она ж разрешает закрытие по крестику.
В эту кнопку сложно попасть случайно ;)
> Ну сделай для таких настройку: крестиком - сворачивать (в трей :)
А вот это действительно интересно. Как-то не подумал. Но не в трей, а просто minimize. Но это опять же блокировка закрытия. То, о чем мы тут и говорим.
Leonid Troyanovsky (2009-08-19 15:41:00) [25]
> Anatoly Podgoretsky © (19.08.09 15:16) [47]
> А чтобы не резался, запрещать клавиатуру и мышь.
Чего-то уж давненько не спрашивали про оное.
--
Regards, LVT.
Leonid Troyanovsky (2009-08-19 15:34:00) [26]
> Andy BitOff © (19.08.09 15:12) [46]
> Не совсем понял, что за дополнительная кнопка...
Которая "Убить процесс", она ж разрешает закрытие по крестику.
> Andy BitOff © (19.08.09 15:21) [48]
> говорю, не надо закрывать, сверни.
Ну сделай для таких настройку: крестиком - сворачивать (в трей :)
--
Regards, LVT.
Andy BitOff (2009-08-19 15:29:00) [27]
> Kolan © (19.08.09 15:22) [49]
> Правильно ли я понял
Нет, не правилно. Полная проверка, которая занимает продолжительное время делается крайне, очень крайне редко, чаше проверка диапазона данных из всего объема, а это минута-две, но функционал предусматривает, значит надо принимать меры.
Kolan (2009-08-19 15:22:00) [28]
> В той задаче по уму надо было делать другое.
По другому наверно :)
Правильно ли я понял, что если вашу программу (данные, структуру, базу и пр.) переделать, то дисэбление крестика не понадобится?
Andy BitOff (2009-08-19 15:21:00) [29]
> Kolan © (19.08.09 15:11) [45]
Этот вариант так же рассматривался, но принят не был из-за не информативности. Так же был вариант вообще уйти, свернуться и спрятать кнопку из панели задач, но это тоже не то, т.к. юзер должен все-таки иметь возможность прервать процесс в любой момент, поскольку обработка данных визуальна и он мог увидеть что-то и решить остановить процесс и работать с уже проверянными данными.
В общем остановились на описаном мной выше варианте.
Вот вспомнил реальный случай. Пришел к юзеру. Давай, говорю, полную проверку включай, посмотрим. Запускает. Я говорю, ладно, покажи мне пока то-то и то-то... Перед ним окно с процессом проверки. Кликает крест. Хинт. Недоумение. Я говорю, не надо закрывать, сверни. Вот вам и реальная история.
Anatoly Podgoretsky (2009-08-19 15:16:00) [30]> Leonid Troyanovsky (19.08.2009 14:52:43) [43]
А чтобы не резался, запрещать клавиатуру и мышь.
Andy BitOff (2009-08-19 15:12:00) [31]
> Leonid Troyanovsky © (19.08.09 14:52) [43]
Именно второй случай. Он волен заниматься чем хочет.
Не совсем понял, что за дополнительная кнопка... Мы же, вроде, про отлючение возможности клиикнуть по крестику в углу формы. Если он попадет туда случайно, то ничего потеряно не будет.
В той задаче по уму надо было делать другое. Надо было делать другую структуру хранения входных данных. Но... Как всегда но. Данные есть, структура их самих (данных) ужастна, структура их хранения не оптимальна, но разрабатывалась еще в 94 году и с того времени пополнялась и поддерживалась. И т.д. и т.п.
В общем с чем дали с тем и работали.
Kolan (2009-08-19 15:11:00) [32]Или, Леонид, например выполнять работу в фоне, свернувшись, прости Господи, в трей. Хорошо бы только на случай отрубания питания иметь кнопку «продолжить то, что делалось».
Anatoly Podgoretsky (2009-08-19 15:06:00) [33]> Kolan (19.08.2009 14:36:42) [42]
> «А вы уверены что хотите... ?»
Поубивал бы
Leonid Troyanovsky (2009-08-19 14:52:00) [34]
> Andy BitOff © (19.08.09 13:43) [34]
> У меня есть процесс, который длится очень долго, в зависимости
> от входных значений может длится до получаса (еще и от мощностей
> зависит), так вот я не даю закрыть программу юзеру, пока
> он не нажмет кнопку "Остановит процесс", о чем честно ему
> и сообщаю. Если он решил закончить, то пусть сознательно
> остановит процесс и потом не жалуется.
Не очень понятно, чем эти полчаса юзер занимается.
Могу предположить два варианта: вводит для оной программы
доп.данные или, ожидая результатов, режется в сапера.
В первом случае юзер, все равно, не простит автора, если его
кропотливая работа пропала даром (даже если э/п выключили).
Во втором случае дополнительная кнопка спасет, если по ней трудней
попасть мышью в азарте игры, но проблема остается - куча ресурсов
и времени потеряно. По уму, если юзеру нужны только результаты,
то лучше всего поручать такие задачи некому серверу, а юзеру
присылать квитанцию - готово, можно забирать.
--
Regards, LVT.
Kolan (2009-08-19 14:36:00) [35]Получается что дисэйбление кнопки закрытия виляет только на вероятность возникновения ошибки, причем неизвестно как. Видимо с БИОСом тоже самое примерно.
Я сильно не настаиваю, общего хорошего решения наверно не существует.
Просто часто ребята лепят формы типа «А вы уверены что хотите... ?» и не понимают, что это почти всегда плохо и что от формы можно избавится.
Andy BitOff (2009-08-19 14:25:00) [36]Я не могу обеспечить всем вселенское счастье, но могу оградить неумелого юзера, от опрометчивых поступков.
Andy BitOff (2009-08-19 14:18:00) [37]Тогда он прервется по "Остановить процесс" и программа завершится. Но это уже не моя проблема. Необратимого в данном случае ничего нет, просто придется начинать с начала.
Kolan (2009-08-19 14:15:00) [38]Andy BitOff, так а что в этом случае будет с длительным процессом? Он прервется? Если да, то выходит случайная ошибка все равно возможна и необратима.
Andy BitOff (2009-08-19 14:07:00) [39]
> Kolan © (19.08.09 13:57) [35]
Даст. Ну ты же программист, что не знаешь как разобраться в сообщениях или в цепочке событий?
Anatoly Podgoretsky (2009-08-19 14:07:00) [40]Кнопка питания уже давно программная, а кнопку Reset я встретил уже на двух машинах, на серверах Интел и на ноутбуках НР определенных моделей. И при некоторых операциях блокируются обе. А питание можно выключить или клавишей на блоке питания или выдергиванием шнура питания. Для некоторых операциях с BMC/FRU недостаточно выключения питания кнопкой или сброса, а требуется физическое отключение.
В свое время тоже смеялись над клавишей Power и программным выключением питания, ой как смеялись. Дошла очередь и до Reset и никаких проблем с Reset нет, точно также можно подержать 4 секунды, и произойдет сброс, даже при полностью зависшим компьютером.