DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 20/8/2010 11:37:17 AM
 
Ola, estou montando um programa de imobiliaria e gostaria de inserir as fotos das casas no registro de cada imovel.

Achei varios exemplos na internet mais todos eles é criado um campo string para inserir 1 unica imagem, e eu presiso poder inserir quantas imagens forem necessarias em cada registro, podem ser 1, 5 ou 30 por exemplo.

Alguem saberia explicar como fazer isso usando o caminho das imagens? Vou ter que criar 30 campos string na tabela de imoveis e armazenar o caminho de cada foto em um campo? ou tem algum outro metodo mais eficaz e pratico?

Aceito qualquer sugestão que me ajude a inserir varias imagens no mesmo registro, teria que crirar também um sistema pratico para mostrar as fotos de cada Imovel.
PJRM1470
 

 


País: Brasil
Estado: 00
Cidade: Indefinido
Mensagens: 230
 Postado em: 20/8/2010 12:30:50 PM
 
Neste caso eu usaria um Arquivo ".InI.
[ImagensPredioCod001.INI]
conteúdo:
#Código

[Imagens]
CodigoImagem01 = "C:\Diretorio\ImagemTal.bmp"
CodigoImagem02 = "C:\Diretório\ImagemTal2.bmp"

Assim vc so grava na base de dados o arquivo diretorio do arquivo ini que contem todos os demais diretorios de imagens. Eu utilizo este método e meu sistema não fica lerdo. Agora existe outros metodos que se pode aplicar,
porem estou sugerindo este.

Dê uma olhada no help do delphi como funciona os arquivos INI, caso se interesse pelo método. E se precisar de exemplo... neste forum e no antigo forum daqui há muita informação pronta. basta dar um search.

qualquer coisa basta dar o grito.
Abs,
pjrm1470.

Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 20/8/2010 05:58:48 PM
 
Opa, vlw a ideia eu dei uma procurada mas não achei nenhuma aplicação do .INI com imagens e exemplos, se alguem puder colocar alguns links eu agradeceria.

Ainda estou na busca de mais ideia ja que para o .INI mais arquivos vão ter que ser criados a cada conjunto de imagens inseridas, eu queria usar o minimo possivel de de arquivos, por isso até estou usando Access, se fosse o Firebird ou Mysql ja exigiria a instalação do cliente no computador do usuario.
ERILEY VILAGRANDE BARBOSA
 

 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
 Postado em: 20/8/2010 07:11:29 PM
 
Use o componente ClientDataset da palheta DataAccess, crie um campo autoincremento nele, outro integer para guardar o código do imóvel e outro para guardar a imagem.
 
Na sua propriedade FileName digite o caminho onde está seu executavel, mais nomedoarquivo.cds.
 
Não esqueça de declarar MidasLib na uses do seu formulário.
 
Use o normalmente como se fosse um Table, filtre-o utilizando filter.
 
Para exibir as imagens utilize o componente dbCtrlGrid da palheta DataControls, colocando dentro dele um dbimage.
 
Se quiser posso te ajudar a fazer esta parte do clientDataset.
 
Atenciosamente
 
Eriley
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 20/8/2010 10:53:51 PM
 
Sou iniciante no Delphi, nunca usei o ClientDataSet nem o dbCtrlGrid, se puder me dar uma explicação mais detalhada ou com um programa de exemplo para gravar varias imagens em cada cadastro seria ainda melhor.

Se tiver um link para um exemplo ou explicação de gravar imagem com esses componentes também ajudaria muito.

Os campos é pra criar no Access e puxar para o ClientDataSet ou criar nele mesmo? que arquivo é esse .cds? como crio um?

No aguardo.
ERILEY VILAGRANDE BARBOSA
 

 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
 Postado em: 21/8/2010 11:41:35 AM
 
Vamos por partes, vamos começar pela criação dos campos no clientDataset:

Coloque no formulário um componente ClientDataSet da palheta Data Access e altere sua propriedade Name para CdsFotosImoveis. De um clique na propriedade FieldDefs e outro clique nas reticências ao lado da propriedade. Será aberta a janela Editing CdsFotosImoveis. FieldDefs, clique três vezes no botão Add New na parte superior da janela.

