Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-02-2010
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Crear instancias de objetos creados con TPanel

Hola, no sé si me he explicado muy bien, no sabía hacerlo mejor.

Quiero mostrar información de una determinada forma: una imagen y un texto (una portada de una película y un título, respectivamente), para ello en un formulario (lo he llamado FrmObjetosCTP) he creado un panel que contiene un TPanel (llamado PnlPrevPelícula) y dentro de este hay un TImage y un TLabel.
Ahora lo que me gustaría es, desde otro formulario, crear múltiples instancias de este panel para poder mostrar este tipo de información todas las veces que sea necesario.

Quizá no sea la manera de hacerlo, nunca antes había intentado hacer algo así.

He intentado crearlo dentro de un TScrollBox (ScBPelículasAbiertas) mediante este código, pero no funciona:
Código:
FrmObjetosCTP.PnlPrevPelícula.Create(ScBPelículasAbiertas);
También lo he intentado creando una variable intermedia:
Código:
var
  NuevaPev: TPanel;
begin
  PnlPelículasAbiertas.Visible:=True;
  NuevaPev:=PnlNuevaPelícula.Create(ScBPelículasAbiertas);
end;
Me he dado cuenta de que PnlPrevPelícula es un objeto y no una clase, así que supongo que ese es el problema.

También quería hacer con estas una lista doblemente enlazada para poder hacer referencia entre ellas y poder eliminarlas cuando fuera necesario, pero no sé cómo crear variables ligadas a este objeto, ya que lo que he creado no es en realidad una clase, creo que me queda mucho que aprender en este tema.

Un saludo y gracias por vuestro tiempo.
Responder Con Cita
  #2  
Antiguo 26-02-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Si te he entendido bien, deberías utilizar un "marco" (TFrame). Los TFrame son como los TForm, la diferencia está en que los marcos los puedes crear dentro de otro marco o de una ventana, o incluso dentro de un TScrollBox.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 26-02-2010
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Creo que sí es eso lo que busco, lo estoy intentando, pero al crearlo no me aparece, he intentado también crearlo en un formulario nuevo, por si acaso era problema de crearlo dentro del ScrollBox, con este código;

Código:
var
  NuevaPrev: TObjPrevPelicula;
begin
  NuevaPrev:=TObjPrevPelicula.Create(Self);
end;
La primera vez lo crea (pero no se ve), la segunda vez que se llama a la función dice que ya existe un objeto con ese nombre.

Gracias por la respuesta tan rápida.
Responder Con Cita
  #4  
Antiguo 26-02-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Quizá estás olvidandote de asignar el contenedor (Owner) del objeto. Prueba esto:
Código Delphi [-]
var
  NuevaPrev: TObjPrevPelicula;
begin
  NuevaPrev:=TObjPrevPelicula.Create(Self);
  NuevaPrev.Owner := SELF;
end;

Estoy suponiendo que TObjPrevPelicula es un componente visual y que SELF es una ventana TForm. Si el contenedor no es la ventana, entonces debes asignar al Owner el objeto que sea (por ejemplo un panel, el ScrollBox, etc).
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #5  
Antiguo 26-02-2010
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Puede ser que sea eso, pero me da error al compilar, dice que la propiedad Owner es de sólo lectura...
Responder Con Cita
  #6  
Antiguo 26-02-2010
Avatar de DarkMan
DarkMan DarkMan is offline
Miembro
 
Registrado: jul 2006
Posts: 102
Poder: 18
DarkMan Va por buen camino
La propiedad owner la estas especificando en la creación del componente:
Código Delphi [-]
NuevaPrev:=TObjPrevPelicula.Create(Self);
El único parámetro de Create en los objetos visuales es owner.

Cita:
Me he dado cuenta de que PnlPrevPelícula es un objeto y no una clase"
En delphi, los objetos son considerados la clase mínima, por lo que todas las clases son objetos o derivan de ellos.

Tal vez deberías jugar con el parámetro "Parent" que es en el que puedes especificar la ventana padre del componente. Esta propiedad no es de solo lectura, por lo que puedes cambiarla en el momento que tu quieras.

Para encapsular los tres componentes dentro de un TPanel, tal vez deberías crear una clase o componente secundario derivado de TPanel conteniendo dichos componentes dentro.
No puedes usar el TPanel creado en un TForm, ya que los objetos que hay dentro del TPanel están definidos dentro de la clase TForm y no de la clase TPanel.

Un saludo.
__________________
"La recompensa de una buena acción está en haberla hecho"
Responder Con Cita
  #7  
Antiguo 26-02-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por Kandorf Ver Mensaje
La primera vez lo crea (pero no se ve)
Hola Kandorf, es porque debes asignarle un Parent como te han indicado, en tu caso el Parent sería el ScrollBox.

Cita:
Empezado por Kandorf Ver Mensaje
la segunda vez que se llama a la función dice que ya existe un objeto con ese nombre.
Esto es porque tampoco le estas asignando un nombre unico a cada instancia, para dejar que delphi te ponga los nombres, en su propiedad name le asignas vacio (''), si quieres ponerle tu los nombres puedes utilizar un contador e ir concatenando cada ves que crees un nuevo Frame.

Código Delphi [-]
var
  NuevaPrev: TObjPrevPelicula;
begin
 NuevaPrev := TObjPrevPelicula.Create(Self);
 NuevaPrev.Name := '';
 NuevaPrev.Parent := ScrollBox1;
 NuevaPrev.Top := aTop;
 Inc(aTop, 100);
end;

aTop lo inicializas en 0.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 27-02-2010
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Sois la leche! Funciona todo perfectamente, era cosa el Parent, gracias también por todos vuestros consejos, por vuestra rapidez y por entendernos aunque nos expresemos a nuestra manera ^^

Saludos.
Responder Con Cita
  #9  
Antiguo 02-03-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por Kandorf Ver Mensaje
Puede ser que sea eso, pero me da error al compilar, dice que la propiedad Owner es de sólo lectura...
¡Ooops! Vaya despiste. Quise decir "Parent". Eso. Bueno, ya te lo han explicado y lo has solucionado, así que ya lo sabes.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
Respuesta



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
Problema con limite de instancias de objetos (TBitBtn) nuk3zito OOP 31 08-12-2008 22:07:20
duda al crear un descendiente de tpanel hibero OOP 1 23-05-2008 21:07:52
Recorrer todos los objetos creados de una clase propia mierda OOP 1 25-10-2007 19:52:10
Compartir "objetos" entre varias instancias mafebresv Varios 4 16-01-2006 23:38:23
Objetos creados en tiempo de ejecución Scocc OOP 4 13-06-2003 20:55:29


La franja horaria es GMT +2. Ahora son las 22:16:42.


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