Thumbnails - como fazer ?

Delphi

08/05/2007

Alguém sabe como eu faço para que meu sistema mostre as fotos como se fossem thumbnails?

Estou utilizando Delphi 7.

Att.


Marcos.gandin

Marcos.gandin

Curtidas 0

Respostas

Aloizio Castro

Aloizio Castro

08/05/2007

Alguém sabe como eu faço para que meu sistema mostre as fotos como se fossem thumbnails? Estou utilizando Delphi 7. Att.


Isto onde?? DBGrid?? Listar todas as fotos de uma pasta no Form?!?


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Eu preciso mostrar essas fotos em um Form, eu pensei em colocar um ScrollBox e dentro desse ScrollBox eu poderia mostrar as fotos que estão dentro de uma pasta salva no meu computador.


GOSTEI 0
Aloizio Castro

Aloizio Castro

08/05/2007

Eu preciso mostrar essas fotos em um Form, eu pensei em colocar um ScrollBox e dentro desse ScrollBox eu poderia mostrar as fotos que estão dentro de uma pasta salva no meu computador.



Pow, acho q tenho um codigo aqui, vou procurar e jah posto!! :wink:


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Valeu amigo...
Se puder me ajudar eu te agradeço muito.

Um abraço...


GOSTEI 0
Aloizio Castro

Aloizio Castro

08/05/2007

Valeu amigo... Se puder me ajudar eu te agradeço muito. Um abraço...


procedure CreateThumbs(Diretorio: String; ThumbSize: Word; Owner: TWinControl);
var
  i: Word;
  Img: TImage;
  Ext: String;
  Arqs: TStrings;
  wTop, wLeft: Word;
  Obj: TObject;
begin
  //-- Listar arquivos do diretorio
  Diretorio := IfThen(RightStr(Diretorio,1) <> ´\´ , Diretorio + ´\´ , Diretorio);
  Arqs := TShell.ListaArq(Diretorio);

  //-- Posição dos componentes
  wTop  := 8;
  wLeft := 8;

  //-- Destruir componentes de thumbs antigo
  if Owner.ComponentCount > 0 then
    begin
      for i := Owner.ComponentCount-1 downto 0 do
        begin
          if (Owner.Components[i] is TImage) then
            if (Owner.Components[i] as TImage).Tag = 785 then
              begin
                Obj := Owner.Components[i];
                FreeAndNil(Obj);
              end;
        end;
    end;

  //-- Exibir imagens
  if Arqs.Count > 0 then
    begin
      for i := 0  to Arqs.Count -1 do
        begin
          Ext := UpperCase(ExtractFileExt(Arqs[i]));

          if (Ext = ´.BMP´) or (Ext = ´.JPG´) or (Ext = ´.WMF´) or (Ext = ´.JPEG´) then
            begin
              Img := TImage.Create(Owner);
              Img.Parent := Owner;
              Img.Stretch := True;
              Img.Proportional := True;
              Img.Center := True;
              Img.Tag := 785;
              Img.Picture.LoadFromFile(Diretorio + Arqs[i]);
              Img.SetBounds(wLeft,wTop,ThumbSize,ThumbSize);

              //-- Pular linha qdo ultrapassar o width do scrollbox
              wLeft := ThumbSize + 8 + wLeft;
              if wLeft > Owner.Width then
                begin
                  wLeft := 8;
                  wTop := ThumbSize + 8 + wTop;
                end
            end;

        end;
    end;
end;

end.


Para listar o arquivo, use a função abaixo:

  TShell = class
  public
    class function ListaArq(Caminho: string;Filtro : String = ´*.*´): TStrings;
  end;

implementation

{ TShell }

class function TShell.ListaArq(Caminho, Filtro: String): TStrings;
var
  SR : TSearchRec;
  I  : integer;
begin
  Result := TStringList.create;
  I := FindFirst(Caminho+Filtro, faAnyFile, SR);
  while I = 0 do
    begin
      if (SR.Attr and faDirectory) <> faDirectory then
         Result.Add(SR.Name);
      I := FindNext(SR);
    end;
end;


Use da seguinte maneira:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  CreateThumbs(´D:\Nosredna\Meus documentos\Minhas imagens´,50,ScrollBox1);
end;


Aqui funcionou perfeitamaente!!

Teste aew, abraços :wink:


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Poxa _anderson_...
Vou testar aqui...

Muito obrigado mesmo meu amigo!!!

Att.


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Anderson...

Eu preciso declarar alguma coisa no Uses ?


GOSTEI 0
Aloizio Castro

Aloizio Castro

08/05/2007

