Ver Mensaje Individual
  #6  
Antiguo 23-10-2014
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Reputación: 17
Neeruu Va por buen camino
Algo encontre aca....

Link


El tema del formulario de búsqueda, por el cual me surgió la duda de las múltiples instancias, es porque, por ejemplo:

Creo el Formulario de ABM de Clientes, creo el formulario de Búsqueda, Abro el ABM de Clientes,
Después creo el Formulario de Recibos, acá la Búsqueda de No me crea porque se creo anteriormente en el ABM.
Cierro el Formulario ABM de Clientes, y aca se destruye la Búsqueda de Clientes
Quiero abrir la Búsqueda de Clientes desde Recibos, y no puedo porque se destruyo con el ABM de Clientes.

Entonces mi idea era poder instanciar en distintas variables la Búsqueda para poder hacerla independiente del Formulario
que la utilice....



y haciendo pruebas encontré cosas muy curiosas, que no entiendo bien pero que las detallo....
y aunque encontré la solución, no entiendo porque sucede lo que sucede:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var Formulario:TForm2;
begin
{Linea 1}  if Not Assigned(Formulario) then //También pueden reemplazarlo con If Formulario = Nil Then
{Linea 2}    Formulario := TForm2.Create(Self);
{Linea 3}  Formulario.Caption := 'Texto';
{Linea 4}  Formulario.Show;
end;

La variable Formulario, se crea de forma local en el evento OnClick de un Button...
Si en la linea 2, coloco un break, realizo una evaluacion de la Variable (Ctrl+F7):
(En la ventana de Evaluacion)
Formulario is TForm2 ==> Resultado: True
Formulario.ClassName ==>Resultado: TButton //Y aca es cuando se me pelaron los cables....

Si muevo el codigo que tengo dentro del evento onclick al create del form1 y realizo la misma evaluacion, obtengo los mismos resultados, con la diferencia que esta vez ClassName es TForm1....


Pero ahora si defino la variable en la parte privada del Form1

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  private
    { Private declarations }
    Formulario:TForm2;
  public
    { Public declarations }
  end;


No es necesario inicializar la variable Formulario porque viene con Nil, ni me aparece cosas raras en el ClassName

A lo que voy, porque es distinto esto:

Código Delphi [-]
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Formulario: TForm2; {<---- Declarada Localmente dentro del Evento}
begin
  if Formulario = nil then
    Formulario := TForm2.Create(Self);
  Formulario.Show;
end;

end.

de esto:

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    Formulario: TForm2; {<---- Declarada Localmente dentro del Form1}
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Formulario = nil then
    Formulario := TForm2.Create(Self);
  Formulario.Show;
end;

end.
__________________
Saluda Atte Neeruu!!! :)
Responder Con Cita