Fórum Procedure Autoexecutável #294423
04/09/2005
0
Uma DBGrid me mostra o campo principal de uma tabela, e nela navego com as teclas de setas. Algumas DBEdit me monstram os demais campos do registro selecionado na DBGrid. Até aí tudo bem, mas um dos campos da tabela contem o nome de um arquivo .JPG, que está na mesma pasta da tabela. Coloquei um DBImage no Form para que me mostre a figura correspondente àquele registro. Consegui fazer isso, mas só que tenho que clicar em um Button para executar a procedure.
Existe uma forma de eliminar esse procedimento de clicar no Button para que a imagem seja mostrada conforme navego no DBGrid?
Agradeço a ajuda.
Cps.art
Curtir tópico
+ 0Posts
04/09/2005
Michael
Claro que não! ;-)
Bom, para mim é estranho a imagem não carregar automaticamente, uma vez que controles [b:b0e7989ff7]data-aware[/b:b0e7989ff7] são conectados ao DataSet e, portanto, ficam ´cientes´ do que acontece nele (daí o nome, Data-aware).
Mas posso estar enganado. Então, é só vc colocar a chamada à sua procedure que exibe a imagem em algum evento da DBGrid que seja chamado sempre que o registro atual mudar. De cabeça eu não me lembro de nenhum, mas vc pode usar o evento [b:b0e7989ff7]OnClick [/b:b0e7989ff7]para simular isso. Porém, se houver algum evento específico para a mudança de registro, que eu aposto muito que tenha, é mais indicado que vc chame sua função de lá.
Qualquer coisa é só postar.
[]´s
Gostei + 0
04/09/2005
Cps.art
Já fiz isso e não funciona.
Na verdade estou usando Tabelas de um sistema em Clipper (.DBF) e para isso uso o componente HALCYON, que utiliza os indexadores (.NTX). Esse componente permite que eu use as tabelas e os indexadores nos dois sistemas (Clipper e Delphi), um sempre ´pegando´ de onde o outro parou. Acho que está aí o problema. As DBEdit são conectadas diretamente ao Table1, assim como o DBImage (DBImage: TDBImage), mas na procedure de ´colocar´ a imagem no DBImage o Delphi cria o type: [b:2ed6ea87aa]HalcyonDataSet1ACODVFOTO: TStringField;[/b:2ed6ea87aa], onde o ACODVFOTO é o nome do campo da tabela que contem o nome do JPG.
A procedure do Button ficou assim:
[b:2ed6ea87aa]procedure TForm1.Button1Click(Sender: TObject);
begin
DBImage1.Picture.LoadFromFile(HalcyonDataSet1ACODVFOTO.value);
end;[/b:2ed6ea87aa]
O problema agora é descobrir como ligar o [b:2ed6ea87aa]HalcyonDataSet1ACODVFOTO[/b:2ed6ea87aa] ao [b:2ed6ea87aa]DBImage[/b:2ed6ea87aa] para que se possa suprimir a necessidade do Button, como vc. disse.
Agradeço muito sua ajuda.
Gostei + 0
04/09/2005
Michael
No evento OnClick da DBGrid não funcionou? Deveria funcionar... :-(
[]´s
Gostei + 0
04/09/2005
Dbergkamps
Olhei o seu tópico. Pode ter sido só um esquecimento na hora da postagem, mas pq vc nao coloca um DataSource liga ao DataSet e so então ligar o DBImage ao DataSource.
Gostei + 0
05/09/2005
Maikiperin
acredito q a solução seria vc interceptar os eventos (seta p/ cima e p/ baixo) no dbgrid e assim disparar a procedure tipo:
if(Key = VK_DOWN)or(Key = VK_UP) then
Button1.onclick(self);
Gostei + 0
05/09/2005
Michael
Ainda acho muito estranha o controle não exibir a imagem automaticamente do registro atual. Em todos os casos, continuo achando q uma solução prática seria no evento OnClick do grid, ou, como já mecionei, algum outro que seja disparado sempre que o cursor mudar dentro do DataSet. O evento OnClick é chamado quando a grid muda de linha, ou seja, via teclado ou mouse.
[]´s
Gostei + 0
05/09/2005
Maikiperin
não entendi meu amigo (Michael)....como assim ?? a partir da hora q estabeleço o seguinte comando:
[b:4d594bdfb8]Button1.onclick(self);[/b:4d594bdfb8]
eu disparo a procedure como desejado pelo colega cps.art.
pode ser q eu não tenha interpretado corretamente a dúvida do colega !!
tb acredito q pelo fato de o colega estar usufruindo de controles data-aware, isso teria q ser efetuado de uma forma automática, claro observando se as devidas associações dos componentes/banco estiverem corretas !!
Att, Maiki Perin.
Gostei + 0
05/09/2005
Michael
Se ele apenas interceptar as teclas Up e Down para mudar a imagem associada ao registro, então se o usuário selecionasse alguma linha da DBGrid via mouse, ou seja, clicando sobre ela, ao invés do teclado, então o código não seria executado, pois ele apenas verifica as teclas pressionadas.
[]´s
Gostei + 0
05/09/2005
Maikiperin
OnCellClick;
OnMouseUp;
Att, Maiki Perin.
Gostei + 0
05/09/2005
Michael
[]´s
Gostei + 0
05/09/2005
Martins
Salve grande [b:7d7c9acacf]Michael !!!![/b:7d7c9acacf]
olha só estou utilizando Delphi 6, e no meu DbGrid não tem o evento OnClick, tenho OnCellClick, OnDblClick, etc...
Agora é muito estranho q a imagem esteja dentro do banco e não seja mostrada no componente DbImage, será q o DbImage tem alguma falha em trabalhar com Jpg direto no BD ??
Em todo caso eu faria assim.
[b:7d7c9acacf]Exibindo a imagem do registro selecionado com o click do mouse no DbGrid[/b:7d7c9acacf]
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin DBImage1.Picture.LoadFromFile(HalcyonDataSet1ACODVFOTO.value); end;
[b:7d7c9acacf]Ao entrar no DbGrid ele já me traz a imagem do registro atual para o DbImage[/b:7d7c9acacf]
procedure TForm1.DBGrid1Enter(Sender: TObject); begin DBImage1.Picture.LoadFromFile(HalcyonDataSet1ACODVFOTO.value); end;
[b:7d7c9acacf]Navega entre os registros e traz para o DbImage a imagem do registro em q o cursos estiver no DataSet.[/b:7d7c9acacf]
procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin DBImage1.Picture.LoadFromFile(HalcyonDataSet1ACODVFOTO.value); end;
Não testei, é apenas uma exemplificação, pode ser melhorada.
Espero q ajude!!!!
Martins
Gostei + 0
05/09/2005
Michael
[]´s
Gostei + 0
05/09/2005
Gandalf.nho
Gostei + 0
05/09/2005
Maikiperin
as minhas tb !!....mas acredito q tb podem ser otimizadas !!
Att, Maiki Perin.
Gostei + 0
05/09/2005
Cps.art
No BD tenho um campo ACODVFOTO que tem o nome do arquivo JPG, ou seja CASA.JPG, CARRO.JPG, etc.
Fazendo isso com BDE, a imagem aparece a medida que se navega no DBgrid, mas como eu disse no início, estou usando o componente HALCYON, que trabalha com os BD e indexadores do Clipper.
Vou tentar da forma como vc. disse, depois eu posto uma mensagem com o resultado.
Agradeço a todos pela colaboração.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)