Как прервать диалог поиска в Delphi?
У меня есть стандартный диалог поиска:
Моя программа может обрабатывать некоторые очень большие файлы, и поиск текста в таких файлах может занять 10 или 20 секунд или больше. Поэтому после нажатия кнопки "Найти далее" я меняю курсор на песочные часы. Я изменяю его обратно на стандартный указатель после того, как текст найден или не найден.
Моя проблема в том, что пользователь может решить отменить поиск и сделать это, нажав кнопку Отмена. Затем кнопка Отмена закрывает диалоговое окно, но поиск продолжается в моей процедуре FindDialogFind, пока текст не будет найден или не найден.
Я установил точку останова при выходе из FindDialog.exe, но она не достигается, пока FindDialogFind не будет завершен.
Можно ли каким-то образом уловить тот факт, что была нажата кнопка "Отмена", которая позволит мне разорвать цикл FindDialogFind, или, может быть, есть какой-нибудь лучший способ остановить поиск при нажатии кнопки "Отмена"?
2 ответа
В OnClose
событие TFindDialog
компонент, установите логическую переменную, FAbortSearch
, Часто проверяйте эту переменную в своей процедуре поиска и прерывайте ее, если она установлена.
Переместите логику поиска в рабочий поток, который вы запускаете всякий раз, когда Next
кнопка нажата. Когда диалоговое окно закрыто, вы можете прервать поток, если он все еще работает.