Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-09-2007
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
Pasar datos entre forms

Que tal?? Como los trata la vida??

Hola de nuevo por aqui, pues nada que me he topado con el problema de que necesito compartir datos dentro de una misma aplicación pero de una ventana de la cual se abre otra en forma modal a esta. Trate agregando la Unit y haciendo referencia a la form donde manejo la variable de la que necesito el dato de la siguiente forma:
Código Delphi [-]Modo:=FExplorar.Forma;

pero nada, alguien puede hecharme una mano????

Gracias.



Buena noche por allá, buena tarde por acá.
Responder Con Cita
  #2  
Antiguo 20-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
¿De que datos estas hablando?, mejor dicho, ¿Podrias darnos mas detalles del asunto?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 20-09-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
No veo exactamente lo que quieres hacer, pero puedes crear una Unidad que contenga esas variables e incluirla en el uses de esas dos que mencionas.

Código Delphi [-]
unit Global;

interface
uses Controls;

var
Estado:Integer;  //1:Altas, 2:Modificaciones, 3:Consultas.

AskBor:Boolean;  //Para controlar si borrarmos o no las líneas de una factura.
op1:String ='001';
op2:String ='002';
op3:String ='';
op4:String ='';
RepiteFecha:TDate;

Borra_Linea_Almacen:Boolean;
{Saber si es una
Compra = 1
 o
Regularización = 2
}
Compra_O_Regul:Integer;
Ver_Menu_B:Boolean;

//Descomponer fechas
dd,mm,yy:Word;

iNumero:Integer;

function RighString(Instring: String; Len:Integer):string;
function RoundEuros(Const X: Double): Double;
Function FillSpacesRight(cVar:String;nLen:Integer):String;


implementation

Un Saludo
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 20-09-2007
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
Compartir.......

Gracias por su pronta respuesta.

Lo que sucede es que desde una ventana llamo a otra en forma modal, en la ventana1 se captura el numero de una factura y lo pongo en una variable y se tiene la opcion en la ventana1 de correr otro proceso un poco distinto en la ventana2 pero que requiere del dato que se tiene en la variable que se inicio en la ventana1. He puesto en el uses de la ventana2 la UNIT de la ventana1 y he hecho referencia a la mencionada variable a traves de la form como lo comente en al inicio del tema, espero ser un poco mas claro.

De nuevo gracias.
Responder Con Cita
  #5  
Antiguo 20-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No dices nunca el error que obtienes, si es que obtienes alguno. Y seguramente el propio error esté diciendo qué está pasando. Lo que se me ocurre es que se trata de una variable privada declarada en la clase de la "ventana1", de modo que, ni siquiera incluyendo esta unidad en otra podrías acceder a ella.

Si he acertado la solución es sencilla... por lo menos aparentemente y para salir del paso: declarar la variable dentro de una cláusula "public", de modo que se tenga acceso a dicha variable desde cualquier sitio en que se tenga acceso a la clase, mejor dicho, a la instancia de la clase (en otra variable), y eso ya sabes cómo hacerlo: añadiendo la unidad de la "ventana1" en la unidad de la "ventana2".

O sea:

Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    FVariable: Integer;
  end;

No... pero:

Código Delphi [-]
type
  TForm1 = class(TForm)
  public
    FVariable: Integer;
  end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 20-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por Phacko Ver Mensaje
Gracias por su pronta respuesta.

Lo que sucede es que desde una ventana llamo a otra en forma modal, en la ventana1 se captura el numero de una factura y lo pongo en una variable y se tiene la opcion en la ventana1 de correr otro proceso un poco distinto en la ventana2 pero que requiere del dato que se tiene en la variable que se inicio en la ventana1. He puesto en el uses de la ventana2 la UNIT de la ventana1 y he hecho referencia a la mencionada variable a traves de la form como lo comente en al inicio del tema, espero ser un poco mas claro.

