[Dúvida] Como salvar a pasta imagens

Delphi

04/05/2012

Olá amigos,
Estou iniciando em Delphi e este é meu primeiro post aqui.
Estive vendo sobre salvar imagens e vi que pela recomendação de 99% é melhor salvar somente o caminho da imagem.
Agora que vem a minha dúvida... Como farei para salvar estas imagens da pasta para por no instalador?

Por exemplo:

Projeto fotos em: C:\Projeto\Imagens
Posso criar um arquivo rar/zip e acrescentar no instalador?

Obrigado à todos!
.:renato:.

.:renato:.

Curtidas 0

Respostas

Bruno Leandro

Bruno Leandro

04/05/2012

essas imagens são salvas pelo usuario ou são imagens do sistema, caso seja do sistema voce pode deixa-las configuradas e serão geradas no executavel ou em uma dll por exemplo e carrega-las em tempo de execução, caso seja salvas pelos usuarios, uma ideia é salvas no banco de dados, voce pode colocar limitação de tamanho ex: 1mb por imagem, ou criar uma função para reduzir a qualidade claro dependendo da situação, essa ideia sugerida de deixa-las em uma pasta permite que qualquer pessoa com acesso ao local exclua as imagens, e nao haverá como saber quem fez as exclusões, no caso de um arquivo zip o mesmo pode acontecer, lembrando ainda, que os backups no banco de dados não irá possuir essas imagens.
GOSTEI 0
.:renato:.

.:renato:.

04/05/2012

Olá BRUNO LEANDRO,
Desculpe a demora em responder!
Bom, meu projeto já vai começar com aproximadamente 600 imagens e o usuário vai poder pór mais imagens (a intenção é que ponha mais imagens).

Então... Qual seria a melhor opção? Acredito que deve ser salvar a pasta que elas vão ficar né?!
Agora como faço isso rs rs rs
Pode em dar uma idéia de onde posso buscar sobre este assunto?

Muito Obrigado!
GOSTEI 0
Bruno Leandro

Bruno Leandro

04/05/2012

certo, se calcularmos 600 imagens a 1mb são 600mb ou seja, um espaço consideravel, mas no caso de os usuarios poderem incluir novas imagens caso exista varias maquinas e varios usuarios que acessem o sistema, talvez seja melhor pensar em uma estrutura no banco de dados, pois quando um usuario armazenar uma imagem em uma Maquina A, os demais usuarios nao terão acesso, dependendo do local de armazenamento, ou seja se for feito o armazenamento local, tem que haver o controle da maquina que esta armazenando para ter acesso a uma pasta compartilhada, e ainda problemas como mudar o ip, maquina desligada, entre outros, no entanto é possivel atraves do armazenamento em um servidor com um diretorio para armazenar essas imagens
GOSTEI 0
.:renato:.

.:renato:.

04/05/2012

Olá BRUNO LEANDRO,
Este programinha não vai ficar em rede não...
GOSTEI 0
William

William

04/05/2012

Bom Renato, vamos resolver um problemas por vez, levando em consideração que o sistema não vai rodar em rede vamos lá:

1º Vc mencionou que o programa vai conter 600 imagens de inicio, se vc usar um instalador então coloque essas imagens dentro do diretório raiz de instalação e claro o caminho das mesmas no banco.

2º Para gravar o caminho das imagens no banco não requer muito trabalho, supondo que o usuário vai informar o caminho da imagem através de um componente TDialog, então basta pegar o caminho com a propriedade FileName.

A idéia inicial é essa, qualquer dúvida posta aí ...
GOSTEI 0
.:renato:.

.:renato:.

04/05/2012

Olá wllfl,
Acho que você me ajudou muito vamos ver se eu entendi:

1 - Eu crio uma pasta dentro da pasta do sistema para por as imagens;
2 - No sistema eu vou inserindo as imagens normalmente para gravar o caminho de cada uma, assim na hora que o sistema for instalado em outra máquina o caminho será reconhecido;
3 - Quando você diz um componente Tdialog é o mesmo que OpenPictureDialog ?
Tô caminho certo?

E qual seria o melhor instalador para eu fazer esto? Lembrando que eu terei que por também o FireBird para o caso da máquina não o possuir.

Muito Obrigado amigos!!
GOSTEI 0
.:renato:.

.:renato:.

04/05/2012

Alguém?
GOSTEI 0
Bruno Leandro

Bruno Leandro

04/05/2012

Ola renato conseguiu implementar os passos citados ? com os caminhos do arquivos armazenados no banco de dados. voce tem que criar uma função da selecionar as imagens, validar se a imagem selecionada ainda consta ou foi excluida, em relação ao instalador citado, eu acredito que seja no empacotamento do seu projeto, ex o inno setup.
GOSTEI 0
.:renato:.

.:renato:.

04/05/2012

Então Bruno quero saber se esses passos abaixo são os passos que devo seguir.

