Me parece que 1 o 2 segundos no es mucho dependiendo de la cantidad de registros, lo que si molesta en estas situaciones es que se congele el formulario, por lo tanto te sugiero que lo hagas en una tareas separada:
Código Delphi
[-]
uses System.Threading;
.
.
TTask.Run(
procedure
beginwith DBGridProveedores.DataSource do
begin
DataSet.First;
SetLength(provSelecc, DBGridProveedores.SelectedRows.Count); SetLength(provSeleccNames, DBGridProveedores.SelectedRows.Count); while not DataSet.Eof do
begin
if DBGridProveedores.SelectedRows.Find(DataSet.Bookmark, inx) then begin
provSelecc[i] := DBGridProveedores.Columns[0].Field.AsString; provSeleccNames[i] := DBGridProveedores.Columns[1].Field.AsString; Inc(i);
end;
DataSet.Next;
end;
end;
end);
¿Por otro lado porque haces la operacion sobre el dbgrid y no sobre el dataset?
Saludos.