Proviamo in un altro modo.

Supponi di avere Form1 e Form2, anche se in generale è meglio usare nomi più significativi.

Form1 visualizza Form2 che contiene i controlli visuali per la selezione; supponiamo che si tratti della DBGrid.

La Form1 crea la seconda in questo modo:
codice:
procedure TForm1.Button1Click(Sender: TObject);
var
  Frm: TForm2;
begin
  Application.CreateForm(TForm2, Frm);
  try
    Frm.ShowModal;
    Label1.Caption := Frm.DBGrid1.Fields[0].AsString;
  finally
    Frm.Free;
  end;
end;
Molto semplicemente, viene creata un'istanza di TForm2 visualizzata con il metodo ShowModal; quando la finestra viene chiusa per effetto della selezione, si procede a visualizzare sulla Label1 il contenuto del campo nella DBGrid che si trova sulla Form2.
La chiamata al metodo Free consente di distruggere la form dopo l'utilizzo; il costrutto try...finally esegue la Free anche in caso di errore (eccezione).

Nella Form2, scriveremo un codice simile a questo:
codice:
procedure TForm2.DBGrid1DblClick(Sender: TObject);
begin
  Close;
end;
E' sufficiente chiudere la form con il metodo Close quando si fa clic sulla griglia per restituire il controllo alla routine chiamante, che in questo caso è rappresentato dall'evento OnClick del pulsante riportato sopra.

Si tratta di un esempio molto parziale, poichè non viene gestita la possibilità che sia inoperabile una selezione (ad esempio, quando la tabella è vuota), oppure che si desideri non selezionare nulla attraverso un apposito tasto di annullamento.