Selecione cdsFotosImoveisField1 e altere as seguintes propriedades:

Name: id

DataType: ftAutoInc

Selecione cdsFotosImoveisField2 e altere as seguintes propriedades:

Name: CodImovel

DataType: ftInteger

 

Selecione cdsFotosImoveisField3 e altere as seguintes propriedades:

Name: Foto

DataType: ftBlob

 
Feche a janela Editing CdsFotosImoveis. FieldDefs. Clique com o botão direito do mouse sobre o ClientDataSet e depois em Create Dataset.

Clique novamente com o botão direito do mouse sobre o ClientDataSet e depois em Fields Editor...

Clique com o botão direito do mouse sobre o Fields Editor e depois em Add all fields.

Na propriedade FileName do ClientDataset digite a localização da pasta onde está seu executavel + FotosImoveis.cds.
Na clausula uses do seu formulario inclua a uses MidasLib.
 
Assim que conseguir fazer tudo isso, poste o nome do seu componente query e a estrura da tabela de imóveis para continuarmos.
Aqui vai um link interessante de como gravar imagens no clientDataset apenas leia-o vamos estar utilizando ele mais adiante:
 
 
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 21/8/2010 12:49:50 PM
 
Pronto.

O caminho no filename fico A:\Projetos\Imobiliaria\FotosClientes.cds, pensei que o arquivo seria criado depois de salvar mas por enquanto so aparece o .exe la.

query que pega os dados do Imovel é a "ADOQImoveis"

Campos da tabela "Imoveis":

ADOQImoveisID: AutoIncField;
    TipodeImvel: WideStringField;
    Referencia: WideStringField;
    Endereço: WideStringField;
    Bairro: WideStringField;
    Cidade: WideStringField;
    Edificio: WideStringField;
    DCE: BooleanField;
    Lavado: BooleanField;
    Banheirodeservo: BooleanField;
    Cozinha: BooleanField;
    Copa: BooleanField;
    AreadeServiço: BooleanField;
    Quartodedespejo: BooleanField;
    Piscina: BooleanField;
    Obspagamento: MemoField;
    Quartos: IntegerField;
    Suites: IntegerField;
    Banheiros: IntegerField;
    AreaExterna: BooleanField;
    VagasdeGaragem: IntegerField;
    CondiodePagamento: WideStringField;
    Valor: IntegerField;
    ObsOpcionista: MemoField;   
    Opcionista2: WideStringField;
    Opcionista: WideStringField;

   Parte referente aos dados do proprietario(também presente na tabela imoveis):
    Nome: WideStringField;
    Profissão: WideStringField;
    Endereço: WideStringField;
    Identidade: WideStringField;
    CPF: WideStringField;
    Telefone: WideStringField;
    Celular: WideStringField;
    Conjuje: WideStringField;
    Observações: MemoField;


ERILEY VILAGRANDE BARBOSA
 

 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
 Postado em: 21/8/2010 02:01:33 PM
 
Que drive é este o A:?
Seu executável deve ficar no disco rigido.
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 21/8/2010 02:17:10 PM
 
A: é do disco rigido, na formatação do Win 7 usa o A, B, C....

Aqui por exemplo ta particionado assim:

Arquivos(A:)
Multimidia(B:)
Win 7(C:)
Jogos(D:)
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 22/8/2010 12:07:55 PM
 
Eriley cada você? To no aguardo da continuação do tutorial XD.
ERILEY VILAGRANDE BARBOSA
 

 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
 Postado em: 22/8/2010 06:28:11 PM
 

Sugiro que troque o caminho pelo menos do arquivo CDS para C:\, pois, quando for instalar no seu cliente ele terá de ter o drive A:\ senão vai dar erro.

Outra coisa, se um proprietario for dono de mais de um imóvel você terá de repetir o cadastro do proprietario novamente.
Sugiro que crie a tabela proprietario e na tabela de imovel inclua apenas o campo codigo do proprietario, assim um proprietario poderá ser dono de N imóveis.
 
