Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Pasar variables entre formas (https://www.clubdelphi.com/foros/showthread.php?t=71560)

dalyla2010 27-12-2010 21:41:08

Pasar variables entre formas
 
Hola a todos,

Lo que quiero hacer es que al presionar un boton me aparesca una consulta para buscar un cliente, y al darle doble clic a un grid me devuelva el id del cliente. En este caso la forma me devuelva un integer y no un mrOk, mrYes, etc.

Quiero que el proceso de la forma que llama se detenga en el show. Pero este continua, no se detiene como puedo cambiarlo a processmessage o algo asi, para que se detenga hasta que yo cierre mi forma.

Estoy usando delphi 2009

dalyla2010 28-12-2010 01:21:07

Solucion.
 
Ok resuelto, de hecho la respuesta ya estaba en este foro, solo que por nombre no la encontraba, bien...

La forma padre, la tengo como MDIChild, supongo que no hay problema si es MDIForm, esta manda llamar al hijo con hijo.ShowModal. El hijo debera ser un fsNormal, con la propiedad visible = false;

Enla unidad padre tendra esta parte de codigo o algo similar:
Código:

try
      hija := TfrmBuscar.Create(self);
      hija.ShowModal;
    finally
      if hija.resultado <> '' then
        edcliente.Text := hija.resultado;
    end;

Aclarando que resultado es una variable publica en la forma hija.

Supongo que de este modo talvez se puedan pasar mas datos. Esto esta muy concreto, espero a alguien le sirva este resumen.

Casimiro Noteví 28-12-2010 01:30:16

Gracias por el aporte.

ElKurgan 28-12-2010 07:40:24

Por cierto, encantador el avatar de Harley Quinn.

Saludos

dalyla2010 28-12-2010 18:57:38

jajaja gracias >0<

ecfisa 28-12-2010 20:51:13

Hola dalyla2010.

Otra forma que podés utilizar para enviar y recibir datos entre forms es:

Form1 ( Receptor )
Código Delphi [-]
type
  TForm1 = class(TForm)
   ...
  private
    FResultado: string;
    procedure RecibirMsg(var Msg: TMessage); message WM_USER + 300;
  public
  end;
...
interface

uses Unit2;
...
procedure TForm1.RecibirMsg(var Msg: TMessage);// Capturar mensaje
begin
  FResultado:= PChar(Msg.LParam); // FResultado <- cadena enviada desde Form2
end;
...

Form2 ( Remitente )
Código Delphi [-]
...
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
var
  Value: string;
begin
  Value:= 'SALUDOS DESDE FORM2'; // lo que quieras que reciba Form1 en FResultado
  SendMessage(FindWindow('TForm1','Form1'), WM_USER + 300, 0, DWORD(Pchar(Value)));
  Action:= caFree;
end;

La función FindWindow debe especificar el nombre de clase y de form que correspondan al receptor.
En este caso utilizé un string pero podés pasar otros tipos de datos.

( Totalmente de acuerdo con ElKurgan ;) )

Un saludo.

dalyla2010 29-12-2010 00:42:10

Gracias, si esta mas complicado, tal vez se pueda simplificar con una funcion y solo llamarla, y asi utilizarla mas veces. Excepto por el FindWindow, lo demas es constante?

ecfisa 29-12-2010 16:15:42

Hola dalyla2010.

Se puede hacer un procedimiento para enviar el mensaje, lo podrías ubicar en la interface de alguna unidad de uso común.

Algo como:
Código Delphi [-]
procedure EnviarMensaje(Cadena, FrmClassName: string);
begin
  SendMessage(FindWindow(PChar(FrmClassName), PChar(Copy(FrmClassName, 2, 255))),
              WM_USER + 300, 0, DWORD(Pchar(Cadena)));
end;

Un ejemplo de uso sería:
Código Delphi [-]
   EnviarMensaje('MENSAJE ENVIADO','TFormReceptor');

Pero el procedimiento para recibir el mensaje tendrías que incluirlo en cada form receptor, es decir:
Código Delphi [-]
...
 private
    FResultado: string;
    procedure RecibirMsg(var Msg: TMessage); message WM_USER + 300;
...
implementation

procedure TFormReceptor.RecibirMsg(var Msg: TMessage);
begin
  FResultado:= PChar(Msg.LParam); 
end;

Un saludo.


La franja horaria es GMT +2. Ahora son las 03:04:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi