PDA

Ver la Versión Completa : Como saber si un Formulario ha sido creado


Durbed
09-10-2005, 18:52:33
Necesito saber si dentro de mi aplicacion MDI, hay un formulario en concreto creado.

Gracias

vtdeleon
09-10-2005, 18:53:59
Saludos

Prueba con:
If Assigned(form) then
.....

Durbed
10-10-2005, 15:18:56
Eso no me funciona, a ver si me explico mejor: El formulario hijo que necesito saber si ha sido creado, lo creo desde otra ventana hija, pero la comprobacion la necesito hacer desde el formulario madre.

Gracias

vtdeleon
10-10-2005, 15:33:35
Saludos

Ahora no entendí.

Si llamas al formulario hijo desde otro similar, cómo piensas comprobarlo con el padre??? Con un Timer??

Realmetne no entiendo

Durbed
10-10-2005, 15:53:27
La cuestion es que el formulario hijo N1 lo creo desde el formulario hijo N2. Pero ahora he puesto un componente que visualiza los ficheros de un directorio, ese componente esta puesto sobre el fondo del formulario Padre, y quiero que al picar sobre un archivo de dicho componente, mire si el form N1 esta creado y en ese caso capturar el nombre del fichero.

Por eso necesito saber desde el Form Padre si el Form N1 esta creado. Si sirve de algo, el Form N2 siempre esta creado y no se puede cerrar, es decir que siempre existe mientras dure la ejecucion de la aplicacion.

Gracias de nuevo.

maeyanes
10-10-2005, 16:07:15
Tienes varias opciones, aquí te doy unas:

1. Agregar la unidad del formulario N1 a la claúsula uses del formulario padre:

implementation

uses { Lista de unidades... }, N1Unit;

ya con esto puedes hacer lo que te indican arriba:

if Assigned(N1) then
// ...


2. Crear procedimientos o propiedades en el formulario N2 que permitan al formulario padre saber si ya está creado N1:

TN2 = class(TForm)
private
//...
protected
//...
public
function IsN1Created: Boolean;
procedure SetFileNameN1(const AFileName: string);
end;

implementation

uses N1Unit;

function TN2.IsN1Created: Boolean;
begin
Result := Assigned(N1)
end;

procedure TN2.SetFileNameN1(const AFileName: string);
begin
if IsN1Created then
N1.Labe1.Caption := AFileName
end;

y desde el formulario padre:

begin
if N2.IsN1Created then
N2.SetFileNameN1(FileBox1.FileName);
//...
end;


Espero que algo de esto te sirva...



Saludos...

Durbed
13-10-2005, 11:04:36
Ninguna de esas soluciones me funciono, gracias de todas formas, al final lo he conseguido con dos variables y un timer, asi cuando creo la ventana hija el timer empieza a comprobar en la variables (Estan en una unidad comun a toda la aplicacion) si la ruta del fichero se ha actualizado.

Un saludo y gracias.

rounin
13-10-2005, 13:06:28
Saludos,

Si solo un exemplar de TN1 puede existir,
deja la clase TN1 ser responsable de la existencia de exemplar.

if TN1.IsExemplarCreate then ...
//TN1.UniqueExemplar.DoSomething;



type
TN1 = class(TForm)
private
{ Private declarations }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
class function UniqueExemplar: TN1;
class function IsExemplarCreated: Boolean;
end;

//var
// N1: TN1;

implementation
{$R *.dfm}

var
theUniqueExemplar: TN1;

constructor TN1.Create(AOwner: TComponent);
begin
inherited;
if theUniqueExemplar = nil then
theUniqueExemplar := Self else
raise Exception.Create('Only one exemplar of TN1 is allowed');
end;

destructor TN1.Destroy;
begin
theUniqueExemplar := nil;
inherited;
end;

class function TN1.IsExemplarCreated: Boolean;
begin
Result := Assigned(theUniqueExemplar);
end;

class function TN1.UniqueExemplar: TN1;
begin
if not IsExemplarCreated then {theUniqueExemplar := } TN1.Create(Application);
Result := theUniqueExemplar;
end;



PS Es no buen estilo usar variables globales para
MDI-formularios, porque frequente hay mas que un ejemplar.