Assim que fizer isso voltamos a conversar.
 
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 23/8/2010 01:08:31 AM
 
   Se eu colocar sem caminho ele não manda diretamente para o local aonde esta o executavel? Faço assim com o banco  de dados pelo menos, para evitar te ter que estar em X unidade pra funcionar, é so eu colocar ele junto do .exe que funciona em qualquer local, seria bom o .cds funcionar do mesmo modo.

 De qualquer modo ja mudei pra C:\Imob\Banco de Imagens\FotosImoveis.cds

    Sobre a tabela eu conversei com chefe da imobiliaria que minha mãe trabalha quando ele pediu o programa, ei iria criar a tabela "cliente" aonde ele cadastraria tanto pessoas interessadas como proprietarios e na hora do cadastro de Imoveis ele so teria que escolher o cliente(dono do imovel) em um combobox.
    Ele não gostou e preferiu que fosse exatamente igual ao que eles prenchem na ficha de cadastro deles. E como o cliente é quem manda.......fiz do jeito que você viu acima.
    Como é uma imobiliaria de pequeno porte(4 corretores) e não existe um planejamento para expandir mais do que isso não creio que havera muitos casos de repetição de dono de imovel, em uma de grande porte seria bem inviavel esse sistema que eles utilizam.

  Alias essa é a terceira vez que tento ajudar a melhorar um sistema e me pedem pra deixar exatamente como era quando não utilizavam computador. Fiquei bem frustrado quando dividi uma ficha de hospital volunario em 6 tabelas(Medicos,, Volunarios, Motoristas, ect) pra eles poderem escolher em um combobox e me pediram pra deixar como era, ou seja, 1 tabela unica. A unica melhora que tiveram foi um sistema de busca mais rapido do que procurar no papel no fim das contas ¬¬ .

Bom, fico no aguardo da continuação do tutorial.
ERILEY VILAGRANDE BARBOSA
 

 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
 Postado em: 23/8/2010 09:10:35 AM
 

Vamos realizar o relacionamento entre ADOQImoveis e cdsFotosImoveis:

Coloque um datasource para o cdsFotosImoveis.
Selecione o cdsFotosImoveis e na propriedade MasterSource escolha o datasource ligado ao ADOQImoveis.
Na propriedade MasterFields, clique nas reticências, ligue ID de ADOQImoveis com CodImovel do cdsFotosImoveis.
Pronto relacionamento entre as duas tabelas realizado, pode ser feito pelo afterScroll do ADOQImoveis também.

Inserindo uma foto:
Inclua um OpenPictureDialog da palheta Dialogs.
Inclua um botão com o caption inserir imagem do imóvel e no seu evento onclick digite:
if not(ADOQImoveis.State in [dsEdit, dsInsert]) then
begin
  cdsFotosImoveis.Insert;
  cdsFotosImoveisFoto.LoadFromFile(OpenPictureDialog1.FileName);
  cdsFotosImoveis.Post;
end
else
begin
  ShowMessage('Salve os dados do imóvel antes de inserir uma foto');
  Abort;
end;

Mostrando a foto:
Coloque um DBCtrlGrid da palheta Data Controls.
Ligue sua propriedade DataSource com o Datasource ligado a cdsFotosImoveis.
Dentro do DBCtrlGrid, coloque um DBImage da palheta Data Controls.
Ligue sua propriedade DataSource com o Datasource ligado a cdsFotosImoveis.
Ligue sua propriedade DataField com o campo Foto.
Coloque False em AllowDelete e AllowInsert para que o usuário não exclua e nem inclua diretamente pelo DBCtrlGrid.
Se quiser pode colocar um botão para alterar a foto do imóvel, basta que antes disso você selecione a foto no DBCtrlGrid:
if not(ADOQImoveis.State in [dsEdit, dsInsert]) then
begin
  cdsFotosImoveis.Edit;
  cdsFotosImoveisFoto.LoadFromFile(OpenPictureDialog1.FileName);
  cdsFotosImoveis.Post;
end
else
begin
  ShowMessage('Salve os dados do imóvel antes de Editar uma foto');
  Abort;
