Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pasar datos entre forms (https://www.clubdelphi.com/foros/showthread.php?t=48293)

Phacko 20-09-2007 21:06:56

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á.

jhonny 20-09-2007 21:14:07

¿De que datos estas hablando?, mejor dicho, ¿Podrias darnos mas detalles del asunto?

marcoszorrilla 20-09-2007 21:14:14

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

Phacko 20-09-2007 21:26:24

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.

dec 20-09-2007 21:30:30

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;

jhonny 20-09-2007 21:31:59

Cita:

Empezado por Phacko (Mensaje 232627)
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.

jhonny 20-09-2007 21:33:47

Caramba¡¡¡, veo que dec estaba pensando en lo mismo :).

Nasca 20-09-2007 23:01:07

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.

waly2k1 20-09-2007 23:58:08

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


La franja horaria es GMT +2. Ahora son las 12:41: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