Все можно, только надо подробнее знать задачу.
Самый простой вариант:
1 Реализуешь алгоритм поиска
2. Внутри поиска после выполнения одного шага (итерации цикла, рекурсивного вызова) делаешь проверку "глобального" флага. Т.е. пока флаг не выставлен, програ ждет.
3. После прохождения проверки сбрасываешь флаг
4. На кнопку вешаешь поднятие флага.
5. профит.
например:
Код:
type
TForm1=class(TForm)
...
private
CanContinue : Boolean;
end;
...
procedure TForm.FormCreate(Sender : TObject);
begin
Flag := False;
end;
// собственно алгоритм
// пусть просто выводит цифры в мемо от 1 до 10
procedure TForm1.DoMain;
var
I : Integer;
begin
For I := 1 To 10 Do
Begin
Memo1.Lines.Add(IntToStr(I));
// теперь ждем нажатия кнопки
While Not CanContinue Do
Begin
Application.ProcessMessages;
Sleep(250); // ждем 1/4 сек
End;
CanContinue := False; // сбросили флаг
End;
end;
// кнопка выполнения сл. шага
procedure TForm1.Button1Click(Sender : TObject);
begin
CanContinue := True;
end;