end; 
Deletando a foto, basta que antes disso você selecione a foto no DBCtrlGrid:
if not(ADOQImoveis.State in [dsEdit, dsInsert]) then
begin
  if not(cdsFotosImoveis.IsEmpty) then
    cdsFotosImoveis.Delete
  else
  begin
    ShowMessage('Não há foto para excluir');
    Abort;
  end;
end
else
begin
  ShowMessage('Salve os dados do imóvel antes de Editar uma foto');
  Abort;
end; 

Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 23/8/2010 08:52:51 PM
 
Ta dando erro quando executo adiciono um imovel e depois clico em adicionar foto

 o erro é esse:

 "Project Imob.exe raised exception class EFOOpenError with message 'Cannot open file'. The filename, directory name, or volume label syntax is incorrect'. Process stopped. Use Step or Run to continue."
ERILEY VILAGRANDE BARBOSA
 

 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
 Postado em: 24/8/2010 08:45:33 AM
 

Inserindo uma foto:

if not(ADOQImoveis.State in [dsEdit, dsInsert]) then
begin
  cdsFotosImoveis.Insert;
  OpenPictureDialog1.InitialDir := 'C:\Imob\Banco de Imagens';{Verifique se este é o caminho onde vais guardar as fotos}
  if OpenPictureDialog1.Execute then
    cdsFotosImoveisFoto.LoadFromFile(OpenPictureDialog1.FileName);
  cdsFotosImoveis.Post;
end
else
begin
  ShowMessage('Salve os dados do imóvel antes de inserir uma foto');
  Abort;
end;


Se quiser pode colocar um botão para alterar a foto do imóvel, basta que antes disso você selecione a foto no DBCtrlGrid:
if not(ADOQImoveis.State in [dsEdit, dsInsert]) then
begin
  cdsFotosImoveis.Edit;
  OpenPictureDialog1.InitialDir := 'C:\Imob\Banco de Imagens';{Verifique se este é o caminho onde vais guardar as fotos}
  if OpenPictureDialog1.Execute then
    cdsFotosImoveisFoto.LoadFromFile(OpenPictureDialog1.FileName);
  cdsFotosImoveis.Post;
end
else
begin
  ShowMessage('Salve os dados do imóvel antes de Editar uma foto');
  Abort;
end; 

Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 24/8/2010 11:32:02 AM
 
Funciona \o/ . Muito obrigado.

2 duvidas/problemas que apareceram agora:

1 - Como fazer para poder adicionar imagens Jpeg? pensei que era so adicionar o jpeg no Uses mas não é tão simples assim ao que parece.

2 - o DBimage ou deixa as imagens no tamanho original ou as expande para o tamanho maximo dele se o Strecth for True, o problema é que nem toda imagem tem as mesmas proporções(se bem que em termos de so fotos de casas deve ter sim, mas não custa ja perguntar) ae quando uma imagem é 100x50 por exemplo e meu DBImage é 100x100 a imagem é esticada e fica disforme, e seu eu deixar o Stretch False e colocar uma imagem 400x400 so vai aparecer 1/4 da imagem ja que é 100x100 o DBimage, existe alguma solução para isso?

ERILEY VILAGRANDE BARBOSA
 

 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
 Postado em: 24/8/2010 01:29:51 PM
 

Declare jpeg, clipbrd no Uses.

Inserir uma imagem:
var
  jpg: Tjpegimage;
begin
  if not(ADOQImoveis.State in [dsEdit, dsInsert]) then
  begin
    cdsFotosImoveis.Append;
    OpenPictureDialog1.InitialDir := 'C:\Imob\Banco de Imagens';{Verifique se este é o caminho onde vais guardar as fotos}
    if OpenPictureDialog1.Execute then
    begin
      jpg:= Tjpegimage.Create;
      jpg.LoadFromFile(openpictureDialog1.FileName);
      Clipboard.Assign(jpg);
      Dbimage1.PasteFromClipboard;
      jpg.Free;
    end;
    cdsFotosImoveis.Post;
  end
  else
  begin
    ShowMessage('Salve os dados do imóvel antes de inserir uma foto');
    Abort;
  end;
end;

Editar uma imagem
var
  jpg: Tjpegimage;
