Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-12-2008
cybergerman cybergerman is offline
Miembro
 
Registrado: ago 2004
Posts: 36
Poder: 0
cybergerman Va por buen camino
Obtener el nombre del Form que llamó a otro Form.

Buenas tardes,

Hay alguna forma de saber el nombre del Formulario que realizó la llamada a otro (obviamente a partir de un click de algún botón)?.

Es decir , yo tengo una aplicación con un botón que hace la llamada a otro Form, el Form origen no queda atras, todavía no fue cerrado ya que es MDI.

Al hacer click en el botón , me aparece el otro Form, pero yo quiero desde este poder saber desde que Form fue llamado.

Hay alguna posibilidad, sin usar una función que yo le pase por ejemplo, el nombre del formulario a la otra pantalla?
Responder Con Cita
  #2  
Antiguo 19-12-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por cybergerman Ver Mensaje
Hay alguna posibilidad, sin usar una función que yo le pase por ejemplo, el nombre del formulario a la otra pantalla?
Puedes asignar el nombre de la FormaX que lanzó a la Forma2 una variable publica.

Código Delphi [-]
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Llamada: string; //***********************
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.FormShow(Sender: TObject);
begin
  ShowMessage('Lanzada '+Llamada);
end;

end.

Y desde la FormaX la asignas y lanzas la forma2.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Llamada := 'Desde FormX';
  Form2.ShowModal;
end;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 19-12-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola cybergerman, puedes utilizar el Owner(propietario) del formulario, para ello cuando crees el segundo formulario debes decirle que su propietario sera el formulario actual.

Código Delphi [-]
procedure 
  Form2 := TForm2.Create(Self); //Self nos indica el formulario actual
  Form2.ShowModal;
 
 //Dentro de form2 podemos hacer lo siguiente, paar saber el nombre del que lo llamo (propietario)
 showmessage(TForm(Self.Owner).Name);

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #4  
Antiguo 19-12-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Caro Ver Mensaje
Hola cybergerman, puedes utilizar el Owner(propietario) del formulario, para ello cuando crees el segundo formulario debes decirle que su propietario sera el formulario actual.

Saluditos
Ya decia yo, Caro va a llegar con uno de esos codigos que me estropean el negocio, asi no voy a conseguir clientes amiguita......

Salud ITOS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 19-12-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Ya decia yo, Caro va a llegar con uno de esos codigos que me estropean el negocio, asi no voy a conseguir clientes amiguita......
Lo siento amiguito .

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 19-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Sólo aportar un detalle que me parece importante:
Código Delphi [-]
procedure TForm1.button1click(Sender:TObject);
begin
  Form2 := TForm2.Create(Self),
  Form2.Show;
end;

1 - Si cierras el Form1, se cierra automáticamente el Form2.
2 - Si Form2 ya estaba creado previamente, estás teniendo fugas de memoria, (lo que llamamos memory leak) ya que estás creando un TForm2 nuevo, pero asignándolo a la variable global "Form2"

Al ser ventanas MDICHILD se complica aún más porque, como dices, puede crearse la ventana Form2 desde varios sitios.

Hay soluciones elegantes y otras no tanto, no sé cual quieres utilizar:
- la "elegante": usar herencia visual creando una ventana base y métodos genéricos que pueden llamarse desde cualquier ventana del mismo tipo.
- La simple: comprobar que "Form2 = nil" antes de crear la ventana y al tiempo de cerrarla, poner esa variable a nil (en el Form2.Close).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 20-12-2008
cybergerman cybergerman is offline
Miembro
 
Registrado: ago 2004
Posts: 36
Poder: 0
cybergerman Va por buen camino
Thumbs up Muchas Gracias

Les agradezco,
solución ganadora, la propuesta por Caro.

Yo realizaba la llamada a mi otro form de esta forma:

procedure TForm1.Button1Click(Sender:TObject);
begin
if not Assigned (Form2) then
Application.CreateForm (TForm2,Form2)
else
Form2.Show;
end;

la form2 es una unit que yo ya la había agregado a la unit form1.
Pero en el form2 no tenía forma de saber que form lo había llamado a no ser que definiera una variable global en el form2.

Así que reemplazé el código por la de Caro y ya funciona.

Gracias
Responder Con Cita
  #8  
Antiguo 26-12-2008
Avatar de JoseAntonio
JoseAntonio JoseAntonio is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lima - Ciudad de los Reyes.
Posts: 87
Poder: 19
JoseAntonio Va por buen camino
Lightbulb

Yo lo que haria es crear el formulario, mostrarlo y a la hora de cerrarlo liberarlo (Action = Cafreee en caso de MDI), si quiero cargar el formulario nuevamente pues lo creo de nuevo. Aunque no lo creas, de esta manera optimizaras el uso de la memoria y ademas, evitaras estar pensando si tu variable Form2 esta instanciada o no.
__________________
nuestro carácter está reflejado en cada línea de código que escribimos.

Última edición por JoseAntonio fecha: 01-01-2009 a las 16:30:06.
Responder Con Cita
  #9  
Antiguo 31-12-2008
*Ghost* *Ghost* is offline
Registrado
 
Registrado: dic 2009
Posts: 1
Poder: 0
*Ghost* Va por buen camino
Hola, bueno soy nuevo en delphi y me ha gustado esta web, tenia una duda aver si me ayudan que no he entendido muy bien:

Código:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    SpeedButton1: TSpeedButton;
       procedure SpeedButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  nombre: Integer;

implementation

uses Unit2;

{$R *.dfm}



procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
nombre:= 123456;
if edit1.Text = inttostr(nombre) then
Label1.Caption:= 'Contraseña correcta'
Application.CreateForm(TForm2,Form2)
Form2.Show
else
Label1.Caption:='contraseña incorrecta';
end;

end.
COmo hago para llamar un segundo formulario desde el formulario principal?
Responder Con Cita
  #10  
Antiguo 01-01-2009
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
sólo te falta un begin... end porque dicho if tiene más de una instrucción dentro:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    SpeedButton1: TSpeedButton;
       procedure SpeedButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  nombre: Integer;

implementation

uses Unit2;

{$R *.dfm}



procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
nombre:= 123456;
if edit1.Text = inttostr(nombre) then
begin
  Label1.Caption:= 'Contraseña correcta'
  Application.CreateForm(TForm2,Form2)
  Form2.Show
end
else
 Label1.Caption:='contraseña incorrecta';

end;

end.

COmo hago para llamar un segundo formulario desde el formulario principal?[/quote]
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



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
llamar al evento click de un boton q se encuentra en un form desde otro form TURBOIGOR OOP 6 02-12-2008 14:50:16
como puedo asociar un form a otro form? jasz OOP 1 28-11-2007 00:12:09
pasar datos de un form a otro form vroa74 API de Windows 15 12-10-2007 19:11:52
Imposible hacer visible un form desde otro form SMTZ .NET 13 16-01-2006 21:41:08
obtener valor de otro form maruenda Varios 10 02-12-2004 21:06:01


La franja horaria es GMT +2. Ahora son las 14:10:58.


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