Al parecer, requieres algo distinto a lo que yo propongo.
El botón Aceptar no debe enviar nada a ningún Form. El Form que invoca el frame, será el responsable de capturar los datos.
Lo más cómodo, crear en el Frame un par de propiedades, esto hará mucho más legible el código cuando usemos el frame en todas las ventanas.
Código Delphi
[-]
type TAgente = Class(TFrame)
private
function GetCodigo:integer;
procedure Setcodigo(Value:integer);
function GetAgente:string;
public
property Codigo: integer read GetCodigo write SetCodigo;
property Agente: string read GetAgente; end;
implementation
function TAgente.GetCodigo:integer;
begin
Result := tblClientes.Fieldbyname('codigo').Asinteger;
end;
procedure TAgente.SetCodigo(Value :integer);
begin
tblClientes.Open; if Value <> GetCodigo then
begin
if not tblcliente.locate('codigo', value, []) then
ShowMessage('No se encuentra el agente con código ' + inttostr(Value));
end;
function TAgente.GetAgente:string;
begin
Result := tblCliente.fieldbyname('Nombre').AsString;
end;
Esto es algo más complejo de lo que has pedido, pero lo necesitarás.
Lo que he hecho es definir 2 propiedades que tendrán los datos del agente elegido en el grid, además doy la posibilidad de que muestre un agente seleccionado al mostrar el frame.
por ejemplo: Toda venta de un negocio, tiene asociado un "Agente de venta", bien, desde una ventana "Ventas" quiero mostrar el frame y seleccionar el agente de código 20:
"F" es un frame TAgente puesto en la ventana "ventas".
Código Delphi
[-]
procedure Tventa.Button1Click(...);
begin
F.Codigo := 20;
end;
Si ahora en la ventana de ventas, queremos saber qué agente hay seleccionado en el frame:
Código Delphi
[-]
procedure Tventas.TablaVentasBeforePost(....);
begin
tablaVentas.CodigoAgente := F.Codigo;
label1.caption := F.Agente; end;
Saludos y espero se entienda, si no, dime cualquier cosa
![Big Grin](http://www.clubdelphi.com/foros/images/smilies/biggrin.gif)
Saludos