begin
  if not(ADOQImoveis.State in [dsEdit, dsInsert]) then
  begin
    cdsFotosImoveis.Edit;
    OpenPictureDialog1.InitialDir := 'C:\Imob\Banco de Imagens';{Verifique se este é o caminho onde vais guardar as fotos}
    if OpenPictureDialog1.Execute then
    begin
      jpg:= Tjpegimage.Create;
      jpg.LoadFromFile(openpictureDialog1.FileName);
      Clipboard.Assign(jpg);
      Dbimage1.PasteFromClipboard;
      jpg.Free;
    end;
    cdsFotosImoveis.Post;
  end
  else
  begin
    ShowMessage('Salve os dados do imóvel antes de inserir uma foto');
    Abort;
  end;
end;

Quanto ao tamanho, o componente DBImage tem que ficar sempre com o tamanho maior ou igual a imagem que está inserindo, ai tem que ir rodando e testando.
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 24/8/2010 03:37:03 PM
 

O que seria o .append aonde era o .insert no codigo?

Ta travando o Delphi quando mando executar, pelo que testei é o Clipbrd, sempre apos colocar ele e mandar executar o delphi 7 trava, alguem tem ideia de como resolver?

ERILEY VILAGRANDE BARBOSA
 

 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
 Postado em: 24/8/2010 03:43:16 PM
 
Insert insere um registro em branco no inicio, Append insere um registro em branco no final.
o Clipbrd aqui funciona direitinho não trava, mandei inserir 3 registros em sequência e não travou.
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 24/8/2010 03:59:37 PM
 
Fui testar de novo aqui, qualquer coisa que mude no programa do estado atual ta travando, mudar um taborder, acrescentar um speedbutton, qualquer mudança trava na hora do executar e so sai com control+alt+Del
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 24/8/2010 04:03:23 PM
 
  PS: isso so acontece no formulario de imoveis, nos outros posso acrescentar que não da nada, vo rever os codigos aqui para ver se acho algo errado.
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 26/8/2010 11:31:45 AM
 
Deletei e refiz o "arquivo.cds" e voltou ao normal.

O deletar ta funcionando certinho também, no caso so coloquei

cdsFotoImoveis.Edit;
cdsFotoImoveis.Delete;

Outra duvida agora. No DBctrlGrid tem como comandar a barra de rolagem por codigo? to querendo montar um Form para Mostrar as imagens em tamanho grande, pra mostrar em tamanho grande eu puxei a variavel Foto do Fields do ClienteDataSet mas não sei como fazer passar as imagens pra frente ou para tras sem ficar clicando manualmente na barra de rolagem do BDCtrlGrid e o que eu queria era um botão pra ficar passando as imagens pra frente e para tras.


ERILEY VILAGRANDE BARBOSA
 

 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
 Postado em: 26/8/2010 11:39:36 AM
 
Coloque um dbNavigator e ligue sua propriedade Datasource ao cdsFotosImoveis, Deixe apenas os botoes de navegação do Datasource visiveis através da propriedade:
VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast]
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 26/8/2010 12:50:06 PM
 

Muito obrigado.

Ja tirei todas as duvidas que queria, podem fechar o topico. 

Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 26/8/2010 02:30:27 PM
 

  Cancela o que eu disse acima, ocorreram alguns novos problemas.

1 - Quando deleto um imovel gostaria que todas as imagens relacionadas a ele fossem deletadas também como seria o comando para deletar o registro em cdsFotosImoveis ligado ao registro no banco de dado do access?

2 - Mesmo depois de deletar as imagens eles não parecem ter sido removidas do arquivo .cds ja que ele não diminui de tamanho.

3 - Eu coloco uma imagem de 300KB e o .CDS aumenta em mais de 1 MB de tamanho, isso é normal?

4 - Agora quando tento colocar uma imagem bmp da erro no programa, ele so aceita jpeg, não que isso seja um problema ja que as fotos de imobiliaria são todas em jpeg mesmo, mas gostaria de saber como contornar isso para programas futuros.


 

ERILEY VILAGRANDE BARBOSA
 

 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
 Postado em: 26/8/2010 03:06:16 PM
 