De nuevo gracias.
Ok, ahora si haz sido mas claro pero aún falta un pequeño detalle, ¿Que quieres decir cuando dices "pero nada"?, ¿Acaso hace referencia a que muestra un error?, ¿No te deja compilar y te muestra un mensaje?, ¿Te deja correr la aplicación pero no procesa la información en la ventana2?, en todo caso, verifica que de la Unit2 tengas acceso a la variable de la ventana1, mirando que dicha variable o propiedad, sea de tipo publica para que pueda ser accesada desde las demas unidades.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 20-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Caramba¡¡¡, veo que dec estaba pensando en lo mismo .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #8  
Antiguo 21-09-2007
Nasca Nasca is offline
Miembro
 
Registrado: abr 2007
Ubicación: Almería (España)
Posts: 249
Poder: 17
Nasca Va por buen camino
Y que tal una búsqueda recursiva de los padres

Te mando un ejemplo que puedes adaptar:

Código Delphi [-]
var
  cpadre : TComponent;
begin
inherited;
//Localizamos los padres por si procede cargar factura en cobro
if Assigned(TComponent(Self).Owner) then
 begin
  cpadre := TComponent(Self).Owner;
  while not(cpadre is TfCobro) do
    begin
       cpadre := cpadre.Owner;
       if cpadre = nil then Break;
    end;
  if Assigned(cpadre) then
    begin
      cds_detalle_cobro := TClientDataSet(cpadre.FindComponent('cdsFacturas'));
      PageControl1.TabIndex := 3;
      Self.ActiveControl :=  btCobrar;
      btCobrar.Tag := 1;
      btCobrar.Font.Color := clRed;
      btCobrar.Caption := 'Cargar Factura';
    end;

Igualmente te vale si haces una búsqueda recursiva de los formularios abiertos.

Yo usé un método parecido al tuyo pasando variables pero es muy rígido y lioso. Este funciona mejor y mas flexible y potente. De paso soluciona el problema de ir pasando variables recursivamente. Si lanzas una ventana desde un formulario y esta a su vez otra, el sistema sigue funcionando.
Creo que métodos de trabajo como este son los que realmente hacen que las interfaces desktop sigan siendo mucho mas útiles que las webs.
Responder Con Cita
  #9  
Antiguo 21-09-2007
waly2k1 waly2k1 is offline
Miembro
 
Registrado: dic 2006
Ubicación: El país de las maravillas(Argentina)
Posts: 251
Poder: 18
waly2k1 Va por buen camino
La manera mas sencilla

Para pasar variables de un form a otro deberás definirlas como publicas dentro de uno u otro form

supongamos q Form1 llama a Form2
entonces en la seccion public de Form2..
Código:
public
    var1:integer;
    var2:String;
    bOK:boolean;
cuando cerras Form2 asignas a esas variables los valores que quieres, o si la necesitas dentro de Form2 a las variables les asignas valor antes del
ShowModal:

Código:
Form2.var1 := 0;
Form2.var2 := 'Qsio';
Form2.ShowModal;
if Form2.bOK then
begin
// Wow Anduvo
end;
Ó
if Form2.var2 = 999 then
....

Y si en caso que la complique mas, deberás trabajar con un cliente/servidor DDE (para el caso que necesites el valor antes de cerrar el segundo form)

Saludos y espero serte util

Última edición por waly2k1 fecha: 21-09-2007 a las 01:02:06.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como pasar datos entre dos formas modales creadas dinamicamente Tauro78 Varios 6 24-02-2007 16:03:39
Pasar variable o valor entre forms nachito_tuc OOP 3 05-09-2006 15:06:41
Pasar datos entre formularios davitcito OOP 1 29-06-2005 10:48:03
Problema al pasar datos entre 2 formas maguib Varios 6 10-03-2005 21:19:33
Problema con JBuilder(pasar datos entre ventanas) fgabriel JAVA 0 17-02-2005 17:23:55


La franja horaria es GMT +2. Ahora son las 23:44:25.


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
Copyright 1996-2007 Club Delphi