// твоя функция
...
begin
bAbort:=false;
wait_fr.Show;
Wait_fr.Cursor:=crHourGlass;
mainform.Cursor:=crHourGlass;
mainform.List.Cursor:=crhourGlass;
...
// обработка данных (или что там еще)
// в общем, цикл
...
// Обрабатываем ссобщения, накопившееся
// в буфере за время выполнения цикла
// в том числе, если была нажата кнопка отмены
Application.ProcessMessages;
if bAbort then
begin
// действия по завершению обработки
// из-за нажатия кнопки отмены
...
break; // выход из цикла
end;
...
end;
procedure TForm1.CancelButtonClick(Sender: TObject);
begin
bAbort:=true;
end;
Проблема в прерывании работы функции
begin
wait_fr.Show;
Wait_fr.Cursor:=crHourGlass;
mainform.Cursor:=crHourGlass;
mainform.List.Cursor:=crhourGlass;
if (shelllistview1.SelCount=1) and (shelllistview1.SelectedFolder.Details[1]<>'') then
.............
то есть привыполнени этой процедуры показывается форма где просят подождать и меняется курсор, но на практике курсор не меняется и форма ожидания до конца не рисуется, что делать?
Главный вопрос все же не в этом, а в том как остановить выполнение функции, ну например есть какой то процесс очень медленно выполняющийся и есть кнопка "отмены", при ее нажатии все должно останавливаться, но опять же у меня на практике пока невыполнеться основная функция до конца, ее ни как не остановить... Может кто знает как эти вопросы решаются.
Завершение по нажатию кнопки можно реализовать след. образом:
В классе объявить переменную, например bAbort типа boolean. Далее:
Код:
Цитата:
Originally posted by unmoved
Может кто знает как эти вопросы решаются.
Может кто знает как эти вопросы решаются.
Было бы нелишним тебе познакомиться с потоками. При правильном использовании, дают потрясающие результаты.