Se for código de barra XXXXXX, então a imagem será YYY.jpg
Olá!
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!
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
Curtidas 0
Respostas
Mayron Cachina
28/09/2007
Olá!
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!
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
Lucas_spohr
28/09/2007
Opa!
É 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!
É 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
Mayron Cachina
28/09/2007
então ...
é 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....
pelo menos foi isso q eu entendi q vc queria...
é 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
Lucas_spohr
28/09/2007
neste caso, seria criar uma variável com o nome de img?
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.
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
Mayron Cachina
28/09/2007
Blz, vamos lá....
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:
pronto agora vamos a carregamento da imagem....
vc vai adicionar na procedure/funcao que vc ta fazendo a leitura no banco a seguinte linha:
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
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
Lucas_spohr
28/09/2007
blz cara! quaaase deu certo!
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!!!
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
Mayron Cachina
28/09/2007
0000000001212.jpg
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
Adriano Santos
28/09/2007
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:
blz cara! quaaase deu certo!
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!!!
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
Lucas_spohr
28/09/2007
blz, Adriano!?
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!
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
Lucas_spohr
28/09/2007
digo.. implementar no projeto, no sentido de:
Após feita a função, daí no código acima, colocar a função junto do LocImg... etc, etc...
obrigado!
Após feita a função, daí no código acima, colocar a função junto do LocImg... etc, etc...
obrigado!
GOSTEI 0
Mayron Cachina
28/09/2007
blz, Adriano!?
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!
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
Lucas_spohr
28/09/2007
Estou fazendo assim:
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!
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
Mayron Cachina
28/09/2007
function RetornaNomeFoto(ACodBarra: string): string;
n seria function TFORM1.RetornaNomeFoto......
TForm1 seria o nome de seu formulario...
vc ta declarando ele la na classe do form....
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
Lucas_spohr
28/09/2007
e agora, como que eu faço pra usar a function e passar os parâmetros??
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!
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
Lucas_spohr
28/09/2007
aee!!
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...
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
Mayron Cachina
28/09/2007
// Para usar a function, etc, et...
[b:aa4d7b9a76] RetornaNomeFoto(PDO.Produto.FieldByName(´BARRA´).AsString);[/b:aa4d7b9a76]
LocImg := ExtractFilePath(Application.ExeName)+´produtos\´;
Image2.Picture.LoadFromFile(LocImg + RetornaNomeFoto(PDO.Produto.FieldByName(´BARRA´).AsString) + ´.jpg´);
o que está em negrito vc ta fazendo mais n ta guardando, então n ta adiantando de nada....
tenta usar a função COPY.. realmente essa função que o Adriano falou era pra tirar todos os 0 e isso n eh bom né :D
tenta usar o copy, como eu disse...
ai posta o resultado ai...
GOSTEI 0
Adriano Santos
28/09/2007
Pessoal,
É só dar uma adaptada. Ao invés de copiar cada caracter para uma variável basta apenas encontrar o primeiro caractere diferente de zero e mandar copiar dele +1 até o final da string:
Estou sem Delphi aqui pra testar, mas é fácil de corrigir caso tenha erros. ;)
É só dar uma adaptada. Ao invés de copiar cada caracter para uma variável basta apenas encontrar o primeiro caractere diferente de zero e mandar copiar dele +1 até o final da 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 begin S := S + Copy(ACodBarra, I+1, Length(ACodBarra)); Result := S; Break; end; end;
Estou sem Delphi aqui pra testar, mas é fácil de corrigir caso tenha erros. ;)
GOSTEI 0
Lucas_spohr
28/09/2007
aeee!!
Consegui! Ficou assim:
function RetornaNomeFoto(ACodBarra: string): string;
var
I, Posicao : Integer;
begin
for I := 1 to Length(ACodBarra) do begin
if not (ACodBarra[I] = ´0´) then begin
Posicao := I;
Break;
end;
end;
Result := Copy(ACodBarra, Posicao, 13);
end;
LocImg := ExtractFilePath(Application.ExeName)+´produtos\´;
if (FileExists(LocImg + RetornaNomeFoto(PDO.Produto.FieldByName(´BARRA´).AsString) + ´.jpg´)) then
RetornaNomeFoto(PDO.Produto.FieldByName(´BARRA´).AsString);
Image2.Picture.LoadFromFile(LocImg + RetornaNomeFoto(PDO.Produto.FieldByName(´BARRA´).AsString) + ´.jpg´);
END
ELSE
BEGIN
SHOWMESSAGE(´CÓDIGO NÃO CADASTRADO DIGITE X´);
EDIT1.TEXT:=´´;
EDIT2.TEXT:=´´;
EDIT3.TEXT:=´´;
Image2.Destroy;
Só que, agora é o seguinte:
Quando digito o código de barras 1212, aparece o produto, preço e a imagem. Daí coloco um produto que não tenho cadastrado, aí limpa os edits e a imagem, normalmente. Mas daí depois disso, se eu for colocar novamente um produto com código de barras existente, dá erro, por causa da imagem! Access violation...
O que poderia ser? Há uma outra forma de limpar o TIMAGE, fora o Destroy? Pois acho que é aí o problema!
Obrigado!!!
Consegui! Ficou assim:
function RetornaNomeFoto(ACodBarra: string): string;
var
I, Posicao : Integer;
begin
for I := 1 to Length(ACodBarra) do begin
if not (ACodBarra[I] = ´0´) then begin
Posicao := I;
Break;
end;
end;
Result := Copy(ACodBarra, Posicao, 13);
end;
LocImg := ExtractFilePath(Application.ExeName)+´produtos\´;
if (FileExists(LocImg + RetornaNomeFoto(PDO.Produto.FieldByName(´BARRA´).AsString) + ´.jpg´)) then
RetornaNomeFoto(PDO.Produto.FieldByName(´BARRA´).AsString);
Image2.Picture.LoadFromFile(LocImg + RetornaNomeFoto(PDO.Produto.FieldByName(´BARRA´).AsString) + ´.jpg´);
END
ELSE
BEGIN
SHOWMESSAGE(´CÓDIGO NÃO CADASTRADO DIGITE X´);
EDIT1.TEXT:=´´;
EDIT2.TEXT:=´´;
EDIT3.TEXT:=´´;
Image2.Destroy;
Só que, agora é o seguinte:
Quando digito o código de barras 1212, aparece o produto, preço e a imagem. Daí coloco um produto que não tenho cadastrado, aí limpa os edits e a imagem, normalmente. Mas daí depois disso, se eu for colocar novamente um produto com código de barras existente, dá erro, por causa da imagem! Access violation...
O que poderia ser? Há uma outra forma de limpar o TIMAGE, fora o Destroy? Pois acho que é aí o problema!
Obrigado!!!
GOSTEI 0
Mayron Cachina
28/09/2007
image1.Picture := nil;
nunca use o destroy, ele vai detonar o seu componente... vc n vai poder mais usar ele :D
GOSTEI 0
Lucas_spohr
28/09/2007
RESOLVIDO!
Obrigado a todos!
Qualquer coisa, posto aí...
Obrigado a todos!
Qualquer coisa, posto aí...
GOSTEI 0