Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Como saber si un Formulario ha sido creado (https://www.clubdelphi.com/foros/showthread.php?t=25964)

Durbed 09-10-2005 18:52:33

Como saber si un Formulario ha sido creado
 
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:
Código Delphi [-]
implementation

uses { Lista de unidades... }, N1Unit;
ya con esto puedes hacer lo que te indican arriba:
Código Delphi [-]
if Assigned(N1) then
  // ...

2. Crear procedimientos o propiedades en el formulario N2 que permitan al formulario padre saber si ya está creado N1:
Código Delphi [-]
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:
Código Delphi [-]
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;

Código Delphi [-]
 
 
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.


La franja horaria es GMT +2. Ahora son las 13:46:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi