Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-02-2004
davidgaldo davidgaldo is offline
Miembro
 
Registrado: nov 2003
Posts: 220
Poder: 21
davidgaldo Va por buen camino
Duda con los Forms

Hola, tengo una duda sobre los forms; yo tengo dos forms que pinchando en un boton enlazan con otro form, luego en este último form hago doble click en un dbgrid pero quería saber si hay alguna manera de saber de que form vengo para que le devuelva los datos al que lo llamó, gracias.
Responder Con Cita
  #2  
Antiguo 11-02-2004
Taribus Taribus is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 28
Poder: 0
Taribus Va por buen camino
prueba con la propiedad tag del formulario 3, es una propiedad que admite numeros, por ejemplo.

si lo abres desde el formulario 1
Código:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Form3.Tag:=1;
end;

end.
o si lo abres desde el formulario 2
Código:
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
Form3.Tag:=2;
end;

end.
luego en el formulario 3, y dependiendo del varlor tag, sabrias desde que formulario te han pedido los datos.

Código:
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
if form3.tag=1 then // viene del formulario 1
if form3.tag=2 then // viene del formulario 2
end;

end.
espero haberte ayudado, aunque solo sea una idea.

saludos.
Responder Con Cita
  #3  
Antiguo 11-02-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.938
Poder: 27
delphi.com.ar Va por buen camino
Otra opción, podría ser que el form padre sea el Owner del hijo.. y solo tendrías que preguntar por el Owner para saber quien es el padre..

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 11-02-2004
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
Yo para estos casos o similares suelo utilizar una variable bien pública o global según los casos.

Por ejemplo si en una lista de precios existen 3 tarifas para un mismo producto, le paso en la variable pública por ejemplor nTarifa:=1; en este caso sé que cuando el usuario seleccione el producto tengo que devoler la tarifa 1, aplicado al caso sería lo mismo, una estructura case y devolver el valor al formulario que corresponda.

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
  #5  
Antiguo 11-02-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Otra posible solución es mediante interfaces. Aunque reconozco que para un problema tan secnillo quizá sea excesivo, creo que puede servir para entender la idea.
En primer lugar definimos una interfaz que será la que deberán cumplir los forms "llamadores":

Código:
unit ConRespuesta;

interface

type
  IConRespuesta = interface
    ['{64E8D975-447E-4B48-9BA0-21E503E19258}']
    procedure Responde(Value: Integer);
  end;

implementation

end.
Diseñamos el form que será llamado por los otros dos con una variable publica que sea un puntero a interfaz del tipo que hemos definido. En el momento que queramos, llamaremos al método Responde de este puntero. En la pregunta original sera en el onClik de grid, en mi ejemplo es al pulsar un botón.
Código:
unit Unit3;

interface

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

type
  TForm3 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    FormResponde: IConRespuesta;
  end;

var
  Form3: TForm3;

implementation



{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
  if FormResponde <> Nil then
    FormResponde.Responde(2);
  Close;
end;

end.

Ahora pasamos a definir los dos forms que llamarán al tercero, ambos implementarán la interfaz creada y reaccionarán de manera diferente:

Código:
unit Unit1;

interface

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

type
  TForm1 = class(TForm, IConRespuesta)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Responde(Value: Integer);
  end;

var
  Form1: TForm1;

implementation

uses Unit3, Unit2;



{$R *.dfm}

{ TForm1 }

procedure TForm1.Responde(Value: Integer);
begin
  ShowMessage('Form1');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TepInterf: IConRespuesta;
begin
  with TForm3.Create(Self) do
  begin
    //asignamos al puntero nuestra interfaz
    if Succeeded(QueryInterface(IConRespuesta, TepInterf)) then
      FormResponde := TepInterf;
    ShowModal;
    Free;
  end;
end;
//este método solo es para poder acceder al segundo form en el ejemplo
procedure TForm1.Button2Click(Sender: TObject);
begin
  with TForm2.Create(Self) do
  begin
    ShowModal;
    Free;
  end;
end;

end.
unit Unit2;

interface

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

type
  TForm2 = class(TForm, IConRespuesta)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Responde(Value: Integer);
  end;
implementation

uses Unit3;

{$R *.dfm}

{ TForm2 }

procedure TForm2.Responde(Value: Integer);
begin
  ShowMessage('Form2');
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  TepInterf: IConRespuesta;
begin
  with TForm3.Create(Self) do
  begin
    if Succeeded(QueryInterface(IConRespuesta, TepInterf)) then
      FormResponde := TepInterf;
    ShowModal;
    Free;
  end;
end;

end.
Al pulsar el boton de Form3 se accederá al método de Form1 o al de Form2 en funció de a donde apunte la interfaz.
Creo que este tipo de mecanismo puede ser muy potente en casos más complejos.
__________________
E pur si muove
Responder Con Cita
  #6  
Antiguo 11-02-2004
cht666cht cht666cht is offline
Miembro
 
Registrado: nov 2003
Posts: 14
Poder: 0
cht666cht Va por buen camino
Hombre a mi la solución mas sencilla me parece que es declarar un campo público de tipo TForm en el formulario que muestras al pulsar el botón en uno de los dos formularios anteriores, y en el momento de pulsar el botón le asignas el formulario de origen (Self)

En el formulario a mostrar:

TForm2 = class(TObject)
...
public
FormOrigen: TForm;
end;

...

procedure TForm2.DBGridDblClick(Sender: TObject);
begin
// por ejemplo, mostrar el formulario de origen
FormOrigen.Show;
end;




En el formulario de origen:

procedure Form1.Button1Click(Sender: TObject);
begin
Form2.FormOrigen := Self;
Form2.Show;
end;
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


La franja horaria es GMT +2. Ahora son las 17:37:09.


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