Как прервать диалог поиска в Delphi?

У меня есть стандартный диалог поиска:

Моя программа может обрабатывать некоторые очень большие файлы, и поиск текста в таких файлах может занять 10 или 20 секунд или больше. Поэтому после нажатия кнопки "Найти далее" я меняю курсор на песочные часы. Я изменяю его обратно на стандартный указатель после того, как текст найден или не найден.

Моя проблема в том, что пользователь может решить отменить поиск и сделать это, нажав кнопку Отмена. Затем кнопка Отмена закрывает диалоговое окно, но поиск продолжается в моей процедуре FindDialogFind, пока текст не будет найден или не найден.

Я установил точку останова при выходе из FindDialog.exe, но она не достигается, пока FindDialogFind не будет завершен.

Можно ли каким-то образом уловить тот факт, что была нажата кнопка "Отмена", которая позволит мне разорвать цикл FindDialogFind, или, может быть, есть какой-нибудь лучший способ остановить поиск при нажатии кнопки "Отмена"?

2 ответа

Решение

В OnCloseсобытие TFindDialog компонент, установите логическую переменную, FAbortSearch, Часто проверяйте эту переменную в своей процедуре поиска и прерывайте ее, если она установлена.

Переместите логику поиска в рабочий поток, который вы запускаете всякий раз, когда Next кнопка нажата. Когда диалоговое окно закрыто, вы можете прервать поток, если он все еще работает.

Другие вопросы по тегам