No before delete de ADOQImoveis, coloque:
CdsFotosImoveis.Filter := 'CodImovel = ' + ADOQImoveisID.asstring;
CdsFotosImoveis.filtered := True;
CdsFotosImoveis.disablecontrols;
CdsFotosImoveis.First;
while not(CdsFotosImoveis.eof) do
begin
  CdsFotosImoveis.Delete;
end;
CdsFotosImoveis.filtered := False;
CdsFotosImoveis.enabledcontrols;
 
Quanto ao tamanho não sei, mas quanto a poder gravar bmp, faça assim:
Coloque um radiogroup da palheta standard no formulário.
No seu caption digite  Formato da imagem
no ItemIndex digite 1
Na sua propriedade items, digite:
BMP
JPG
 
E modifique seu código para:
Inserir uma imagem:
var
  jpg: Tjpegimage;
begin
  if not(ADOQImoveis.State in [dsEdit, dsInsert]) then
  begin
    cdsFotosImoveis.Append;
    OpenPictureDialog1.InitialDir := 'C:\Imob\Banco de Imagens';{Verifique se este é o caminho onde vais guardar as fotos}
    if OpenPictureDialog1.Execute then
    begin
      if radiogroup1.ItemIndex = 1 then
      begin
        jpg:= Tjpegimage.Create;
        jpg.LoadFromFile(openpictureDialog1.FileName);
        Clipboard.Assign(jpg);
        Dbimage1.PasteFromClipboard;
        jpg.Free;
      end
      else
        cdsFotosImoveisFoto.LoadFromFile(OpenPictureDialog1.FileName);
    end;
    cdsFotosImoveis.Post;
  end
  else
  begin
    ShowMessage('Salve os dados do imóvel antes de inserir uma foto');
    Abort;
  end;
end;
Editar uma imagem
var
  jpg: Tjpegimage;
begin
  if not(ADOQImoveis.State in [dsEdit, dsInsert]) then
  begin
    cdsFotosImoveis.Edit;
    OpenPictureDialog1.InitialDir := 'C:\Imob\Banco de Imagens';{Verifique se este é o caminho onde vais guardar as fotos}
    if OpenPictureDialog1.Execute then
    begin
      if radiogroup1.ItemIndex = 1 then
      begin
        jpg:= Tjpegimage.Create;
        jpg.LoadFromFile(openpictureDialog1.FileName);
        Clipboard.Assign(jpg);
        Dbimage1.PasteFromClipboard;
        jpg.Free;
      end
      else
        cdsFotosImoveisFoto.LoadFromFile(OpenPictureDialog1.FileName);
    end;
    cdsFotosImoveis.Post;
  end
  else
  begin
    ShowMessage('Salve os dados do imóvel antes de inserir uma foto');
    Abort;
  end;
end;
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 26/8/2010 06:38:15 PM
 

Vlw, Funcionou, testei usar so ele sem deletar o imovel e removeu todas as fotos.

So vai ficar em aberto o problema do aquivo ".cds" que aloca as imagens, não diminuir de tamanho(ou voltar a 1kb no quando deleto tudo no presente caso), eu coloquei varios imoveis com fotos, e foi pra 40MB, deletei tudo e continua com 40MB. Quando acrescento novos imoveis continua aumentando, foi pra 48MB no caso.

Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 29/8/2010 08:39:36 PM
 

Alguem sabe explicar porque esse ".cds" fica tão grande?, ele ta multiplicando por 10x o tamanho das imagens, ta impossivel, coloquei 10 imagens de 2MB e o arquivo foi pra 200MB, não tem HD que aguente, alguem sobe como resolver ou modificar esse problema?

Coloquei umas 30 imagens e deu um erro de memoria quando fechei o programa, não sei o motivo.

Renato
 


País: Brasil
Estado: GO
Cidade: luziania
Mensagens: 122
 Postado em: 29/8/2010 10:37:12 PM
 
Aproveitando o embalo do amigo eu gostaria de saber como jogar as fotos com o openpicture? Preciso colocar fotos no formato Jpeg, mas tento jogar jpeg e nao funfa. Poderia postar o código ai com comentários isso é claro se puder.
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 1/9/2010 01:16:09 PM
 

