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

Raserafim

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´
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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar