Fórum Capturar valor que está sendo digitado em DBGrid #325825
21/07/2006
0
Como capturar o texto que está sendo digitado em uma DbGrid através do evento OnKeyPress?

Raserafim
Curtir tópico
+ 0
Responder
Posts
22/07/2006
Marco Salles
1 | Como capturar o texto que está sendo digitado em uma DbGrid através do evento OnKeyPress? |
a idéia e a mesma daquele exemplo que lhe passei... Em outro Tópico.
Não acredito que voce ira conseguir nada tão trivial , a não ser usando componentes de terceiros.
[b:0ce5fcde42]Porem nesse exemplo é um pouco mais fácil e voce pode usar o mesmo manipulador de eventos onChange para todos os campos[/b:0ce5fcde42]
a idéia e essa :idea: :idea: :idea:
1 2 | var TextoDigitado:String; |
1 2 3 4 | procedure TForm1.FormShow(Sender: TObject); begin texto:=´´; end; |
1 2 3 4 5 6 7 | procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin if key <> #8 Then //tecla bacspace entre outras que voce deve tratar begin texto:=texto+Key; Showmessage(texto); end; |
[b:0ce5fcde42]//todos os campo tfields do clientData set devem compartilhar
//deste mesmo evento [/b:0ce5fcde42]
1 2 3 4 5 | procedure TForm1.ClientDataSet1nomeChange(Sender: TField); begin Showmessage(texto); texto:=´´; end; |
[b:0ce5fcde42]Aqui eu usei o mesmo campo nome e o mesmo clientDataSet do exemplo que lhe tinha enviado antes[/b:0ce5fcde42]... So que não adianta somente eu testar , voce deve testar e dar a sua opinião , para que possamso melhorar o codigo , ou caminhar para outro tipo de raciocineo ou aparecer algum codigo melhor o que é extremamente plausivel. O que não pode é não correpsonder como fez no outro tópico.
o topico que tanto falei é este :
http://forum.devmedia.com.br/viewtopic.php?t=79137&highlight=&sid=cec6428f5d88590e73fb12a4e7909911
ficou sem contraresposta :cry: :cry:
Responder
Gostei + 0
22/07/2006
Marco Salles
Por isso que é bom a contraresposta... Mesmo que o método não sirva em particular , devemos sempre dar a replica. Afinal devemos trocar conhecimentos e não so fornecer.
Bem , o método anterior , é passivel de erro , ja que o usuário , esta livre de usar as setas do teclado e o Mouse... Logo usar somente
texto:=Text+Key não é politicamente correto. Pois o usuário pode inserir algum caracter em algum lugar e desprezei esta Hipotese anteriormente.
De posse desse acontecimento , corrijo aqui a tempo e a hora e forneço uma nova proposta , baseado na ideia da Inda e da Vinda...
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if clientDataSet1.State in [dsEdit,DsInsert] then
begin
if Key <> #9 then
keybd_event(VK_TAB,0,0 , 0) // Tab Press
else
if voltar then
begin
DBGrid1.SelectedField :=ClientDataSet1.FieldByName(campo);
voltar:=False;
Showmessage(texto);
end;
end;
Todos os Tfields Devem compartilhar desse mesmo manipulador de evento , ou em especial o Campo que voce quer ´checar´
Não esquecer da propriedade dgAlwayShowEditor cetado em True
do Objeto Inspector
No Lugar do Showmessage(texto) , voce pode passar o Texto como parametro para a pesquisa no Outro clientDataSet... Digo isso porque acho que esse tópico deve estar interligado com esse :
http://forum.devmedia.com.br/viewtopic.php?t=79258&sid=dbf790bf3c64d27a2c55a37e3a254ee0
Bem , o método anterior , é passivel de erro , ja que o usuário , esta livre de usar as setas do teclado e o Mouse... Logo usar somente
texto:=Text+Key não é politicamente correto. Pois o usuário pode inserir algum caracter em algum lugar e desprezei esta Hipotese anteriormente.
De posse desse acontecimento , corrijo aqui a tempo e a hora e forneço uma nova proposta , baseado na ideia da Inda e da Vinda...
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if clientDataSet1.State in [dsEdit,DsInsert] then
begin
if Key <> #9 then
keybd_event(VK_TAB,0,0 , 0) // Tab Press
else
if voltar then
begin
DBGrid1.SelectedField :=ClientDataSet1.FieldByName(campo);
voltar:=False;
Showmessage(texto);
end;
end;
Todos os Tfields Devem compartilhar desse mesmo manipulador de evento , ou em especial o Campo que voce quer ´checar´
1 2 3 4 5 6 7 8 | procedure TForm1.ClientDataSet1OnChangeGeral(Sender: TField); begin sender.OnChange:=nil; texto:=(sender.text); Campo:=sender.FieldName; voltar:=True; sender.OnChange:=ClientDataSet1ruaChange; end; |
1 2 3 4 | procedure TForm1.FormShow(Sender: TObject); begin Text:=´´; end; |
1 2 3 4 | procedure TForm1.DBGrid1ColEnter(Sender: TObject); begin dbgrid1.EditorMode:=True; end; |
Não esquecer da propriedade dgAlwayShowEditor cetado em True
do Objeto Inspector
No Lugar do Showmessage(texto) , voce pode passar o Texto como parametro para a pesquisa no Outro clientDataSet... Digo isso porque acho que esse tópico deve estar interligado com esse :
http://forum.devmedia.com.br/viewtopic.php?t=79258&sid=dbf790bf3c64d27a2c55a37e3a254ee0
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)