Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
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 03-01-2013
cenriquet cenriquet is offline
Registrado
NULL
 
Registrado: ene 2013
Posts: 3
Poder: 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 13:14:25.
Responder Con Cita
  #2  
Antiguo 03-01-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En el segundo form:

Antes del close:
Código Delphi [-]
  Triangulo_MainForm.myData := myData;

Y opcionalmente:

Código Delphi [-]
  Triangulo_MainForm.btnOutputClick(nil);

En el uses del segundo form tendrás que añadir:
Código Delphi [-]
uses
  Triangulo_MainUnit;

Y en el primer form descomentar el MyData.

Diría que con eso te va a funcionar.
Si necesitas alguna aclaración, ya dirás.

Básicamente lo único que te falta es asignar lo que has hecho en el segundo form, al primero.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 03-01-2013
cenriquet cenriquet is offline
Registrado
NULL
 
Registrado: ene 2013
Posts: 3
Poder: 0
cenriquet Va por buen camino
Así es como me quedan las dos forms (Por si sirviese de ejemplo para otros)

Form Principal

Código Delphi [-]
unit Triangulo_MainUnit;

interface

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

type
  TData = record
            valor1 : string;
            valor2 : string;
            valor3 : string;
          end;

  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

uses Triangulo_InputData;


{$R *.DFM}

procedure TTriangulo_MainForm.InputClick(Sender: TObject);
begin
  InputDataForm.ShowModal()
end;

procedure TTriangulo_MainForm.OutputClick(Sender: TObject);
begin
  with myData do
    begin
      Results.Lines.Add(' ');
      Results.Lines.Add(valor1);
      Results.Lines.Add(valor2);
      Results.Lines.Add(valor3);
    end;
end;

end.



Form Secundaria


Código Delphi [-]
unit Triangulo_InputData;

interface

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

type
  TInputDataForm = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  InputDataForm: TInputDataForm;

implementation

{$R *.DFM}

procedure TInputDataForm.Button1Click(Sender: TObject);
var
  myDataIn: TData;

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

end.

Lo mejor de todo es que ¡¡¡¡¡¡¡¡¡FUNCIONA!!!!!!!!!!

Me ha surgido una duda. La instrucción:

Triangulo_MainForm.btnOutputClick(nil);

¿qué hace exactamente?

Muchas gracias.
Responder Con Cita
  #4  
Antiguo 03-01-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por cenriquet Ver Mensaje
Lo mejor de todo es que ¡¡¡¡¡¡¡¡¡FUNCIONA!!!!!!!!!!
Bueno, de eso se trataba, ¿no?

Cita:
Empezado por cenriquet Ver Mensaje
Me ha surgido una duda. La instrucción:
Triangulo_MainForm.btnOutputClick(nil);
¿qué hace exactamente?
Si te fijas, en el primer formulario tienes un procedimiento definido así:
Código Delphi [-]
procedure TTriangulo_MainForm.OutputClick(Sender: TObject);
begin
  with myData do
    begin
      Results.Lines.Add(' ');
      Results.Lines.Add(valor1);
      Results.Lines.Add(valor2);
      Results.Lines.Add(valor3);
    end;
end;

Es el procedimiento que tienes asignado al botón Output al hacer un Click. En realidad es un procedimiento como cualquier otro que se asigna a ese evento del botón.
A este procedimiento también puedes llamarlo de forma "manual", además de que esté asignado al evento.
Al llamarlo lo que consigues es el mismo efecto que si pulsaras el botón, ya que el resultado es el mismo:

1) O lo llama el botón de forma automática al ser pulsado.
2) O lo llamas de forma manual como he hecho yo.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 04-01-2013
cenriquet cenriquet is offline
Registrado
NULL
 
Registrado: ene 2013
Posts: 3
Poder: 0
cenriquet Va por buen camino
Re: Pasar datos de un form a otro.

Muchas gracias por tu ayuda y a menos que alguien aporte una solución más elegante, creo que podemos dar el tema por cerrado.
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
Pasar datos de un form a otro astrosnik OOP 17 06-03-2017 19:08:15
pasar datos de un form a otro form vroa74 API de Windows 15 12-10-2007 20:11:52
pasar valores de variables de un form a otro oscarpinog Varios 7 12-08-2007 04:18:39
Error al pasar datos de un form a otro jcfonsecar Varios 6 12-07-2006 03:22:22
Pasar información de un form a otro davidgaldo Varios 3 10-02-2004 20:00:34


La franja horaria es GMT +2. Ahora son las 07:25:19.


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