Anderson... Eu preciso declarar alguma coisa no Uses ?


Para usar .JPG, declare Jpeg;
Para usar o RightStr declare StrUtils.


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Valeu Anderson...

Agora funcionou...mas abusando um pouco mais da sua boa vontade, será que tem como quando eu der um duplo-clique na foto abrir ela no seu tamanho original ou então num tamanho pré-determinado em um outro Form ?

Aceito sugestões...


GOSTEI 0
Titanius

Titanius

08/05/2007

Só mais uma coisa.. a biblioteca JEDI, tem um componente que faz o que você quer... muito bom, quando precisei usei ela...

[]s


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Mas essa biblioteca faz os thumbnails ou faz com que eu dê um duplo clique a foto fique no tamanho original?
É que eu já consegui fazer os thumbnails com o exemplo que o Adriano me passou, o que eu preciso agora é só fazer com que a foto fique do tamanho original.

Aonde eu consigo essa bilioteca?

Att.


GOSTEI 0
Titanius

Titanius

08/05/2007

http://jvcl.sourceforge.net/

Seguinte, ela te mostra o tumb.. mas a parte do tamanho original não, mas isso você mesmo pode fazer, com um Form, e um TImage... dando duplo clique, abre este form mostrando esta imagem...

[]s


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Valeu Fellipe...

Na verdade eu não tinha pensando nessa possibilidade...mas como eu vou saber qual foto vai abrir uma vez que vou colocar o código no evento OnDblClick do componente ScrollBox ?

Att.


GOSTEI 0
Titanius

Titanius

08/05/2007

Valeu Fellipe... Na verdade eu não tinha pensando nessa possibilidade...mas como eu vou saber qual foto vai abrir uma vez que vou colocar o código no evento OnDblClick do componente ScrollBox ? Att.


Bem, no tal componente do JEDI, você tem condicoes de saber qual o arquivo está selecionado, agora como você fez, eu não sei.. você poderá verificar onde foi clicado, e se tem alguma imagem, pra aih descobrir o caminho dela pra exibir... mas aconselho a voce a dar uma olhada neste componente... :wink:

[]s


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Felipe...

Essa biblioteca Jedi é Free ?


GOSTEI 0
Titanius

Titanius

08/05/2007

Ela é Open-Source, vai com fonte e tudo... é muita coisa que tem nela.... muita mesmo, se te falar que parei de contar nos 200 componentes você não acredita...

[]s


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

E a instalação é simples?
Tem um tutorial explicando como eu faço a instalação?

Att.


GOSTEI 0
Titanius

Titanius

08/05/2007

Ele tem um instalador próprio...

Se for baixar, baixe a versão FULL... com JCL+JVCL...

Primeiro você instala o JCL e depois o JVCL... todos dois tem instalador próprio...

[]s


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Baixei o arquivo JVCL330CompleteJCL198-Build2530.zip, era o que tinha mais donwloads baixados.
Ao descompactar ele criou as pastas JCL e JVCL e dentro delas pude ver que tem muita coisa mesmo.
Então, agora, é só executar o arquivo install.bat que se encontra dentro destas pastas que ele vai fazer o resto da instalação, é isso ?
E no Delphi eu vou precisar fazer alguma alteração ou é só abrir o Delphi e começar a utilizar esses componentes?

Att.


GOSTEI 0
Titanius

Titanius

08/05/2007

Baixei o arquivo JVCL330CompleteJCL198-Build2530.zip, era o que tinha mais donwloads baixados. Ao descompactar ele criou as pastas JCL e JVCL e dentro delas pude ver que tem muita coisa mesmo. Então, agora, é só executar o arquivo install.bat que se encontra dentro destas pastas que ele vai fazer o resto da instalação, é isso ? E no Delphi eu vou precisar fazer alguma alteração ou é só abrir o Delphi e começar a utilizar esses componentes? Att.


Isso mesmo... execute o install.bat de cada um, e vai lhe mostrar quais versoes de delphi você tem instalado, deixe marcado em qual versao deseja instalar e pronto... faz isso nos dois e prontinho... nao precisa mexer em nada no delphi, normalmente o JEDI configura ele sem problemas...

[]s


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Valeu Felipe...
Você realmente tem me ajudado com as suas dicas.
Mais uma vez te agradeço.

Um abraço...


GOSTEI 0
Titanius

Titanius

08/05/2007

Tranquilo.. :wink:

Precisando estamos aih.

[]s


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Felipe...acho que preciso de mais uma ajuda sua.

