Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Saber que formulario invoca a otro (https://www.clubdelphi.com/foros/showthread.php?t=73280)

pau_elx 12-04-2011 19:02:07

Saber que formulario invoca a otro
 
Hola buenas tardes, queria ver si alguien puede ayudarme con éste problema, estoy haciendo una aplicación en Delphi 7 y tengo 2 formularios que llaman a un tercero, pero dependiendo quien llama a éste tercero le pasarán diferentes valores, se que se tiene que hacer con Sender pero no me funciona, yo lo hacia con if sender=Form1. Gracias de antemano.

roman 12-04-2011 19:05:54

Si los formularios que llaman al otro son los que le pasan valores, ¿para qué necesitas distinguir quién lo llama? Que cada uno le pase los valores que requiera.

// Saludos

pau_elx 12-04-2011 19:28:50

Hola, yo lo que tenia puesto es que tanto Form1 como Form2 llaman por ejemplo a un Form3, y en esté Form3 al activarlo queria poner que si quien le llama es Form1 tome un valor y si es Form2 el valor que toma Form3 es otro diferente ¿como puedo decirle desde Form1 el valor que le paso ántes de mostrarlo?

roman 12-04-2011 19:38:20

Si Form3 lo creas al momento de llamarlo, una opción sería crearlo así:

Código Delphi [-]
Form3 := TForm3.Create(Self);

Esto hará que el Owner del formulario sea el que lo creó y, por tanto, puedes examinar la propiedad Owner para saber si es Form1 o Form2.

Sin embargo, ésta no es la técnica ideal. El formulario llamado (Form3) no debería depender de quién lo llama sino, en todo caso, de los valores iniciales que tenga.

Lo que quiero decir, es que puedes poner alguna propiedad en Form3 que sirva para determinar qué hacer. Entonces, cada uno de los formularios que lo llaman (Form1, Form2 o cualquier otro) pondrá el valor adecuado en dicha propiedad y Form3 examinará tal valor al momento de mostrarse.

// Saludos

pau_elx 12-04-2011 19:57:10

perdona pero no te he entendido muy bien, la verdad es que no llevo mucho con Delphi, yo desde form1 por ejemplo primero creo Form3 con create(self) y luego lo visualizo con ShowModal, entonces en Form3 tengo un edit que tiene que tomar el valor x si se lo pasa el Form1 y por ejemplo y si se lo pasa el form2 el valor y, entonces esta comparación la hago en el procedimiento on activate del Form3 y de esta forma el edit dependiendo de que formulario sea quien lo ha llamdo visualizará el valor x o y, de que otra forma puedo hacer esto, no he entendido muy buen lo de la propiedad que me comentas, ¿como pueden form1 y form2 poner el valor a esta propiedad?

rgstuamigo 12-04-2011 20:03:36

Cita:

Empezado por roman (Mensaje 396763)
...
Lo que quiero decir, es que puedes poner alguna propiedad en Form3 que sirva para determinar qué hacer. Entonces, cada uno de los formularios que lo llaman (Form1, Form2 o cualquier otro) pondrá el valor adecuado en dicha propiedad y Form3 examinará tal valor al momento de mostrarse.
...

Estoy de acuerdo con roman, se podría por ejemplo utilizar la propiedad "Tag" del formulario Form3 algo asi:
Código Delphi [-]
// llamada del formulario 1 (Form1)
Form3 := TForm3.Create(Application);
Form3.Tag:=1;//pongo como etiqueta 1 para decir que se llama del Form1
Form3.Show;
...
Ahora la llamado del Form2
Código Delphi [-]
// llamada del formulario 2 (Form2)
Form3 := TForm3.Create(Application);
Form3.Tag:=2;//pongo como etiqueta 2 para decir que se llama del Form2
Form3.Show;
...
Ahora para saber qué formulario lo invocó, sencillamente verificamos la propiedad "Tag" donde lo necesitemos, algo así:
Código Delphi [-]
if Form3.Tag=1 then
Showmessage('El formulario fué invocado por el Form1')
else if Form3.Tag=2 then
       Showmessage('El formulario fué invocado por el Form2');
Saludos...:)

pau_elx 12-04-2011 20:10:08

Ahora os he entendido, muchas gracias voy a probarlo.

Caro 12-04-2011 20:11:39

Cita:

Empezado por pau_elx (Mensaje 396770)
perdona pero no te he entendido muy bien, la verdad es que no llevo mucho con Delphi, yo desde form1 por ejemplo primero creo Form3 con create(self) y luego lo visualizo con ShowModal

Hola pau_elx, si lo creas con Self ya le estas indicando que el propietario (owner) es el form actual, entonces al hacer esto en el OnActivate de tu form3, tendrías el nombre del form que lo ha llamado.

Código Delphi [-]
showmessage(TForm(Self.Owner).Name);

Pero también puedes hacerlo de la otra forma que te ha indicado Roman.

Saluditos


La franja horaria es GMT +2. Ahora son las 04:02:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi