Ver Mensaje Individual
  #1  
Antiguo 03-01-2013
cenriquet cenriquet is offline
Registrado
NULL
 
Registrado: ene 2013
Posts: 3
Reputación: 0
cenriquet Va por buen camino
Pasar datos de un form a otro.

Buenos días y Feliz 2013 a todo el mundo. Este es un tema recurrente, y aunque he probado la solución que se ha dado en otras consultas (crear una variable pública) hay algo que no he debido entender, por lo que os pido perdón.

Para visualizar mi problema me he creado dos formas: Triangulo_MainForm

Código Delphi [-]
unit Triangulo_MainUnit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, Triangulo_InputData;

type
  TTriangulo_MainForm = class(TForm)
    Input: TButton;
    Output: TBitBtn;
    Results: TMemo;
    procedure InputClick(Sender: TObject);
    procedure OutputClick(Sender: TObject);
  private
    { Private declarations }
  public
(*
    myData : TData;    { Public declarations }
*)
  end;

var
  Triangulo_MainForm: TTriangulo_MainForm;

implementation


{$R *.DFM}

procedure TTriangulo_MainForm.InputClick(Sender: TObject);
begin
  InputDataForm.ShowModal()      // Se llama a la segunda unidad
end;

procedure TTriangulo_MainForm.OutputClick(Sender: TObject);
begin             
  with myData do                           // aquí es donde da el error "Undeclared
                                                   // identifier
    begin                                       
      Results.Lines.Add(' ');              // Se escriben los datos de myData 
      Results.Lines.Add(valor1);        // en el Memo
      Results.Lines.Add(valor2);
      Results.Lines.Add(valor3);
    end;
end;

end.

que, al pulsar el botón Input, llama a otra forma llamada Triangulo_InputData

Código Delphi [-]
unit Triangulo_InputData;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TData = record
            valor1 : string;
            valor2 : string;
            valor3 : string;
          end;
  TInputDataForm = class(TForm)
    SendData: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure SendDataClick(Sender: TObject);
  private
    { Private declarations }
  public
    myData : TData;    { Public declarations }
  end;
var
  InputDataForm: TInputDataForm;

implementation

{$R *.DFM}

procedure TInputDataForm.SendDataClick(Sender: TObject);

begin
  with myData do
  begin
    valor1 := Edit1.text;
    valor2 := Edit2.text;
    valor3 := Edit3.text;
  end;
  Close;
end;

end.


En esta form se introducen tres datos, en principio es texto, La idea es que al pulsar el botón Send Data estos tres datos combinen en un registro (record) llamado myData que pueda ser accesible desde la primera unidad (Triangulo_MainForm). En esta unidad al pulsar el botón Output, los datos contenidos en myData aparecían en una ventana tipo Memo.

Por lo que he entendido de otras consultas similares, si no iguales, la solución pasaría por

1. Declarar en la cláusula uses de la unit Triangulo_MainUnit, la segunda unidad (Triangulo_InputData). (hecho)

2, Declarar en la segunda unidad (Triangulo_InputData) myData como variable pública. (hecho)

La cosa es que haciéndolo así no me funciona, por lo que deduzco que se me he perdido algo en el camino.

También he probado a declarar myData como variable pública en la primera unidad y la cosa tampoco funciona.

Gracias por vuestra ayuda y que los Reyes Magos sean generosos con todos.

Última edición por Casimiro Notevi fecha: 03-01-2013 a las 12:14:25.
Responder Con Cita