PDA

Ver la Versión Completa : Como llamar un procedimiento de un Tframe no creado?


Theluar
07-03-2013, 07:41:48
Hola! a todos . Saludos

Quizás el titulo pueda parecer extraño, pero no supe como referirme a mi duda en el.

Mi duda es como mandar llamar el procedimiento de un TButton que tiene como padre un TFrame y que a su vez es creado en tiempo de ejecución.

e intentado llamarmalo como:

Button1.Click(Self)

La cuestion es que como en tiempo de diseño el Tframe no ha sido asignado a algun TForm obiamente me marca error.

Ademas de que no se si exista otra forma de encontrar el Tbutton que no sea de la forma:

TButton(FindComponent('Button1')).Click(Self)

ya que tengo otro frame en ejecucion que tiene un Tbutton con el mismo nombre. Quizas lo mas sencillo seria cambiar el nombre a mis componentes. Pero quizás exista alguna manera de identificar el TFrame y despues el TButton dentro del TFrame, si la hay se los agradecería o si no alguna idea de como realizar esta tarea. o si de plano tengo que cambiar el nombre para realizarlo pues que me lo hagan saber.

Les agradesco su tiempo y sus respuestas y puntos de vista .

Gracias
Saludos.

Neftali [Germán.Estévez]
07-03-2013, 10:16:29
Igual que lo harías con un form que crearas en tiempo de ejecución.
¿Cómo creas el TFrame en ejecución? ¿Te guardas la referencia?


Frame1 := TMyFrame.Create(...);
....


Si lo has hecho así, no debería haber problema en luego llamar al botón de la siguiente forma:


Frame1.Button1.Caption := 'hola';
Frame1.Button1Click(nil);
...


Tal vez no he entendido la pregunta....

dec
07-03-2013, 11:48:03
Hola,

Tal como lo entiendo, y, sabiendo de antemano que no es posible usar un objeto sin antes crearlo... creo que "lo que haces" en el evento "OnClick" del botón en cuestión, debería ser separado de dicho evento y puesto en otro lugar, de manera que el botón de marras pueda hacer uso del código y también pueda usarse dicho código separado desde otros lugares del programa. Es decir, tú preparas un procedimiento en una unidad de nombre, digamos, "UUtilidades.pas":


procedure MiProcedimiento();
begin
// Haz lo que tengas que hacer aquí
end;


De esta forma en el evento "OnClick" del botón puedes llamar a dicho procedimiento, y, desde otro lugar del programa también, ya si necesidad de crear frame ni botón alguno sólo para eso.

Theluar
08-03-2013, 21:18:49
Muchas gracias Neftali y Dec.

Me sirvieron mucho sus consejos los dos los use, aun que no para el mismo problema , muchas graci

Tal y como lo decia Neftali, es como lo estaba haciendo , pero me marcaba erroro por que no habia declarado los frames .
Disculpen por mi error

gracias de nuevo por su ayuda

Saludos