Dar nil em Form

Delphi

26/10/2005

Olá,

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

Giordanok

Curtidas 0

Respostas

Aerreira

Aerreira

26/10/2005

Não sei ao certo, mas talvez:

if Assigned(formx) then
Formx := Nil;


GOSTEI 0
Aerreira

Aerreira

26/10/2005

Como eu faço isso para dar o nil na variável formx e formy sem ter que colocar diretamente ´formx := nil´??


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
Massuda

Massuda

26/10/2005

...estou usando Self := nil...
Isso não funciona porque Self funciona como uma variável local da procedure/function, não tendo qualquer relação com a variável que você está usando em todo o programa para fazer referência ao form.


GOSTEI 0
Fx|hand

Fx|hand

26/10/2005

Bom... naumm sei se vai funcionar pra vc, mais lembro de ter feito issu uma vez, eu usei o msm formulario pra varias coisas, e o usuario poderia abrir varias instancias dele....

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
POSTAR