Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-08-2013
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Indice de un objeto dentro de un ObjectList

Hola, a ver si podéis ayudarme con un pequeño ejemplo:

Si se crean varias instancias de una determinada clase que se asignan a un ObjectList,

¿Desde el propio código de una de las instancias creadas, se puede conocer su posición en el ObjectList?, o ¿habría que guardar dicha posición al crear la instancia en cuestión?.

Gracias de antemano
Responder Con Cita
  #2  
Antiguo 12-08-2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Podrías saberlo si en la clase tienes alguna forma de hacer referencia al TObjectList en cuestión, de otra forma, tendrías que crear una propiedad donde guardes ese índice:

Código Delphi [-]
// 1era opción:
TMyObject = class(TObject)
private
  FObjectList: TObjectList;

  function GetIndex: Integer;
public
  property ObjectList: TObjectList read FObjectList write FObjectList;
  property Index: Integer read GetIndex;
end;

implementation

function TMyObject.GetIndex: Integer;
begin
  if Assigned(FObjectList) then
    Result := FObjectList.IndexOf(Self)
  else
    Result := -1
end;

// Ejemplo:
MyObject := TMyObject.Create;
MyObject.ObjectList := AObjectList;
AObjectList.Add(MyObject);

// 2da opción:
TMyObject = class(TObject)
private
  FIndex: Integer;
public
  property Index: Integer read FIndex write FIndex;
end;

// Ejemplo:
MyObject := TMyObject.Create;
MyObject.Index := AObjectList.Add(MyObject);


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #3  
Antiguo 14-08-2013
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Hola Maeyanes.

En mi caso, desde la unidad principal, creo una instancia de TObjectList y voy generando instancias de la clase TNotas, que añado al ObjectList.

¿Es válida mi forma de plantearlo? ¿Existen alternativas mas correctas, simples o elegantes de hacerlo?. Gracias por tu ayuda.

El ejemplo del código usado es el siguiente:

Código Delphi [-]
unit SDIMAIN;

interface

uses Windows, Messages, Classes, Graphics, Forms, Controls, Menus, Dialogs,
// etc

type

  TSDIAppForm = class(TForm)
      procedure EstablecerInicio(Sender: TObject);

  // etc

var
  SDIAppForm: TSDIAppForm;

 { Ventanas de notas }
  objVentNot: TObjectList;

implementation

uses BasDat, 
// etc


{$R *.dfm}

procedure TSDIAppForm.EstablecerInicio(Sender: TObject);
begin

  objVentNot := TObjectList< TNota > .Create(False);

  { Creación de form para ver una nota (se crea un form cada vez que se
    selecciona ver una nota) }

  objVentNot.Add(TNota.Create(nil));

  { Asignar puntero a propiedad publica de la clase FNota }
  objVentNot[objVentNot.Count - 1].pVentNot := objVentNot;

  objVentNot[objVentNot.Count - 1].Show;
  
end;

end.

Código Delphi [-]
unit VerNota;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
  // etc

type
  TNota = class(TForm)
    RVVerNota: TRichView;
    //etc.
    
  private
    { Private declarations }
    objVentNot: TObjectList< TNota >; // O solo TObjectList
    iNota: Integer; // Indice de la nota dentro del ObjectList
  public
    { Public declarations }
    property pVentNot: TObjectList< TNota >
      read objVentNot
      write objVentNot;
  end;

var
  Nota: TNota;

implementation

{$R *.dfm}

procedure TNota.FormActivate(Sender: TObject);
begin
  iNota := objVentNot.IndexOf(Self);
end;

procedure TNota.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  objVentNot.Remove(Self);
end;

procedure TNota.btnCopiarTextoPlanoClick(Sender: TObject);
begin
  RVVerNotaCopiarTextoPlano();
end;

procedure TNota.btnDchoCopiarTextoPlanoClick(Sender: TObject);
begin
  RVVerNotaCopiarTextoPlano();
end;

procedure TNota.RVVerNotaCopiarTextoPlano();
begin
  objVentNot[iNota].RVVerNota.CopyTextA;
end;

end.
Responder Con Cita
  #4  
Antiguo 14-08-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jocaro.

Si la clase TNotas es de tipo TForm, en lugar de crear un TObjectList para gestionarlos, ¿ No te sirve usar la variable global Screen ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 15-08-2013
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Cita:
Si la clase TNotas es de tipo TForm, en lugar de crear un TObjectList para gestionarlos, ¿ No te sirve usar la variable global Screen ?
Hola ecfisa.

Probaré con Screen.

Gracias y un saludo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear un Objeto dentro de un Panel sancarlos OOP 24 21-07-2008 15:59:51
Crear objetos dentro de otro objeto. Nieto OOP 5 29-11-2007 00:09:12
Utilizar propiedad dentro de un objeto senpiterno Varios 4 21-04-2004 19:53:32
Poner en tiempo ejecución un objeto dentro de cesar_picazo Varios 1 27-03-2004 17:25:32
colocar un objeto dentro de un StringGrid oneromm Varios 2 27-12-2003 14:45:47


La franja horaria es GMT +2. Ahora son las 16:20:18.


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
Copyright 1996-2007 Club Delphi