Inserir Imagem em Sequencia
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
Curtidas 0
Respostas
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
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
04/08/2011
Alguma luz no fim do túnel? hehe
GOSTEI 0
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:
Espero ter ajudado!
//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
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