Inserir Imagem em Sequencia

Delphi

04/08/2011

Olá pessoal, tudo bem? Quero tentar tirar mais uma dúvida com vocês, se for possível.   Eu tenho na minha aplicação (Delphi-Firebird) um gerador de coleção que funciona perfeitamente. Eu seleciono um Título, e ele lista tantas edições quanto forem selecionadas nos números iniciais e finais. Ele também insere alguns dados que o usuário pode selecionar na hora.   Mas eu queria também que ele colocasse as imagens das edições. Eu consigo selecionar o arquivo pelo OpenImageDialog e jogar pro componente Image pra salvar quando crio um unico arquivo, mas como faço pra a cada registro ele selecionar a proxima imagem da pasta?   Exemplo: Tenho uma pasta com 10 imagens, e vou gerar 10 edições.. seleciono a primeira imagem da pasta pelo OpenImageDialog e a cada volta do "for" ele pega a imagem seguinte da pasta pra inserir. Tem como fazer isso?   Grato pela ajuda.     Allan Elias Ramos
Allan Ramos

Allan Ramos

Curtidas 0

Respostas

Allan Ramos

Allan Ramos

04/08/2011

Pesquisando eu notei que o OpenPictureDialog tem a opção MultiSelect, que posso selecionar mais de um arquivo ao mesmo tempo. Achei a rotina abaixo que me exibe o caminho de todos arquivos selecionados:   var
  ControleImagem: Integer; begin
  if OpSelecionarCapa.Execute then
    for ControleImagem := 0 to OpSelecionarCapa.Files.Count - 1 do
        ShowMessage(OpSelecionarCapa.Files[ControleImagem]);     Mas ainda não consegui inserir ela no gerador abaixo:     for i := NumeroInicialBruto to NumeroFinalBruto do
    begin
      DmDados.ClientEdicoesNacionais.Cancel;
      DmDados.ClientEdicoesNacionais.Insert;
      DmDados.ClientEdicoesNacionaisNOME_EDICAO_NACIONAL.AsString := NomeCompletoEdicao + NumeroInicial;
      DmDados.ClientEdicoesNacionaisFKCOD_TITULO_NACIONAL.AsInteger := CodTitulo;
      DmDados.ClientEdicoesNacionaisFKCOD_EDITORA_ORIGINAL.AsInteger := CodEditOrig;
      DmDados.ClientEdicoesNacionaisFKCOD_EDITORA_NACIONAL.AsInteger := CodEditNac;
      if CodFormato > 0 then
        begin
          DmDados.ClientEdicoesNacionaisFKCOD_FORMATO.AsInteger := CodFormato;
        end;
      DmDados.ClientEdicoesNacionais.Post;
      DmDados.ClientEdicoesNacionais.ApplyUpdates(0);    end;   Tem mais coisas que insere no gerador, mas não botei pra não ficar muito grande o post. A dúvida é, como posso inserir no campo IMAGEM, do banco de dados, cada uma dessas imagens selecionadas, de acordo com o "for"? Tipo, se eu inserir 10 registros e selecionar 10 imagens, ele insere uma em cada registro, de acordo com a ordem de seleção.   Valeu.     Allan Elias Ramos

 
GOSTEI 0
Allan Ramos

Allan Ramos

04/08/2011

Alguma luz no fim do túnel? hehe
GOSTEI 0
Rafael Ribeiro

Rafael Ribeiro

04/08/2011

Você já pensou em gravar no field imagem, o caminho da foto? Grava o caminho como string e a cada mudança de registro, você direciona o caminho da imagem para o opendialog. Eu faço assim... coloco a seguinte função no evento "onchange" do datasource:


  //verificaremos se existe algum caminho no banco de dados. Se sim:

  if (DM.CDSFOTO.FieldByName('CAMINHO').IsNull = False)  then
  begin
    
    //verificaremos se o caminho representa mesmo um arquivo de foto:
    if FileExists(DM.CDSFOTO.FieldByName('CAMINHO').AsString) then
    begin
      ODFoto.FileName := DM.CDSFOTO.FieldByName('CAMINHO').AsString;
      ImgFoto.Picture.LoadFromFile(ODFoto.FileName);
    end
    else
    begin
      ShowMessage('Arquivo' + DM.CDSFOTO.FieldByName('CAMINHO').AsString
      + 'não encontrado');
      ImgFoto.Picture.Assign(Nil); //deixa a imagem somente do Panel;
    end;
  end
  else
  begin
    imgFoto.Picture.Assign(nil);
  end;




Espero ter ajudado!
GOSTEI 0
Allan Ramos

Allan Ramos

04/08/2011

Eu pensei nisso Rafael. Na verdade pensei em selecionar todas imagens e a cada loop, o dialog receber o proximo registro. Não sei se cheguei a fazer certo esse código, vou dar uma olhada quando chegar em casa e analisar o que tu postou pra ver como funciona melhor.   Valeu, abraços ;)   Allan Elias Ramos
GOSTEI 0
POSTAR