
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.207] |
![]() |
|
Сообщ.
#1
,
|
|
|
Привет всем.
Я встречал такие программы, где, например, при изменении настроек, программа спрашивает : "Мол, перезапуститься?". При нажатии Ок программа (процесс) перезапускается сам. Вопрос: Как мне перезапустить свой процесс? Заранее благодарен. |
Сообщ.
#2
,
|
|
|
![]() ![]() ... uses ShellAPI; ... procedure TForm1.Button1.Click(Sender: TObject); begin if MessageBox(Handle,'Перезапустить прогу?','Вопрос',MB_YESNOor MB_ICONQUESTION or MB_DEFBUTTON2)=IDYES then begin ShellExecute (0, 'open', PChar(Application.ExeName), nil, nil, SW_SHOWNORMAL); {Halt}PostQuitMessage(0); end; end; |
![]() |
Сообщ.
#3
,
|
|
Только лучше закрываться по хорошему, к примеру заменить Halt на PostQuitMessage(0) или аналог
|
Сообщ.
#4
,
|
|
|
Цитата Rouse_ @ Только лучше закрываться по хорошему, к примеру заменить Halt на PostQuitMessage(0) или аналог согласен ![]() |
Сообщ.
#5
,
|
|
|
Решение, конечно, простое...
Прокоментируйте, пожалуйста, что значит строка: {Halt}PostQuitMessage(0) Заранее благодарен. |
Сообщ.
#6
,
|
|
|
Цитата Прокоментируйте, пожалуйста, что значит строка: {Halt}PostQuitMessage(0) Это завершение работы программы. Вообще, способов много, вот основные: 1. ExitProcess или TerminateProcess самое "грубое" завершение. Процесс немедленно завершается, никакая финализация не производится, никаких возможностей прервать завершение процесса либо сохранить данные после вызова нет. 2. Halt - чуть более мягкое завершение. Перед завершением выполняется финализационный код юнитов, также вызывается ExitProc. 3. PostQuitMessage - еще более мягкое. Сообщение о завершении кладется в очередь, но выполнение кода не прерывается, он продолжает выполнение с того же места. Далее цикл выборки сообщений извлекает его (но перед этим будут обработаны все остальные сообщения из очереди, кроме очереди виртуального ввода, сообщений WM_PAINT и WM_TIMER из-за их низкого приоритета), и в обработчике этого сообщения вызывается Halt 4. Application.Terminate - еще мягче. Вызывается CallTerminateProcs, затем - PostQuitMessage. При этом есть возможность прервать завершение процесса из одной из TerminateProcs, вернув в ней False, а также выполнить некоторые действия. 5. Закрытие главной формы - еще мягче. Есть возможность прервать закрытие из обработчика OnCloseQuery и выполнить очистку/сохранение результатов. Если закрытие разрешено - вызывается OnClose и Application.Terminate |
Сообщ.
#7
,
|
|
|
--Ins--, большое спасибо за инф.
+1 |