Hola.
Creo que la idea que te dió
Casimiro es la correcta. Como la cantidad de registros visualizados en el DBGrid corresponde exáctamente a los que el usuario seleccionó mediante la búsqueda, basta con que recorras el DataSet asociado desde la primer fila a la última para obtener lo que deseas.
Te pongo un ejemplo en que los campos del DBGrid se concatenan separados por ";" y son muestrados en un ListBox :
Código Delphi
[-]
...
var
i: Integer;
s: string;
begin
DBGrid1.DataSource.DataSet.DisableControls;
try
DBGrid1.DataSource.DataSet.First;
while not DBGrid1.DataSource.DataSet.Eof do
begin
s := '';
for i := 0 to DBGrid1.FieldCount-1 do
s := s + DBGrid1.Fields[i].AsString + ';';
SetLength(s, Length(s)-1);
ListBox1.Items.Add(s);
DBGrid1.DataSource.DataSet.Next;
end;
finally
DBGrid1.DataSource.DataSet.EnableControls;
end;
end;
Cambia la acción de concatenar/mostrar en modo texto por la necesaria para guardar esos datos en tu archivo binario.
Saludos