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
if Not Assigned(Formulario) then Formulario := TForm2.Create(Self);
Formulario.Caption := 'Texto';
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
Formulario:TForm2;
public
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
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var Formulario: TForm2;
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;
public
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.