Fórum Se for código de barra XXXXXX, então a imagem será YYY.jpg #346790
28/09/2007
0
Como que eu poderia fazer isso? É para um PDV de um supermercado... uma tela de consulta de preços. Digito o código de barras, dou um ENTER, e aparece o PRODUTO, PREÇO e a IMAGEM... O produto e o preço, está funcionando. Agora, como que eu faço para aparecer a imagem?
Sendo que a imagem, não ficará salva no banco, mas sim, na pasta do *.EXE do sistema, na pasta IMGPRODUTOS...
Desde já agradeço.
Obrigado!
Lucas_spohr
Curtir tópico
+ 0Posts
28/09/2007
Mayron Cachina
como vc esta cadastrando essa imagem??? usando um caminho no banco???
ou com o mesmo ´numero´ do codigo de barras????
image1.picture.loadfromfile()
vc ta usando isso????
Gostei + 0
28/09/2007
Lucas_spohr
É o seguinte... A imagem, não ficará gravada no banco, não.
O produto, o preço e o próprio código de barras, ficarão gravados no banco. A imagem, neste caso, ficará numa NovaPasta, no mesmo lugar onde está o executável do projeto. Dentro desta ´NovaPasta´, ficarão as imagens dos produtos. Cada imagem, terá como nome, os números de seu determinado código de barras.
Código de Barras: 001212121212
Produto: Pão Sanduíche
Preço: R$ 1,00
Imagem: \NovaPasta\001212121212.jpg
Espero ter sido claro...
Obrigado!
Gostei + 0
28/09/2007
Mayron Cachina
é justamente como eu te falei...
vc vai ter q ter um TImage e no evento q esta pegando informações do banco vc vai colocar esse codigo....
img := local do banco + numero do codigo de barras.jpg Image1.Picture.LoadFromFile(img);
pelo menos foi isso q eu entendi q vc queria...
Gostei + 0
28/09/2007
Lucas_spohr
por exempo, o executável da minha aplicação está no caminho:
C:\pasta\Pdv
e o banco:
C:\dadospdv\dados
já as imagens, ficariam ali, na pasta do executável da aplicação, com uma pasta com o nome de imagens:
C:\pasta\Pdv\imagens
Como que ficaria o código, juntando os caminhos do banco pra ficar com o número do código de barras num jpg?
Obrigado.
Gostei + 0
28/09/2007
Mayron Cachina
1º esqueça o banco :D ele n servirá de nd pra a gente agora....
2º o método [b:c1a06bfc52]ExtractFilePath(Application.ExeName)[/b:c1a06bfc52] retorna uma String com o caminho do aplicativo... no seu exemplo o C:\pasta\Pdv, com isso vc pode levar seu aplicativo pra qualquer canto e ele vai reconhecer... se for em D:\ ou E:\, ele dará o caminho...
3º vamos a imagem...
O componente TImagem tem o método [b:c1a06bfc52]Picture.LoadFromFile(String)[/b:c1a06bfc52] aqui ele carrega uma imagem de um arquivo qualquer do tipo BMP... pra carregar um JPG vc tem q adicionar:
uses JPG;
pronto agora vamos a carregamento da imagem....
vc vai adicionar na procedure/funcao que vc ta fazendo a leitura no banco a seguinte linha:
var LocImg : String; ... LocImg := ExtractFilePath(Application.ExeName)+´\imagens´; //variavel q vai guardar o caminho da sua aplicação. Image1.Picture.LoadFromFile(LocImg + [b]COD_BARRA[/b] + ´.jpg´); ...
bem isso é um exemplo... onde tem [b:c1a06bfc52]COD_BARRA[/b:c1a06bfc52] vc vai colocar o numero/nome do arquivo que será lido pela imagem...
pronto, com isso acho que resolve... n esqueça de colocar o TImage no form :D
Gostei + 0
29/09/2007
Lucas_spohr
só que... salvei uma imagem de um produto, com o nome 1212.jpg. Porém, na minha aplicação, ao fazer a busca da imagem, ela vai buscar pelo código de barra 0000000001212.jp´g
Pergunto:
Como que eu poderia fazer, para não buscar esses ´zeros´ no início do nome do *.jpg, buscando somente o 1212, forma com que eu salvei a imagem?
E o meu, muito obrigado!!!
Gostei + 0
29/09/2007
Mayron Cachina
o Padrão é esse mesmo???
vc pode usar o comando COPY()...
ele funciona assim....
Copy( String , INICIO , FIM )
com ele vc pode pegar so o 1212.jpg... para saber mais sobre ele olhe aqui http://www.delphibasics.co.uk/RTL.asp?Name=Copy
seguinte...n tenho como testar aqui mais usa esse codigo, se esse numero for padrão com os 00000 vai da certo...
Copy(COD_BARRA, 10,18)
bem acho que ai ta pegando so o 1212.jpg, se n tiver certo vc vai testando a sequencia de numeros... n deixe de ler essa página q eu passei ele explica o Copy,
Blz!?
Gostei + 0
29/09/2007
Adriano Santos
var LocImg : String; ... LocImg := ExtractFilePath(Application.ExeName)+´\imagens´; //variavel q vai guardar o caminho da sua aplicação. Image1.Picture.LoadFromFile(LocImg + [b]COD_BARRA[/b] + ´.jpg´); ...
Só um detalhe aqui, se me permitem, o ExtractFilePath(Application.ExeName) já retorna o diretório do executável com barra no final, ou seja, não é necessário concatenar com ´\imagens´. Talvez dê errinho ai, mas é moleza de resolver. :wink:
Se for só números o nome da sua imagem dê uma formatada com a função StrToFloat(). Veja:
procedure TForm1.Button1Click(Sender: TObject); var CodBarra : Integer; NomeFoto: string; begin CodBarra := 0000123123; NomeFoto := FloatToStr(CodBarra); Edit1.Text := NomeFoto; end;
Ou ainda criando uma função pra retirar os zeros e retornar já certinho o nome da imagem:
procedure TForm1.Button2Click(Sender: TObject); var CodBarra : string; NomeFoto: string; function RetornaNomeFoto(ACodBarra: string): string; var I : Integer; S : string; begin for I := 1 to Length(ACodBarra) do if not (ACodBarra[I] = ´0´) then S := S + ACodBarra[I]; Result := S; end; begin CodBarra := ´0000123123´; NomeFoto := RetornaNomeFoto(CodBarra); Edit1.Text := NomeFoto; end;
Gostei + 0
29/09/2007
Lucas_spohr
fiz um teste com a função que vc passou... Até que funcionou!
Mas como que eu poderia implementar este, em meu projeto? Desculpe, mas sou novato ainda na programação! ehehe complica mais, quando se é um projeto pronto, tendo que neste, fazer as alterações! hehe
LocImg := ExtractFilePath(Application.ExeName)+´\produtos\´;
Image2.Picture.LoadFromFile(LocImg + PDO.Produto.FIELDBYNAME(´BARRA´).AsString + ´.jpg´);
Desde já agradeço.
Obrigado!
Gostei + 0
29/09/2007
Lucas_spohr
Após feita a função, daí no código acima, colocar a função junto do LocImg... etc, etc...
obrigado!
Gostei + 0
29/09/2007
Mayron Cachina
Usa a função que o Adriano disse...
RetornaNomeFoto() e tira a barra do produtos como Adriano disse, deixando ele assim:
LocImg := ExtractFilePath(Application.ExeName)+´produtos\´;
vc pode usar a funcao assim:
LocImg := ExtractFilePath(Application.ExeName)+´produtos\´; Image2.Picture.LoadFromFile(LocImg + RetornaNomeFoto(PDO.Produto.FIELDBYNAME(´BARRA´).AsString) + ´.jpg´);
para deixar o codigo menos confuso hehehehe:
LocImg := ExtractFilePath(Application.ExeName)+´produtos\´; nomeFoto := RetornaNomeFoto(PDO.Produto.FIELDBYNAME(´BARRA´).AsString); Image2.Picture.LoadFromFile(LocImg + nomeFoto + ´.jpg´);
eh isso Adriano? me corrija se tiver errado....
Tenta isso ae ...
Gostei + 0
29/09/2007
Lucas_spohr
function RetornaNomeFoto(ACodBarra: string): string;
var
I : Integer;
S : string;
CodBarra : string;
NomeFoto: string;
begin
for I := 1 to Length(ACodBarra) do
if not (ACodBarra[I] = ´0´) then
S := S + ACodBarra[I];
Result := S;
CodBarra := PDO.Produto.fieldbyname(´BARRA´).AsString;
NomeFoto := RetornaNomeFoto(CodBarra);
end;
............
procedure...........
var .....
begin.....
RetornaNomeFoto(ACodBarra:string); // pra usar a Function
LocImg := ExtractFilePath(Application.ExeName)+´produtos\´;
nomeFoto := RetornaNomeFoto(PDO.Produto.FIELDBYNAME(´BARRA´).AsString);
Image2.Picture.LoadFromFile(LocImg + nomeFoto + ´.jpg´);
end;
Mas não compila!!
Eu digito o nome da função RetornaNomeFoto, daí depois do RetornaNomeFoto, dentro dos parenteses, aparece uma ´observação´ para escrever o ACodBarra:String, daí digito isso, e dá erro!!
O que estou fazendo de errado?
Obrigado!
Gostei + 0
29/09/2007
Mayron Cachina
n seria function TFORM1.RetornaNomeFoto......
TForm1 seria o nome de seu formulario...
vc ta declarando ele la na classe do form....
type Tform1 = class(TForm) .... function RetornaNomeFoto(ACodBarra: string): string; ...
Gostei + 0
01/10/2007
Lucas_spohr
parece tão simples isso! tenho que dar uma estudada nisso... (if, while, etc, etc). Aproveitando o tópico, gostaria de já ir perguntando algum material bom, que fale sobre isso...
Obrigado!
Gostei + 0
01/10/2007
Lucas_spohr
Fiz da seguinte forma, com ajuda de um colega meu:
function RetornaNomeFoto(ACodBarra: string): string;
var
I : Integer;
S : string;
begin
for I := 1 to Length(ACodBarra) do
if not (ACodBarra[I] = ´0´) then
S := S + ACodBarra[I];
Result := S;
end;
// Para usar a function, etc, et...
RetornaNomeFoto(PDO.Produto.FieldByName(´BARRA´).AsString);
LocImg := ExtractFilePath(Application.ExeName)+´produtos\´;
Image2.Picture.LoadFromFile(LocImg + RetornaNomeFoto(PDO.Produto.FieldByName(´BARRA´).AsString) + ´.jpg´);
Só que agora, o que eu precisaria fazer, é o seguinte:
Exemplo:
Procuro pelo código de barras 109. Daí na imagem, a função está removendo o 0, ficando como 19.jpg. Como que eu poderia incrementar a minha function, fazendo com que elimine apenas os ´zeros´ iniciais, sem remover os ´zeros´ do ´meio´?
grato...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)