Ver Mensaje Individual
  #2  
Antiguo 16-05-2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Reputación: 24
maeyanes Va por buen camino
Hola...

Como bien comentas, puedes hacer uso de la clase TObjectList:

Código Delphi [-]
var
  NoteForm: TFrmVerNota;

begin
  NoteForm := TFrmVerNota.Create(nil);
  // Usas la variable NoteForm para asignar propiedades. Ej:
  NoteForm.Caption := 'Something';
  // FNotes sería un objecto de tipo TObjectList
  FNotes.Add(NoteForm)
end;

// Para referenciar un objeto guardado en el TObjectList:
var
  NoteForm: TFrmVerNota;

begin
  NoteForm := FNotes[i] as TFrmVerNota;
  
  // O de esta forma:
  NoteForm := TFrmVerNota(FNotes[i])
end;

Ahora, si usas Delphi 2010 o superior, podrías usar la clase genérica TObjectList<T>:

Código Delphi [-]
uses
  Generics.Collections;

// Se declara y crea un objecto del tipo TObjectList< TFrmVerNota >:
  FNotes := TObjectList< TFrmVerNota > .Create;

// Se usa este objecto en tu método:
FNotes.Add(TFrmVerNota.Create(nil));

// Al ser un TObjectList que contiene elementos del tipo TFrmVerNota, puedes hacer lo siguiente:
FNotes[FNotes.Count - 1].Caption := 'Something';
FNotes[FNotes.Count - 1].Show

// O usar la forma anterior:
var
  NoteForm: TFrmVerNota;

begin
  NoteForm := TFrmVerNota.Create(nil);
  NoteForm.Caption := 'Something';
  NoteForm.Shot;
  FNotes.Add(NoteForm)
end;

Sobre el liberar el formulario al cerrarlo, tendrías que usar el evento OnClose poniendo el valor de la variable Action en caFree:

Código Delphi [-]
procedure TFrmVerNota.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  // Aquí podrías eliminar el formulario del objeto TObjectList:
  FNotes.Remove(Self)
end;

// Para hacer lo anterior, tendrías que declarar una propiedad en la clase TFrmVerNota en la cual le pases el objeto:
type
  TFrmVerNota = class(TForm)
  private
    FNotes: TObjectList< TFrmVerNota >; // O solo TObjectList
  public
    property FNotes: TObjectList< TFrmVerNota >
      read FNotes
      write FNotes;
  end

// Al crear el formulario haces algo como:
FNotes.Add(TFrmVerNota.Create(nil));
FNotes[FNotes.Count - 1).Notes := FNotes;
// ...
FNotes(FNotes.Count - 1).Show


Espero que con esta pequeña explicación se resuelva tu problema.


Saludos...

Nota: Donde veas < TFrmVerNota > debes ponerlo todo sin espacios, esto lo hice así por que el foro elimina el contenido de <TFrmVerNota> si lo escribo todo junto.
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter

Última edición por maeyanes fecha: 16-05-2013 a las 16:21:42.
Responder Con Cita