Como carregar num TImage uma imagem que está num TImageList

08/05/2008

7

Olá amigos,
Criei em tempo de execução uma lista de imagens que aparecerão num PDV conforme a data do ano.
Quando não está sendo utilizo, o PDV passará essas imagens como animação.
Já gravei as imagens no banco e estou fazendo o seguinte quando inicio o sistema:

   LerImg:=TImage.Create(self);
   ListaImagens := TImageList.Create(self);
   while dm.cds_imagens.eof do begin
      if FileExists(dm.cds_imagens.fieldbyname(´imagem´).asstring) then begin
         Inc(LoopMax);
         LerImg.Picture.LoadFromFile(dm.cds_imagens.fieldbyname(´imagem´).asstring);
         ListaImagens.GetBitmap(LoopMax,LerImg.Picture.Bitmap);
      end;
      dm.cds_imagens.Next ;
   end;
   LerImg.Free ;


Agora quero colocar num timer e quando o pdv não estiver em uso faço um loop nas imagens do TImageList e passo para um TImage na tela.

Só não sei como carregar a imagem que está no TImageList no TImage.

Alguém tem alguma idéia.

Se fosse pra carregar do disco seria TImage.picture.loadfromfile(´rquivo.bmp´) mas a imagem já está na memória do TImageList

Mario


Responder

Posts

08/05/2008

Mazzi

Ola, pelo que li e vi, o Imalist nao armazena o caminho da imagem em questao... e ainda que o ImageList tem o metodo Shared Protegido de forma que só alguns componentes (como o menu) podem explorar essa opcao.



E isso para o TImage é necessario para apresentar a imagem.

Eu sugiro que tente fazer por um List que contenha o caminho da Imagem, assim vc conseguiria fazer do jeito q vc quer.

Mesmo por que se carregar de um Path e de um ImageList estara fazendo a carga da figura duas vezes.(pelo metodo do ImageLIst).


Responder

08/05/2008

Martins

Essas imagens estão armazenadas no Banco de Dados?

O q está havendo, vc não consegue carregar nenuma delas no TImage ou somente a primeira imagem carregada é exibida?


Responder

09/05/2008

Aldus

Bom dia amigos, eu estava gravando as imagens no banco e isso já havia consumido tempo demais.
Então resolvi gravar apenas o caminho da imagem, ao filtrá-las para mostrar, coloquei-as num StringList e está resolvido.

Obrigado pela atenção dispensada.

Mario


Responder
só pra constar...

o método GetBitmap ´pega´ o bmp do Imagelist e grava num componente bitmap.
para adicionar um bmp ao imagelist, use o método Add.
seria assim:
ao iniciar o sistema:
  LerImg := TImage.Create(self);
  ListaImagens := TImageList.Create(self);
  dm.cds_imagens.first;
  // adicionando as imagens ao Imagelist
  while NOT dm.cds_imagens.eof do
  begin
    if FileExists(dm.cds_imagens.fieldbyname(´imagem´).asstring) then
    begin
      // carrega a imagem
      LerImg.Picture.LoadFromFile( dm.cds_imagens.fieldbyname(´imagem´).asstring );
      // adiciona, na Imagelist, a imagem carregada em LerImg
      ListaImagens.Add(LerImg.Picture.Bitmap, nil);
    end;
    dm.cds_imagens.Next ;
  end;
  LerImg.Free;


depois, ao ´animar´ (num timer, por exemplo):
ListaImagens.GetBitmap(IndiceDaImagemNoImagelist, LerImg.Picture.Bitmap);
onde [i:80273633a4]LerImg.Picture.Bitmap[/i:80273633a4] é objeto que receberá a imagem lida do imagelist

-> lembre-se que pra isso funcionar da forma desejada, as propriedades height e width do imagelist devem ser compatíveis com as dimensões das imagens a serem exibidas.


Responder