Eu troquei os DBImage por EDBImage e tentei usar o .cds, tirei as conversões para .BMP ja que o EDBImage aceita Jpeg mas fica dando erro agora acusando que a imagem não é Bitmap(algo assim).

o .cds não aceita guardar jpeg?

ERILEY VILAGRANDE BARBOSA
 

 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
 Postado em: 1/9/2010 02:07:34 PM
 
O cds aceita qualquer formato, pois, o campo é Blob, não conheço este componente, mas volte o código para o inicial que tava funcionando.
Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 1/9/2010 05:32:09 PM
 

Do modo anterior estava impossivel, 20MB de imagem virando 200MB, o programa lagava muito quando exibia as imagens no CtrlGrid, estranhamente ele da ainda mais lag quando usei o access para guardar as imagens JPEG, 20MB virou 40MB no access no entanto eu tinha lags de 5s ou mais nos botões nos forms com imagens.

EDBImage:

Esse componente tem propriedades para redimencionar as imagens sosinho, ou seja não importa a resolução, pode ser qualquer uma. E ele aceita qualquer tipo de imagem evitando a necessidade de converter para bmp.

De resto ele funciona igual ao DBImage.

Segue o codigo para gravar com clientdataset alterado abaixo, tirei apenas as partes de conversão para JPEG para BMP ja que o EDBImage não presisa disso.

Adicionar imagem:

[CODE]

begin
   if not(DM.ADOQImoveis.State in [dsEdit, dsInsert]) then
   begin
    DM.cdsFotosImoveis.append;
    OpenPictureDialog1.InitialDir := 'A:\Projetos\Imobiliaria';{Verifique se este é o caminho onde vais guardar as fotos}
   if OpenPictureDialog1.Execute then
   DM.cdsFotosImoveisFoto.LoadFromFile(OpenPictureDialog1.FileName);
   DM.cdsFotosImoveis.Post;
   end
  else
  begin
   ShowMessage('Salve os dados do imóvel antes de inserir uma foto');
   Abort;
  end;
end;[/CODE]


Fiz algo errado?

Abaixo o codigo que usei para guardar as imagens no access, funcionou mas fica muito lagado o programa.

 

[CODE]

begin
 if not(DM.ADOQImoveis.State in [dsEdit, dsInsert]) then
  begin
   DM.ADOFotosImoveis.insert;  
   OpenPictureDialog1.InitialDir := 'A:\Projetos\Imobiliaria';{Verifique se este é o caminho onde vais guardar as fotos}
    if OpenPictureDialog1.Execute then
     DM.ADOFotosImoveisFoto.LoadFromFile(OpenPictureDialog1.FileName);

    DM.ADOFotosImoveis.Edit;
    DM.ADOFotosImoveis.Post;
    end
  else
  begin
  ShowMessage('Salve os dados do imóvel antes de inserir uma foto');
   Abort;
  end;
end;[/CODE]

Sera que fica muito pesado ficar pegando as fotos do Banco de dados? no caso testei com imagens de 2MB que são bem grandes até.

Artur de Abreu Carlos
 


País: Brasil
Estado: RJ
Cidade: rio
Mensagens: 39
 Postado em: 2/9/2010 01:22:14 PM
 

Eriley teria como mostrar como ficaria seu codigo para pegar apenas o caminho da imagem ao invez da imagem em si?

Devido aos problemas que estou tendo em gravar a imagem diretamente no BD(ta ficando gidante e lagando o programa) vou tentar um outro metodo qeu descrevi no topico abaixo. Nele quero transferir a imagem pra uma pasta com Nomeada com o IDdoImovel no mesmo diretorio do executavel e gravar na BD o caminho até essa imagem.

O problema vai ser na hora se fazer um programa desatualizado se atualizar no programa principal do servidor, em vez de copiar um arquivo vom as imagens vai ter que copiar a pasta "Fotos" que contem todas as fotos cadastradas no programa. Mas um problema de cada vez.

Segue o link do outro topico aonde coloquei o que gostaria de fazer.

http://www.devmedia.com.br/forum/delphi/385511-Como-criar-pastas-e-mover-arquivos--jpeg-com-o-delphi.html 

web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03