Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема в прерывании работы функции

373
10 февраля 2005 года
unmoved
216 / / 28.11.2004
У меня есть код:
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
.............
то есть привыполнени этой процедуры показывается форма где просят подождать и меняется курсор, но на практике курсор не меняется и форма ожидания до конца не рисуется, что делать?
Главный вопрос все же не в этом, а в том как остановить выполнение функции, ну например есть какой то процесс очень медленно выполняющийся и есть кнопка "отмены", при ее нажатии все должно останавливаться, но опять же у меня на практике пока невыполнеться основная функция до конца, ее ни как не остановить... Может кто знает как эти вопросы решаются.
303
10 февраля 2005 года
makbeth
1.0K / / 25.11.2004
Решение весьма простое. Нужно в цикле (а скорее всего в этой долго выполняющейся функции он присутствует :) ) вызывать Application.ProcessMessages.
Завершение по нажатию кнопки можно реализовать след. образом:
В классе объявить переменную, например bAbort типа boolean. Далее:
Код:
// твоя функция
...
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;
302
10 февраля 2005 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by unmoved
Может кто знает как эти вопросы решаются.


Было бы нелишним тебе познакомиться с потоками. При правильном использовании, дают потрясающие результаты.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог