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


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-03-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.372
Poder: 12
duilioisola Va camino a la famaduilioisola Va camino a la fama
Frames creados dinamicamente no se ven

Hola a todos!

Tengo un formulario que tiene un panel llamado PNLFiltro.
Tengo un Frame llamado FRMFiltro que tiene un Label y unos Edits para rellenar los parámetros de filtrado.

Debo crear dinámicamente tantos filtros como índices tenga.

El problema es que los crea, pero no se ven.

Este es el procedimiento que utilizo para crearlos.

Código Delphi [-]
procedure TFMConsultaLotes.EFTipoLoteChange(Sender: TObject);
var
  tsCodigo, tsTitulo, tsIDIndice : TStrings;
  i : integer;
  aFiltro : TFRMFiltro;
begin
  inherited;
  ETituloTipoLote.Text := DMMain.DameTituloTipoLote(EFTipoLote.Text);

  {Aqui debe cargar los filtros}
  tsCodigo := TStringList.Create;
  tsTitulo := TStringList.Create;
  tsIDIndice := TStringList.Create;
  try
     DMMain.RellenaIndices(EFTipoLote.Text, tsCodigo, tsTitulo, tsIDIndice);
// ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
// ***** AQUI EMPIEZA LO IMPORTANTE ** ***** ***** ***** ***** ***** *****
     //Primero borro los filtros anteriores
     with PNLFiltro do
     begin
        // La segunda vez pasa por aquí, por lo que se que se crean los frames
        for i := 0 to ComponentCount - 1 do
           if (Components[i] is TFRMFiltro) then
              Components[i].Free;
     end;

     // Ahora creo los frames con los filtros
     for i := 0 to tsCodigo.Count - 1 do
     begin
        aFiltro := TFRMFiltro.Create(PNLFiltro);
        aFiltro.CargaCampos(tsTitulo[i], StrToIntDef(tsIDIndice[i], 0));
        aFiltro.Align := alTop;
         // He probado con estas opciones, pero no reacciona
        aFiltro.Visible := True;
        aFiltro.Show;
        aFiltro.BringToFront;
     end;
     // Esto tampoco soluciona el problema
     PNLFiltro.Repaint;
// ***** AQUI TERMINA LO IMPORTANTE ** ***** ***** ***** ***** ***** *****
// ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
  finally
     tsCodigo.Free;
     tsTitulo.Free;
     tsIDIndice.Free;
  end;
end;

Última edición por duilioisola fecha: 11-03-2011 a las 10:12:43.
Responder Con Cita
  #2  
Antiguo 11-03-2011
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: 5.608
Poder: 18
Ñuño Martínez Va camino a la famaÑuño Martínez Va camino a la fama
Creo que no los dibuja porque no les dices dónde tienen que dibujarse. Le dices qué componente es el propietario ("Owner") en el constructor, pero después tienes que asignar la propiedad "Parent", que es donde dibujará el TFrame. Asumiendo que lo vas a dibujar en el mismo objeto que lo contiene, sería:
Código Delphi [-]
    aFiltro.parent := PNLFiltro;

El "Owner" únicamente se encarga de mantener al objeto, de destruirlo cuando convenga, pero no de dibujarlo.
__________________
Proyectos actuales --> Burdjia Components|http://gesbit.sf.net/
Responder Con Cita
  #3  
Antiguo 11-03-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.372
Poder: 12
duilioisola Va camino a la famaduilioisola Va camino a la fama
Es verdad!
Gracias Ñuñu... nunca lo hubiera adivinado...
Además, si creas más de uno, le debes asignar un nombre.

Al final queda así:

Código Delphi [-]
procedure TFMConsultaLotes.EFTipoLoteChange(Sender: TObject);
var
  tsCodigo, tsTitulo, tsIDIndice : TStrings;
  i : integer;
  aFiltro : TFRMFiltro;
begin
  inherited;
  ETituloTipoLote.Text := DMMain.DameTituloTipoLote(EFTipoLote.Text);

  {Aqui debe cargar los filtros}
  tsCodigo := TStringList.Create;
  tsTitulo := TStringList.Create;
  tsIDIndice := TStringList.Create;
  try
     DMMain.RellenaIndices(EFTipoLote.Text, tsCodigo, tsTitulo, tsIDIndice);
     //Primero borro los filtros anteriores
     with PNLFiltro do
     begin
        for i := ComponentCount - 1 downto 0 do
           if (Components[i] is TFRMFiltro) then
              Components[i].Free;
     end;

     // Ahora creo los frames con los filtros
     for i := 0 to tsCodigo.Count - 1 do
     begin
        // Creo una nueva instancia del Frame.
        // Se crea con un nombre generico y sin Parent
        aFiltro := TFRMFiltro.Create(PNLFiltro);
        // Cambio el nombre porque todos se crean con el mismo.
        aFiltro.Name := 'FRMFiltro'+IntToStr(i + 1);
        // Asigno Parent, para que se vea en este panel
        aFiltro.Parent := PNLFiltro;
        // Lo ubico en la ultima linea del panel
        aFiltro.Top := PNLFiltro.Height;
        // Lo alineo al Top, para que quede pegado al anterior
        aFiltro.Align := alTop;
        aFiltro.CargaCampos(tsTitulo[i], StrToIntDef(tsIDIndice[i], 0));
     end;
  finally
     tsCodigo.Free;
     tsTitulo.Free;
     tsIDIndice.Free;
  end;
end;
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
Campos creados dinámicamente clientdataset sur-se Varios 6 18-10-2010 08:43:33
Crear Frames dinamicamente iktwo Varios 7 18-09-2010 01:30:51
Cerrar dos formularios creados dinamicamente (al mismo tiempo) ctronx Varios 7 02-09-2004 00:19:04
cerrar formularios creados dinamicamente ctronx Varios 5 17-06-2004 18:25:17
Campos creados dinámicamente vs creados estáticamente Jose_Pérez Conexión con bases de datos 2 14-04-2004 11:34:03


La franja horaria es GMT +2. Ahora son las 19:53:13.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi