RE:dbgrid mueste todos los datos
Master, dado que ya tienes el dataset abierto y que estás dando un doble click sobre un elemento de este, lo único que tienes que hacer es leer ese elemento del dataset, ya sea que lo envíes como valores al form4 o que el form4 los lea de la forma original y no sé si los vas a modificar en la forma o algo así.
Si tu dataset trae los 12 campos (creo que eran esos), aunque sólo muestre 3 o 4, puedes leer el dataset completo, gracias al cursor del dataset, que ya está posicionado desde que le diste el primer click.
Como no sé si lo envías a un grid o a varios componentes en una forma, o a un TMemo que los enliste o a una lista o a lo que sea, lo que propongo en el código siguiente es que en el form4 tengas 12 variables públicas (apartados public o published de tu clase TForm4) de tipo String. Así mismo, entenderé que tu DBGrid se llama DBGrid1 y que el datasource ligado a él se llame dtsGrid:
procedure Tform1.Grid1DblClick(Sender: TObject);
begin
form4.s1 := dtsGrid.DataSet.Fields[1].AsString;
form4.s2 := dtsGrid.DataSet.Fields[2].AsString;
form4.s3 := dtsGrid.DataSet.Fields[3].AsString;
form4.s4 := dtsGrid.DataSet.Fields[4].AsString;
form4.s5 := dtsGrid.DataSet.Fields[5].AsString;
form4.s6 := dtsGrid.DataSet.Fields[6].AsString;
form4.s7 := dtsGrid.DataSet.Fields[7].AsString;
form4.s8 := dtsGrid.DataSet.Fields[8].AsString;
form4.s9 := dtsGrid.DataSet.Fields[9].AsString;
form4.s10 := dtsGrid.DataSet.Fields[10].AsString;
form4.s11 := dtsGrid.DataSet.Fields[11].AsString;
form4.s12 := dtsGrid.DataSet.Fields[12].AsString;
form4.Show;
end;
En el caso de que el form4 sea quien lea los valores desde form1, el código va en OnShow:
procedure TfrmConfiguracion.FormShow(Sender: TObject);
begin
s1 := form1.dtsGrid.DataSet.Fields[1].AsString;
s2 := form1.dtsGrid.DataSet.Fields[2].AsString;
s3 := form1.dtsGrid.DataSet.Fields[3].AsString;
s4 := form1.dtsGrid.DataSet.Fields[4].AsString;
s5 := form1.dtsGrid.DataSet.Fields[5].AsString;
s6 := form1.dtsGrid.DataSet.Fields[6].AsString;
s7 := form1.dtsGrid.DataSet.Fields[7].AsString;
s8 := form1.dtsGrid.DataSet.Fields[8].AsString;
s9 := form1.dtsGrid.DataSet.Fields[9].AsString;
s10 := form1.dtsGrid.DataSet.Fields[10].AsString;
s11 := form1.dtsGrid.DataSet.Fields[11].AsString;
s12 := form1.dtsGrid.DataSet.Fields[12].AsString;
end;
Esto enviaría a cada uno de los 12 strings los valores de cada uno de los 12 campos de tu dataset. Si lo tuyo es ponerlos en otros componentes, es cosa de sustituir cada uno de los strings por los componentes y si los valores en los componentes no son strings, entonces ponerlos con su tipo de datos correspondiente.
Espero que te sirva.
Saludos.