Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-06-2008
Luis Abraham Luis Abraham is offline
Miembro
 
Registrado: oct 2003
Ubicación: Guadalajara, Jalisco, México
Posts: 16
Poder: 0
Luis Abraham Va por buen camino
Question Agregar objetos a un GridPanel en tiempo de ejecución

Hola Foro!

Desde hace algunos días he estado tratando de generar una "tabla" de botones usando un GridPanel pero desgraciadamente no he dado con el clavo de como hacerlo en tiempo de ejecución.

Hasta ahora solo he podido aumentar el numero de columnas y filas así como modificar sus tamaños en tiempo de ejecución, pero lo mas importante, que es crear los botones o cualquier otro objeto en sus celdas, no lo he podido hacer.

Por desgracia la ayuda del Delphi 2007 deja mucho que desear y no trae documentación al respecto, tampoco he encontrado información en Internet, así que si alguien ya pasó por esto y encontró como hacerlo le agradecería muchísimo que me echarla la mano.

Lo que me agrada mucho del GridPanel son sus propiedades de resize, pero no estoy cerrado a usar este componente solamente, así que si alguien sabe de alguna otra forma alternativa de hacerlo pues también sera bienvenida.

Gracias de antemano y un saludo para todos!
__________________
Saludos desde Guadalajara, Jalisco, México
Responder Con Cita
  #2  
Antiguo 23-06-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
hola. Prueba esto a ver si te sirve...

Código Delphi [-]
...
  public
    { Public declarations }
    obj : array of TButton;
    idx : integer;
...

procedure TForm1.Button1Click(Sender: TObject);
var
        cnt : integer;
begin
        SetLength(obj,idx+1);
        try
        obj[idx] := TButton.Create(self);
        obj[idx].Name := 'boton'+inttostr(idx);
        obj[idx].Parent := self;
        obj[idx].Left := (sender as TButton).Left + 10;
        obj[idx].Top  := (sender as TButton).Top + 10;
        obj[idx].Width := (sender as TButton).Width;
        obj[idx].Height := (sender as TButton).Height;
        obj[idx].Caption := Obj[idx].Name;
        obj[idx].Visible := true;
        obj[idx].Enabled := true;
        obj[idx].OnClick := (sender as TButton).OnClick;
        ShowMessage(obj[idx].Caption);
        inc(idx);
        except
        raise exception.Create('error creando nuevo boton');
        end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
        SetLength(obj,1);
        idx := 0;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
        i : integer;
begin
        for i := idx - 1 to 0 do
        obj[i].free;

        setlength(obj,0);
end;

es probable, no obstante, que haya maneras mas elegantes.

saludos

PD : releyendo, vi que es un 'GridPanel' y no un 'Panel'. No conozco ese componente asi que quiza este codigo no te sirva. Bueno, igualmente te lo dejo por si sí lo hace

Última edición por coso fecha: 23-06-2008 a las 19:30:01.
Responder Con Cita
  #3  
Antiguo 25-06-2008
Luis Abraham Luis Abraham is offline
Miembro
 
Registrado: oct 2003
Ubicación: Guadalajara, Jalisco, México
Posts: 16
Poder: 0
Luis Abraham Va por buen camino
Hola coso, muchas gracias por tu ejemplo, me es muy útil también para este caso.

Por otra parte, ya encontré como agregar componentes al GridPanel en tiempo de ejecución, aquí les dejo un ejemplo, solo necesitan un TGridPanel con 4 Columnas x 4 Renglones y un TButton:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var miBoton: TButton;
begin
   miBoton:= TButton.Create(Self);
   miBoton.Align:= alClient;
   miBoton.Name:= 'Boton' + IntToStr(Button1.Tag);
   miBoton.Caption:= miBoton.Name;
   Button1.Tag:= Button1.Tag+ 1;

   GridPanel1.ControlCollection.AddControl(miBoton, 0, -1);
   miBoton.Parent:= GridPanel1;
end;

Sin embargo, esta historia sigue sin tener un final feliz, ya que, hay un bug en el procedimiento TControlCollection.AddControl(AControl: TControl; AColumn, ARow: Integer) del unit ExtCtrls.pas el cual puede ser arreglado invirtiendo los indices Row y Column, pero el problema ahora es que no tengo ese archivo, solo tengo el archivo ya compilado (ExtCtrls.dcu) .

¿Alguna idea de donde lo puedo encontrar para aplicar el Workaround?

*Nota: Para mas información sobre el bug, vea la siguiente liga.

Saludos!
__________________
Saludos desde Guadalajara, Jalisco, México

Última edición por Luis Abraham fecha: 25-06-2008 a las 04:34:07.
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
Crear Objetos en tiempo de ejecucion mmtaffarel OOP 8 14-01-2024 17:55:25
Dudas Crear Objetos en Tiempo de Ejecución Deiv OOP 9 09-08-2007 01:13:15
agregar una atributo en tiempo de ejecución seken Conexión con bases de datos 6 21-10-2004 23:21:03
Objetos creados en tiempo de ejecución Scocc OOP 4 13-06-2003 20:55:29
Agregar una impresora en tiempo de ejecucion fanon Impresión 1 26-05-2003 10:16:20


La franja horaria es GMT +2. Ahora son las 20:31:07.


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