![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как не дать закрыть свое приложение? [D7, 95/98]
Гость22 © (2005-09-28 15:33:00)Или как не дать нажать кнопку "Закрыть" (крестик) в заголовке окна?
YurikGL (2005-09-29 21:17:00) [1]
> begin...end © (29.09.05 20:59) [25]
Точно... CreateProcess умеет :)
http://www.pisoft.ru/verstak/createprocess.htm
begin...end (2005-09-29 20:59:00) [2]> YurikGL © (29.09.05 20:53) [23]
> Если я правильно помню, ShellExecute возвращает handle вызываемого
> окна.
Заблуждаетесь.
Fay (2005-09-29 20:57:00) [3]2 YurikGL © (29.09.05 20:53) [23]
ShellExecute
...
Return Value
Returns a value greater than 32 if successful, or an error value that is less than or equal to 32 otherwise. The following table lists the error values. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. The only thing that can be done with the returned HINSTANCE is to cast it to an int and compare it with the value 32 or one of the error codes below.
0 The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND The specified file was not found.
ERROR_PATH_NOT_FOUND The specified path was not found.
ERROR_BAD_FORMAT The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image).
SE_ERR_ACCESSDENIED The operating system denied access to the specified file.
SE_ERR_ASSOCINCOMPLETE The file name association is incomplete or invalid.
SE_ERR_DDEBUSY The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL The DDE transaction failed.
SE_ERR_DDETIMEOUT The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND The specified dynamic-link library (DLL) was not found.
SE_ERR_FNF The specified file was not found.
SE_ERR_NOASSOC There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.
SE_ERR_OOM There was not enough memory to complete the operation.
SE_ERR_PNF The specified path was not found.
SE_ERR_SHARE A sharing violation occurred.
YurikGL (2005-09-29 20:53:00) [4]Если я правильно помню, ShellExecute возвращает handle вызываемого окна.
Так вот нужно смотреть, если окно еще существует в системе, то на onClose минимизировать окно если уже нет - закрывать.
Гость22 (2005-09-29 20:48:00) [5]а при чем здесь alphablend?
qwertyuiop (2005-09-29 20:39:00) [6]alphablend это properties формы!
Гость22 (2005-09-29 20:21:00) [7]<alphablend>
откуда ты это взял?
Fay (2005-09-29 20:19:00) [8]2 qwertyuiop (29.09.05 20:12) [18]
>> что такое OnCloseQuery и alphablend
Это особые (курительные) сорта ореховой ботвы.
qwertyuiop (2005-09-29 20:12:00) [9]что такое OnCloseQuery и alphablend
Гость22 (2005-09-29 15:03:00) [10]т.е., юзер нажимает "закрыть", форма прячется, но не закрывается до того момента, пока не создастся архив или не возвратит ошибку. Дельный совет. Спасибо.
Остается вопрос - как оформить создание архива.
z007 (2005-09-29 01:50:00) [11]1. Не надо создавать архив таким способом. Если и использовать чужой формат, то - хотя бы в виде компонента.
2.vrem прав. Не надо пользователю указывать, что ему делать. Пусть он закроет форму. Можешь просто скрыть ее и нехай она прячется до завершения Windовс и делает свое дело.
3. В FormClose омжено поместить цикл, который будет выполняться пока архив не будет создан или пока не кончится установленный тобой лимит времени (или не возникнет ошибка), а там уже пускай программа завершается. Хотя, скрыть форму при нажатии все-таки рекомендую.
Гость22 (2005-09-28 20:52:00) [12]
> umbra © (28.09.05 20:29) [14]
спасибо, попробую.
а если архив по какой-либо причине не создастся?
umbra (2005-09-28 20:29:00) [13]пост [1] подпобнее:
procedure Form1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if {архив еще не найден} then
Action := caNone;
end;
Гость22 (2005-09-28 20:24:00) [14]юзер будет думать, что программа уже завершила работу и будет тыкать в крестик, а в это время батник делает архивацию в скрытом режиме
umbra (2005-09-28 20:15:00) [15]Можно заменить SW_SHOWDEFAULT на SW_HIDE и окно батника никто не увидит.
Гость22 (2005-09-28 20:07:00) [16]
> а каким образом батник запускается?
ShellExecute(0, nil, 'c:\myprog\archive.bat', nil, nil, SW_SHOWDEFAULT);
umbra (2005-09-28 19:53:00) [17]а каким образом батник запускается?
Гость22 (2005-09-28 19:50:00) [18]
> А для пользователя, пока архив не нашелся, делай как в 1
> написано
а если юзер закроет окно выполнения батника? Приложение просто не закроется никогда, т.к. архива не существует (в принципе, для temp.txt - это тоже проблемка)
vrem (2005-09-28 19:10:00) [19][6] Гость22 (28.09.05 18:56)
почему не можешь? createprocess или shellexecute - не помню точно, короче в faq'ах про это прямо говорится - как запустить процесс(да хоть файл ворд) и дождаться его завершения. почитай
umbra (2005-09-28 19:04:00) [20]
> надо проверить, создан ли архив, который создается батником
так и проверяй именно этот архив. зачем нужно еще какой-то файл проверять? А для пользователя, пока архив не нашелся, делай как в 1 написано