FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Sobre llamar procedimientos desde otros Form.
Hola a todos, y un gran saludo.
Estuve buscando por el foro, sobre un modo, específico, para llamar un procedimiento declarado en un Form, desde otro form, y la verdad, no he podido encontrar específicamente un post, que me ayude a resolver el pequeño problema que me ocupa. Haber si puedo explicarlo de forma clara. En el Form1, tengo declarado un procedimiento, que, en tiempo de ejecución, crea un nuevo Tab en el formulario. En el Form2, necesito poner un botón, que llame a ese procedimiento de crear un Tab en tiempo de ejecución, YA declarado en el form1, como si ese procedimiento, ubiese sido llamado de forma nativa desde su propio Form. De este modo, para lograrlo, he intendo con esto, tomando elgunos elementos que he visto en los diferentes Post, que he estado visitando en búsqueda de ayuda: En el Form1, tengo mi procedimiento para crear este nuevo Tab, en tiempo de ejecución: Código:
procedure TForm1.NewTab1Click(Sender: TObject); begin NewTab := TTabSheet.Create(Self); //Se crea la nueva pestaña NewTab.Caption := ' Tab ' + IntToStr(PageControl1.PageCount + 1); end; Hasta ahí, no habría problema. Todo funciona perfectamente, puesto que el procedimiento está escrito y declarado en el Form1 y todo de momento, sucede en este mismo Form. Ahora bien, en el Form2, quiero poner un botón, que haga lo mismo, pero aplicabdole esta acción, al mismo Form1, es decir, que si ejecuto este procedimiento en el Form2, el Form1 cree un nuevo Tab. Que he tratado de hacer entonces en el Form2: Código:
procedure TForm2.BtnNewTabForm1Click(Sender: TObject); begin begin Form1:= TForm1.Create(application); Form1.ShowModal; Form1.NewTab1Click(sender); Form2.Close; Crea una nueva del Form1 (adicional a la que ya hay), y efectivamente crea en tiempo de ejecución un nuevo tab, y el Form 2 se cierra. Al cerrar este nuevo Form1, se crea una Excepción, que hace referencia a lo siguiente: EInvalidOperation with message Cannot Focus a disable or invisible Window'. Comentarios finales: 1) No quisiera que en tiempo de ejecucion, se cree una nueva instancia del Form1. Finalmente este ya está anteriormente abierto. No deseo crear otro. 2)¿Es posible sobre el Form1 que ya está abierto en tiempo de ejecución, se ejecute este procedimiento? 3) Qué genera dicha excepcion al intentar cerrar esta nueva instancia del form1 creado? Ojalá pudiesen ayudarme. Es de momento, lo ultimo que me faltaría, para poder entregar este proyecto. Mil gracias, y un gran saludo. Julián. |
#2
|
||||
|
||||
form.....
A ver si te sirve algo como esto.
La declaracion de tu procedure hasla en
En la form2 coloca una referencia a tu form1 en el procedimiento del boton en tu form2 has la referencia al objeto form1 que ya existe
espero te ayude en algo
__________________
tu mente es tu mas presiado tesoro, cultiva tu conocimiento |
#3
|
|||
|
|||
Hola, Voldemmor, mil gracias por tu amable respuesta.
Verás, implementando el método que muy amablemente me expones, sucede esto: "No hay parametros suficientes", según el compilador Delphi 7. Esta función, sobre crear un nuevo Tab, tiene algunas variables en el form1 que hay que declarar, para que los objetos que se crean con él, en tiempo de ejecución, lo hagan del modo correcto. De este modo, no sé, si es necesario hacer referencia también a todo esto, o definitivamente, por ahí, no está la solución. Tu que opinas? Mil gracias por tu respuesta, y un gran saludo. Julián |
#4
|
|||
|
|||
Hola.
Creo que el error salta porque, en el ejemplo de código de voldemmor, no se pone ningún parámetro dentro del paréntesis al llamar al procedimiento. Y posiblemente, en el procedimiento al que tu llamas, sí que tiene 1 ó más parámetros. Así, en lugar de escribir:
deberías escribir la lista de parámetros que le pasas al procedimiento dentro del paréntesis. Si fueran 3 valores del tipo Integer (por ejemplo: 1, 3 y 8), podría quedar así:
Espero te sirva. Ramón. |
#5
|
|||
|
|||
Hola, rrf, mil gracias por tu respuesta.
Verás, estuve intentándolo del modo que me propones, pasando los parametros a la función, pero definitivamente, al momento de la compilación, se crea una excepción. Quisiera en tiempo de ejecución, crear un nuevo tab, en un page control, en el Form1, desde el Form2. He estado tratando incluso, escribiendo todo el procedimiento, en el propio Form2, tal cual, lo hago en el Form1, pero tampoco funciona. Mil gracias por la amable ayuda. Haber de que modo se puede implementar. Un gran abrazo, y un gran saludo. |
#6
|
|||
|
|||
Hola Robin1.
A ver si esta idea te sirve. Si vas a crear el componente en el Form1, haz un procedimiento en el form1 que haga lo que quieres (por ejemplo, lo llamas "crea_Tab") y que sea llamado desde el mismo Form1; por ejemplo, al hacer click en un botón. Comprueba que funciona. Cuando ya veas que está bien y que funciona, haz la llamada a ese procedimiento desde el form2. (para ello, en el 'uses' del form2 debes incluir el Form1 y la llamada desde el form2 al procedimiento sería algo así 'form1.crea_Tab' ). un saludo. Ramón. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
llamada a método de Form desde otros Forms | Bauhaus1975 | Varios | 4 | 19-12-2008 22:07:42 |
llamar al evento click de un boton q se encuentra en un form desde otro form | TURBOIGOR | OOP | 6 | 02-12-2008 14:50:16 |
Como llamar form desde otros form y regresar a la linea que se estaba ejecutando | Willy Rodrigo | C++ Builder | 1 | 03-08-2007 19:36:23 |
llamar a procedimientos desde otro form | David | OOP | 8 | 06-09-2006 18:28:12 |
Llamar una form desde otra form!!! | niogon | Varios | 2 | 30-09-2004 16:09:17 |
|