1) работай не с TMemo, а с TStrigList - сделано.
2) Сделал дополнительный Frame с ProgressBar-ом, И двумя кнопками:
OK - ставится видимой после окончание сравнения.
Abort - исчезает после окончание сравнения.
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
i, j:Integer;
begin
Frame11.Visible:=true;
with ListBox3.Items do begin
BeginUpdate;
Clear;
for i := 0 to ListBox1.Items.Count-1 do begin
for j := 0 to ListBox2.Items.Count-1 do begin
if CompareStr(ListBox1.Items[i],ListBox2.Items[j]) = 0 then begin
Add(ListBox1.Items[i]);
Application.ProcessMessages;
end;
Frame11.ProgressBar1.Position:=Round((100*((i-1)*ListBox2.Items.Count+j))/(ListBox1.Items.Count*ListBox2.Items.Count));
Frame11.Label2.Caption:=IntToStr(Frame11.ProgressBar1.Position)+'%';
end;
end;
EndUpdate;
end;
end;
Красота. И прогрессбар движется и окно можно двигать, нет ощущения что процесс завис.
Но ВОПРОС: как прервать основной поток программы кнопкой Abort?
Т.е. Чтобы все вычисления которые сделаны остались, в ListBox3 стало видно то, что успело сравнится (Я потом оттуда в файл сохраняю).