Как прервать диалог поиска в Delphi? - PullRequest
2 голосов
/ 09 января 2012

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

enter image description here

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 09 января 2012

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

1 голос
/ 10 января 2012

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

...