Fórum Dar nil em Form #300788
26/10/2005
0
Estou tendo um problema para dar um nil em uma instância de um Form.
Tenho as seguintes units em meu projeto: Unit1 e Unit2.
[b:c07ce78684]Unit1:[/b:c07ce78684]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton5: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
Unit2;
var
formx, formy: TForm2;
{$R *.dfm}
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
formx := TForm2.Create(Self);
formx.Show;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
formy := TForm2.Create(Self);
formy.Show;
end;
procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
if Assigned(formx) then
ShowMessage(´formx´);
if Assigned(formy) then
ShowMessage(´formy´);
end;
[b:c07ce78684]Unit2:[/b:c07ce78684]
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Self := nil;
Action := caFree;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
Caption := Name;
end;
end.
Reparem q estou usando Self := nil para dar o nil nela, pois quero que o nil seja dado nas variáveis que estão na Unit1, tanto formx quanto formy. Mas isso não ocorre, ele não deixa as variáveis como nil. Re
Reparem também que não estou usando o nome interno do formulário, ou seja form2, estou usando formx e formy. Preciso disso, pois preciso chamar do mesmo formulário aberto várias vezes tendo comportamentos diferentes em cada chamada, sem um interferir no outro.
Como eu faço isso para dar o nil na variável formx e formy sem ter que colocar diretamente ´formx := nil´??
Alguém tem alguma idéia de como posso fazer isso automaticamente através da Unit2??
Obrigado
Giordanok
Curtir tópico
+ 0Posts
26/10/2005
Aerreira
if Assigned(formx) then
Formx := Nil;
Gostei + 0
26/10/2005
Aerreira
Desculpe pela mensagem anterior... mas era justamente formx := nil que você não queria fazer... Realmente não sei como fazer o que precisa.
Gostei + 0
26/10/2005
Massuda
Gostei + 0
27/10/2005
Fx|hand
mais no meu caso, ele poderia abrir 1 frm pra cadastro, 1 pra visualizar, e 1 pra editar o cliente....
por issu no OnClose eu fiz um case utilizando o Self.Name do formulario..
e na hora de criar eu setava o nome do formulario...
Assim:
Unit 1.... ... . .. . . Var Form1: Tform1; FrmEditar:TForm2; FrmVisualizar:TForm2; FrmCadastrar: TForm2; Implementation procedure TForm1.Button1Click(Sender: TObject); begin FrmEditar := TForm2.Create(Self); FrmEditar.Caption := ´Form Editar´; FrmEditar.Name := ´FrmEditar; FrmEditar.Show; end;
e no onclose do TForm2 eu fiz um case, e dentro de cada caso eu fiz uma finalização diferente... (proposta pra cada variavel no meu Unit1....)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)