1 - Eu crio uma pasta dentro da pasta do sistema para por as imagens;
2 - No sistema eu vou inserindo as imagens normalmente para gravar o caminho de cada uma, assim na hora que o sistema for instalado em outra máquina o caminho será reconhecido;
3 - Quando você diz um componente Tdialog é o mesmo que OpenPictureDialog ?
Tô caminho certo?

E qual seria o melhor instalador para eu fazer esto? Lembrando que eu terei que por também o FireBird para o caso da máquina não o possuir.

Obrigado!
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

04/05/2012

Olá Renato vou te ajudar em alguns pontos aqui.

1 - Instalador para o Firebird e tal, usa o InnoSetup.
2 - OpenDialog ou PictureDialog, vão te ajudar sim!!!
3 - Cuidado se você for acessar as imagens em rede(pois você terá que ver o caminho do servidor, mapear a pasta, etc.), agora se elas forem ser acessadas localmente sem stress.
4 - Eu criaria junto com o exe uma pasta chamada Images ou Imagem ou Img, mas junto com o exe para ficar mais fácil.

Um abraço....
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

04/05/2012

O instalador vc configura isso já com suas imagens, agora com relação a como vc vai salvar as imagens, eu tenho um programa que gerencia de cd´s e dvd tenho mais de 5.000 registros e funciona levinho e o codigo é muito simples.
Para carregar a imagen no evento ondatachange coloco este codigo.
var
  r: integer;
  g: string;
  Caminho : String;
begin
  r:= DB_WIIGS_WII_CODIGO.Value;
  g:=format(%5.5d,[r]);
  Image2.Picture := nil;
  Caminho := C:\Arquivos de programas\Gigatel Software\GSLOC\Imagens\WII\+g+.jpg;
    if FileExists(caminho)then
    Image2.Picture.LoadFromFile(caminho)
  else
    begin
    Image2.Picture.LoadFromFile(C:\Arquivos de programas\Gigatel Software\GSLOC\Imagens\nao_disponivel.jpg);
    end;
  end;



e para salvar uso este:

  Image4.Picture.SaveToFile(C:\Arquivos de programas\Gigatel Software\GSLOC\Imagens\WII\+Label17.Caption+.jpg);



uso um image para carrregar a imagem e é feita desta forma;

  If Not OpenPictureDialog1.Execute Then
    Exit;
    If DS_WII.DataSet.State = dsBrowse Then
    DS_WII.DataSet.Edit;
    Image2.Picture := nil;
    Image2.Picture.LoadFromFile( OpenPictureDialog1.FileName );


Como pode notar não usei campo para armazenar o endereço, más manipulei o nome da imagem igual ao codigo do registro..não usei filtro e nada, fiz um tratamento para que quando não tivesse a imagem com aquele numero fosse mostrado uma outra imagem com desenho de imagem não cadastrado....para vc botar em rede vc deverá criar uma função que pega o enderço. más é tranquilo tbm..flw espero ter ajudado..
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

04/05/2012

o instalador vc configura isso já com suas imagens, agora com relação a como vc vai salvar as imagens, eu tenho um programa que gerencia de cd´s e dvd tenho mais de 5.000 registros e funciona levinho e o codigo é muito simples.
para carregar a imagen no evento ondatachange coloco este codigo.

var
r: integer;
g: string;
caminho : string;
begin
r:= db_wiigs_wii_codigo.value;
g:=format(%5.5d,[r]);
image2.picture := nil;
caminho := c:\arquivos de programas\gigatel software\gsloc\imagens\wii\+g+.jpg;
if fileexists(caminho)then
image2.picture.loadfromfile(caminho)
else
begin
image2.picture.loadfromfile(c:\arquivos de programas\gigatel software\gsloc\imagens\nao_disponivel.jpg);
end;
end;



e para salvar uso este:


image4.picture.savetofile(c:\arquivos de programas\gigatel software\gsloc\imagens\wii\+label17.caption+.jpg);



uso um image para carrregar a imagem e é feita desta forma;


if not openpicturedialog1.execute then
exit;
if ds_wii.dataset.state = dsbrowse then
ds_wii.dataset.edit;
image2.picture := nil;
image2.picture.loadfromfile( openpicturedialog1.filename );


como pode notar não usei campo para armazenar o endereço, más manipulei o nome da imagem igual ao codigo do registro..não usei filtro e nada, fiz um tratamento para que quando não tivesse a imagem com aquele numero fosse mostrado uma outra imagem com desenho de imagem não cadastrado....para vc botar em rede vc deverá criar uma função que pega o enderço. más é tranquilo tbm..flw espero ter ajudado..


O Label17.Caption e onde é mostrado o codigo do registro, uso ele por já ter a sua formatação tratada, vc pode substituir pelo seu campo código direto do seu banco de dados..
GOSTEI 0
POSTAR