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 17-01-2007
david.rguez david.rguez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Zamora, la bien cercada
Posts: 104
Poder: 18
david.rguez Va por buen camino
Creación dinámica de componentes

Hola a todos/as:

Estamos intentando que un formulario extraiga una serie de información de una base de datos referente a imágenes y las muestre en dicho formulario. No podemos saber, en tiempo de diseño, cuántos elementos van a ser.

En diversos posts de este foro he encontrado gente explicando cómo se hace. He probado a seguir esos pasos, pero no me funciona bien.

Este es mi código:

Código Delphi [-]

tadepo.Open;
i:= 0;
imagenB:= TBitmap.Create;

    while tadepo.Eof = false do
    begin
        tadepo.Next;
        // Recuperamos los datos
        imagen:= tadepoimagen.Value;
        porcentaje:= tadepoporcentaje.Value;
        x:= tadepox.Value;
        y:= tadepoy.Value;

        imagenB.LoadFromFile(ExtractFilePath(Application.ExeName) + 'imagenes\' + Trim(imagen));

        imag:= TImage.Create(Self);
        imag.Name:= 'deposito'+IntToStr(i);
        imag.Parent:= Self;
        imag.Width:= 150;
        imag.Height:= 150;
        imag.Picture.Bitmap:= imagenB;
        imag.Top:= y;
        imag.Left:= x;
        imag.Visible:= true;
        imag.Stretch:= true;

        i:= i+1;
    end;


El problema es que únicamente me aparece el último elemento detectado; es decir, se carga los anteriores al sobreescribir. Pensando con lógica, eso parece el comportamiento correcto pues se utiliza la misma variable; pero son tantos los posts que decían que de esta manera funcionaba que lo probé.

¿Alguien sabría decirme qué error cometo?

Gracias.

Última edición por delphi.com.ar fecha: 17-01-2007 a las 13:56:51.
Responder Con Cita
  #2  
Antiguo 17-01-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Yo suprimiría algunas cosillas de mas, y evitaría que todas las imágenes se creen en la misma posición, sino solo verás la última creada.
Código Delphi [-]
    tadepo.Open;
    i:= 0;
    while tadepo.Eof = false do
    begin
        tadepo.Next;
        // Recuperamos los datos

        with TImage.Create(Self) do
        begin
          Parent:= Self;
          Width:= 150;
          Height:= 150;
          Picture.LoadFromFile('...');
          Top := y;
          Left:= x + (tadepo.RecNo * 10);
          Visible:= true;
          Stretch:= true;
        end;
    end;

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 17-01-2007
david.rguez david.rguez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Zamora, la bien cercada
Posts: 104
Poder: 18
david.rguez Va por buen camino
Lo de la superosición ya lo he tenido en cuenta, pero esa información proviene de los datos del cliente.

Por otra parte, la prueba que he hecho es con dos imágenes de 150x150; una en (1,1) y otra en (200,200), con lo que no es problema de la superposición.
Responder Con Cita
  #4  
Antiguo 17-01-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por david.rguez
Lo de la superosición ya lo he tenido en cuenta, pero esa información proviene de los datos del cliente.
¿Y el valor de tadepox y tadepoy cambia en cada iteración?... porque tienes todo dentro del mismo ciclo.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 17-01-2007
david.rguez david.rguez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Zamora, la bien cercada
Posts: 104
Poder: 18
david.rguez Va por buen camino
Ya averigué lo que ocurría. Resulta que puse el Next del ADOTable al principio de la interación, con lo que comenzaba en el segundo registro y se saltaba el primero.

Es que estoy acostumbrado a programar en Java, y ahí los resultados de consultas contra una base de datos tienen dos registros extra en blanco, uno al prinicpio y otro al final; con lo que hay que hacer un "next()" antes de comenzar a leer.

Pd: Sí, cambiar cambia en cada iteración, el problema era el que he comentado arriba. Gracias de todos modos
Responder Con Cita
  #6  
Antiguo 17-01-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Que mal de mi parte, yo di por supuesto que no querías el primer registro

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
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
Creación de una vista SQL dinámica lunatiko Oracle 2 31-10-2005 09:50:33
creación dinámica de componentes Mariana Varios 1 20-09-2005 17:07:07
Creacion dinamica de un TAnimate hermes_32 OOP 0 24-08-2004 18:51:58
Creacion dinamica de TTable hermes_32 OOP 3 11-08-2004 16:46:44
Creacion dinamica menu morfeo21 Varios 1 30-04-2004 17:33:14


La franja horaria es GMT +2. Ahora son las 22:10:13.


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