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 04-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Crear evento a un componente creado en ejecución

Hola compañeros, vengo con esta pequeña duda, estoy creando componentes en tiempo de ejecución, ¿existe alguna forma de crearle un evento como OnClick y llamarlo?.

Saludos.

EDITO: se me olvidó el código:

Código Delphi [-]
constructor TPanel1.Create(aOwner: TComponent);
begin
   inherited;
   with TLabel.Create(aOwner) do
   begin
      Parent := Self;
      Caption := ID;
      Font.Name := 'Tahoma';
      Font.Size := 8;
      Font.Color := clBlack;
      Top := 0;
   end;
   with TLabel.Create(aOwner) do
   begin
      Parent := Self;
      Caption := AUTOR;
      Top := 30;
   end;
   with TImage.Create(aOwner) do
   begin
      Parent := Self;
      Align := alClient;
      Picture.LoadFromFile(FOTO);
      Stretch := True;
   end;
   Width := 200;
   Height := 200;
end;
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.

Última edición por enecumene fecha: 04-10-2008 a las 00:17:33.
Responder Con Cita
  #2  
Antiguo 04-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues sí claro,

Código Delphi [-]
TuComponente.OnClick := ComponenteClick;

donde ComponenteClick es un método que tú defines explícitamente:

Código Delphi [-]
TForm1 = class(TForm)
private
  procedure ComponentClick(Sender: TObject);
end;

// Saludos
Responder Con Cita
  #3  
Antiguo 04-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Gracias Roman, justamente estaba probando este método que comentas, en unos minutos te comento como me va.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #4  
Antiguo 04-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Bueno volví rápido, me entró una duda, por ejemplo, en este pedazo de código donde se crea el componente TImage bajo TPanel1:

Código Delphi [-]
constructor TPanel1.Create(aOwner: TComponent);
begin
   inherited;
   with TLabel.Create(aOwner) do
   begin
      Parent := Self;
      Caption := ID;
      Font.Name := 'Tahoma';
      Font.Size := 8;
      Font.Color := clBlack;
      Top := 0;
   end;
   with TLabel.Create(aOwner) do
   begin
      Parent := Self;
      Caption := AUTOR;
      Top := 30;
   end;
   with TImage.Create(aOwner) do
   begin
      Parent := Self;
      Align := alClient;
      Picture.LoadFromFile(FOTO);
      Stretch := True;
      Onclick := Click;
   end;
   Width := 200;
   Height := 200;
end;

¿El procedure lo creo fuera del constructor o dentro o entre begin...end del Timage?, disculpa mi ignorancia.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #5  
Antiguo 04-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Recuerda que Delphi no es un lenguaje de esos interpretados que hay por ahí No puedes crear funciones durante la ejecución. El evento debes declararlo como te comenté anteriormente, en la declaración del formulario, e implementarlo en la zona interface.

// Saludos
Responder Con Cita
  #6  
Antiguo 04-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Gracias Roman, pero ahora tengo otro problema, dentro del panel se crean dos labels (TLabel), y ahora no logro llamar el caption de uno específico :

Código Delphi [-]
procedure TFMain.Click(Sender: TObject);
begin
  Panel2.Caption := ???;
end;

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #7  
Antiguo 04-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Intenté este otro código aún no me funciona:
Código Delphi [-]
for I := 0 to FMain.ComponentCount - 1 do begin
//destruye los componentes creados
if FMain.Components[i] is TFrame1 then
    TFrame1(FMain.Components[i]).Destroy;
//

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #8  
Antiguo 05-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Si están dentro del Scrollbox, creo que seria Scrollbox.Controls[i].Free (obviamente el bucle es sobre scrollbox.controls.count -1)

Destroy se usa cuando diseñas el componente, pero no se debe llamar nunca, hay que usar Free.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 05-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
¿Sin importar que están dentro a través del parent?.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #10  
Antiguo 05-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Bueno haciendo la modificación con tu consejo Lepe:
Código Delphi [-]
var I: Integer;
begin
for I := 0 to FMain.ScrollBox1.ControlCount do begin
//destruye los componentes creados
if FMain.ScrollBox1.Controls[i] is TFrame then
    TFrame(FMain.ScrollBox1.Controls[i]).Free;
//

Error:
Cita:
---------------------------
Debugger Exception Notification
---------------------------
Project Vellonera.exe raised exception class EListError with message 'List index out of bounds (3)'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
En el Scrollbox tenía seis frame y sólo destruyó 3 intercalados y no completó el código.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #11  
Antiguo 05-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por enecumene Ver Mensaje
Bueno haciendo la modificación con tu consejo Lepe:
Código Delphi [-]var I: Integer; begin for I := 0 to FMain.ScrollBox1.ControlCount do begin //destruye los componentes creados if FMain.ScrollBox1.Controls[i] is TFrame then TFrame(FMain.ScrollBox1.Controls[i]).Free; //


Error:


En el Scrollbox tenía seis frame y sólo destruyó 3 intercalados y no completó el código.

Saludos.
Hola enecumene, Por la descripción del error y el código intuyo que se debe a que te faltó restar 1 a ControlCount.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #12  
Antiguo 09-10-2008
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Thumbs up

Hola enecumene prueba con esto:
Código Delphi [-]
for I := 0 to FMain.ComponentCount - 1 do begin
//destruye los componentes creados
if FMain.Components[i] is TFrame1 then
    TFrame1(FMain.Components[i]).Free;
//

Saludos....
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #13  
Antiguo 09-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Gracias rgstuamigo, la solución de Delphius me resolvió el problema, de todos modos te agradezco tu ayuda

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #14  
Antiguo 09-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Ahora se me presenta otra duda, en los frames que se crean y se eliminan en tiempo de ejecución tienen una imagen con su propiedad visible en False, que sólo se presentará al darle click a otra imagen, ¿qué sucede?, al darle click a las demás imágenes se presenta esa imagen sin lograr que las demás vuelvan al estado de visibilidad a False. Para mejor apreciación adjunto una imagen:



como pueden ver las figuras 1, 2 y 3, al dar click una imagen aparece la figura 1, pero al dar la siguiente imagen aparece la figura 2 pero no desaparece la figura1 y así sucesivamente, como se trata de un ciclo y hay dos TImage en el frame no sabría cómo llegarle al asunto.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #15  
Antiguo 10-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Al final vas a necesitar una lista. Es como un Listbox, que al poner su propiedad Seletected := 3, deselecciona el anterior y selecciona el nuevo.

Puedes heredar de un TObjectList e implementarlo, te será fácil y muy cómodo de mantener el código. Podrías tener una variable global que indique el elemento seleccionado, pero con el tiempo se te complicará.

La lista, también te permitiría liberar todos los componentes sin tener que recorrer los controles del scrollbox.

Busca en el foro, hay mucho sobre TObjectList, así como en la propia ayuda de windows.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #16  
Antiguo 10-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Muchas gracias Lepe, ahora mismo lo verifico

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
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
como crear un boton en ejecucion y ponerle un evento jeremiselxi Varios 6 24-09-2008 20:34:40
Como saber si me frame esta creado en cierto evento? Albano OOP 2 15-03-2007 23:13:44
ayuda con boton creado dinamicamente y sus evento cureham OOP 1 13-09-2006 09:39:14
Crear componente Image en tiempo d Ejecucion Jessica666 Gráficos 6 30-05-2004 01:58:22
asignar evento a control creado dinamicamente jorgeganc Varios 4 17-12-2003 02:47:51


La franja horaria es GMT +2. Ahora son las 07:21:27.


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