Eu baixei o arquivo JVCL331CompleteJCL199-Build2551.zip, descompactei e realmente foram criadas as duas pastas: jcl e jvcl e dentro delas todos os componentes, exemplos, etc...enfim, tudo certo até então.
Eu instalei a jcl sem problemas, mas quando eu tento instalar a jvcl, logo no início dá um erro:

C:\Jedi\jvcl\Common\jvcl.inc(36) Error: ´END´ expected but identifier ´ALERT_jedi_inc_incompatible´ found

e não tem jeito de prosseguir com a instalação.
O estranho é que em casa eu instalei e deu tudo certo mas aqui eu faço a mesma coisa e não consigo.
Detalhe: em casa eu tenho Windows XP e aqui na empresa eu tenho Windows Server 2003...será que a biblioteca não roda nesse ambiente?

Att.


GOSTEI 0
Titanius

Titanius

08/05/2007

Olá MArcos, acredito que você esteja em uma dessas opções:

1) Já tenha alguma versão antiga do JEDI.

Se for o caso, desinstalei totalmente, inclusive excluindo os arquivos gerados por ele.

2) Arquivo Corrompido.

Descompacte novamente...

3) Caminho do JCL no JVCL inválido.

Na instalação tem uma parte que mostra o caminho do JCL, veja se está de acordo com o seu.

[]s


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Tentei as 3 opções e não deu certo.
Ele insiste em dizer que o arquivo jvcl.inc que está dentro de c:\Jedi\jvcl\commom\ tem aquela linha com erro.
Eu editei esse aquivo e realmente na linha 36 está a linha ALERT_jedi_inc_incompatible

Tentei baixar o arquivo .zip novamente e aconteceu o mesmo.
Por acaso no seu arquivo jvcl.inc também contém essa linha ?

Att.


GOSTEI 0
Titanius

Titanius

08/05/2007

O meu tambem contem esta linha... muito estranho.. em qual versao do delphi voce está tentando instalar?

[]s


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Então Felipe...eu estou tentando instalar no Delphi 7 que é o mesmo que eu tenho instalado em casa.
Só que em casa deu certo, mas aqui não...
Poxa...achei tão legal a bibioteca e queria usá-la aqui também.


GOSTEI 0
Titanius

Titanius

08/05/2007

Certo, mas o erro aparece quando está compilando o install.bat ou quando está instalando a biblioteca...

poderia fornecer o erro do jeito que mostra ai?

[]s


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Felipe, eu dou um duplo clique no install.bat da pasta jcl, clico no botão install e esse ele instala perfeitamente.
Depois eu dou um duplo clique no install.bat da pasta jvcl e vou clicando no botão next até aparecer o botão install...eu clico no botão install e ele começa a compilar as Packages, só que logo no início ele dá o erro:

[b:94933ff5ec]JVCL 3.31.0.0

[Generating: Packages]
Generating packages for D7
Loaded template.dof
Loaded template.dpk
Loaded template.rc
[Compiling: Packages]
[Compiling: Jv3rdD7R.bpl]
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
C:\Lib\Jedi\jvcl\Common\jvcl.inc(36) Error: ´END´ expected but identifier ´ALERT_jedi_inc_incompatible´ found[/b:94933ff5ec]

É esse erro aí que dá...


GOSTEI 0
Titanius

Titanius

08/05/2007

Seguinte, vamos tentar esta nova:

Procure na sua máquina pelo arquivo: [b:6e4583a86d]jedi.inc[/b:6e4583a86d]
Na máquina inteira...

Com certeza você irá localizar alguns...

Os arquivos que [b:6e4583a86d]não[/b:6e4583a86d] estiverem na pasta: JCL e JVCL que você descompactou, você renomeia eles pra qualquer outro nome diferente... e tenta instalar novamente... vai ter que reinstalar o JCL também... ou seja, os únicos arquivos jedi.inc que deverão existir no seu computador, [b:6e4583a86d]obrigatoriamente e exclusivamente[/b:6e4583a86d] deverão estar nas pastas JCL e JVCL que você descompactou.

[]s


GOSTEI 0
Marcos.gandin

Marcos.gandin

08/05/2007

Felipe...

Segui a sua orientação e consegui instalar...só que ainda estou com um problema em uma package.
Quando você clica no item de menu Project e deopis clica em Options... abre-se a tela Default Project Options. Na aba Packages tem o item:
JVCL Multimedia and Image Components.
Essa é a única package que não consigo selecionar, pois quando eu seleciono ela dá o seguinte erro:

Cannot load package ´JvMMD7R.´ It contains unit ´VFW´, witch is also contained is package ´GLScene7´

E agora??? O que eu faço ???

Att.


GOSTEI 0
POSTAR