Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Saber origen formulario. (https://www.clubdelphi.com/foros/showthread.php?t=28160)

toorbye 12-12-2005 09:45:53

Saber origen formulario.
 
Hola, tengo un formulario donde tengo un dbgrid que muestra una serie de datos, este formulario puede ser llamado desde varios formularios. Me gustaria guardar en una variable de dicho formulario el formulario que lo llamo. No se si me explico. Me gustaria registrar en el formulario con el dbgrid el formulario de procedendia o sea el formulario desde el cual fue abierto.

A ver si me podeis ayudar.Un saludo.

epuigdef 12-12-2005 09:53:48

Buenas!


Puedes poner en el formulario una variable en la parte public para poderla acceder en el momento de la creación. cuando lo crees asignas el nombre desde donde lo llamas.

Por ejemplo, si la variable se llama origen, en la llamada al formulario puedes hacer esto:

Código Delphi [-]
  formulario := TFrmPrueba.create(nil)
  try
    formulario.origen := 'Formulario3';
    formulario.showmodal;
  finally
    formulario.free;

Un saludo

Edu

toorbye 12-12-2005 10:28:43

El problema que tengo es que al llamar a dicha variable goblal en mi caso llamada formulario las propiedades como showmodal si que estan presentes, pero en mi caso me gustaria utilizar un dbgrid que hay dentro de ese formulario, y no aparece, esto seria lo q queria hacer:

formulario.Dbgrid1.Fields[0].Value := GridArtBusq.Fields[0].Value;

Gracias

epuigdef 12-12-2005 10:44:57

Si quieres acceder a los componentes del formulario lo tienes que hacer a partir de la variable del tipo del formulario que tienes creada, no a partir de la variable de dentro del formulario..


Me parece que me estoy explicando fatal, pasame el código que utilizas para llamar al formulario y te indico mejor.

Edu

toorbye 12-12-2005 11:27:49

Ahi va el codigo,

FrmBusqArt:= TFrmBusqArt.Create(self);
FrmBusqArt.EdBuscar.text := TRIM(producto);
FrmBusqArt.formulario := FrmPedidos;
FrmBusqArt.ShowModal;

epuigdef 12-12-2005 11:35:39

Vale, entonces lo que tienes que hacer es lo siguiente:

Código Delphi [-]
FrmBusqArt:= TFrmBusqArt.Create(self);
FrmBusqArt.EdBuscar.text := TRIM(producto);
FrmBusqArt.formulario := FrmPedidos;
 
FrmBusqArt.Dbgrid1.Fields[0].Value := GridArtBusq.Fields[0].Value;

FrmBusqArt.ShowModal;
Espero que te sirva

Edu

toorbye 12-12-2005 11:58:07

Creo qn o me he explicado el siguiente codigo se ejecuta en el evento Ondblclick y lo q intento hacer es pasar los datos de un dbgrid a otro situado en otro formulario:
formulario.Dbgrid1.Fields[0].Value := GridArtBusq.Fields[0].Value;Este formulario puede ser llamado por varios formularios, por lo q si pusiese por ej

FrmVentas.Dbgrid1.Fields[0].Value := GridArtBusq.Fields[0].Value;

Intentaria insertar los datos en el grid1 del frmventas, pero
imaginate que el formulario no fue llamado desde FrmVentas y fue llamado
desde FrmStocks por ejemplo....

Quiero evitarme andar con "if" o "case" por ejemplo
if formulario = frmventas then
FrmVentas.Dbgrid1.Fields[0].Value := GridArtBusq.Fields[0].Value
else
if formulario = FrmStocks
FrmStocks.
Dbgrid1.Fields[0].Value := GridArtBusq.Fields[0].Value

No se si me he explicado :)

epuigdef 12-12-2005 12:02:03

Bien, me parece que ya lo entiendo. Lo que necesitas es asignar los valores en el grid que está en el formulario de ORIGEN (el que hace la llamada) no?


Entonces lo que puedes hacer es, en lugarde hacer el proceso en el formulario de destino, hacerlo en el de origen después del showmodal (lo tendrás que hacer en cada uno de los formularios origen:

Código Delphi [-]
FrmBusqArt:= TFrmBusqArt.Create(self);
FrmBusqArt.EdBuscar.text := TRIM(producto);
FrmBusqArt.formulario := FrmPedidos;
FrmBusqArt.ShowModal;
// suponemos que GridArtBusq está en este formulario (el de origen)
GridArtBusq.Fields[0].Value =FrmBusqArt.Dbgrid1.Fields[0].Value;
Edu

toorbye 12-12-2005 12:13:38

No, es justamente lo contrario, desde un formulario abro otro(que lo quiero utilzar en varios formularios) y desde este formulario que puede ser llamado desde otros fomularios,quiero haciendo doble click, pasar el valor al formulario origen.

Mi idea es que al introducir un producto q no exista en un formulario, se abra otro con la lista de articulos,doble click en ese formulario y que pase el valor.

Creo q soy un desastre explicandome.... gracias de todos modos.

P.D: Con el codigo que me dices lo que consigo es justamente lo contrario, es pasar los datos de origen a destino, pero yo quiero pasarlos desde destido a origen. El principal problema reside a que al ser un formulario que puede ser llamado desde otros formularios y no desde uno fijo.

Podria hacerlo con un "if" o un "case" en el evento onDblClick pero quiero hacerlo de forma mas elegante.

if formulario = frmventas then
FrmVentas.Dbgrid1.Fields[0].Value := GridArtBusq.Fields[0].Value
else
if formulario = FrmStocks
FrmStocks.
Dbgrid1.Fields[0].Value := GridArtBusq.Fields[0].Value

epuigdef 12-12-2005 12:25:50

No, si ya te he entendido, pero el concepto es que debes RECOGER el dato, en lugar de DEJARLO.

el proceso debe ser el siguiente:

en el formulario hijo (que tiene la grid que realiza la búsqueda):
declara una variable String pública llamada resultado.
en el doubleclick pones lo siguiente:
resultado := GridArtBusq.Fields[0].Value:
modalresult := mrok
// esto asigna el valor de retorno y cierra la ventana


en los formularios que realizan la llamada:
FrmBusqArt.showmodal

// recogemos el valor
mivalor := FrmBusqArt.resultado

FrmBusqArt.free


Edu

toorbye 12-12-2005 12:29:16

ya entendiendo muchas gracias!!!


La franja horaria es GMT +2. Ahora son las 00:30:12.

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