Hay una cosa que creo que "haces mal", y es asignar, en el método "buscar", el botón Sender a BotonBuscar1. Imagino que este último lo has creado con el editor de formularios, ¿no? Por eso luego debes asignarle "nil", para que no lo destruya.
No deberías hacerlo así. Lo que tienes que hacer es reservar una variable en la parte privada de la clase del formulario y asignar ahí el botón Sender:
Código Delphi
[-]TfrmBuscar = CLASS (TForm)
...
PRIVATE
BotonFormularioOrigen: TBotonBuscar;
...
END;
Así el botón "Sender" lo referencias con "BotonFormularioOrigen", no teniendo que asignarle a "nil" cuando terminas.
Claro que en lugar de copiar la referencia (que es lo que hace ":=") quizá te convenga clonar el objeto, es decir, hacer una copia. No recuerdo bien si los componentes tenían un método virtual llamado "Clone" o "Assign" que hacía eso. Si no, puedes añadirlo a tu componente. Lo que hace es copiar las propiedades de uno en el otro:
Código Delphi
[-]
TMiClase = CLASS (TObject)
PRIVATE
fPropiedad1: INTEGER;
fPropiedad2: TStringList;
PUBLIC
PROCEDURE Clone (Origen: TMiClase);
END;
PROCEDURE TMiClase.Clone (Origen: TMiClase);
BEGIN
SELF.Propiedad1 := Origen.Propiedad1;
SELF.Propiedad2 := Origen.Propiedad2;
END;
Si aplicas esto a tu botón, tendrás una copia del botón en el formulario de búsqueda, por lo que el botón "original" seguirá manteniendo sus datos.
No sé si esto ayuda o no tiene nada que ver con lo que preguntas. Es que me he perdido.