Trocar Tab por Enter em Form com GRID
Olá Pessoal da DevMedia
Acho q estou implementando uma rotina de forma incorreta, estou precisando da ajuda de vc´s.
Tenho um form com um DBGrid, alterei a propriedade do Form KeyPress e no Evento onKeyPress eu coloque a seguinte rotina:
if Key = #13 then
begin
Key := #0;
Perform(WM_NEXTDLG**,0,0); (**estou fora do pc, não sei se a grafia esta correta)
end
Se eu tiver apenas edit´s no form, funciona normal, mas ai se eu adiciono um DBGRiD no form, ele chega no grid e pula como se fosse um DBEdit, nao entra no grid e passa campo a campo com o enter.
No DBGrid, no evento onkeypress eu adicionei comando:
if Key = #13 then
begin
DBGRid.Perform(WM_KeyDown**,vk_tab,0); (**estou fora do pc, não sei se a grafia esta correta)
end
se eu tiver apenas o grid no form, funciona blz, mas se eu tiver edit e grid junto, o evento no form nao entra no grid (passando de coluna a coluna), ele passa como se fosse um campo normal;
O que eu devo mudar?
Abraços,
Rogério
Rogério Nascimento
Curtidas 0
Respostas
Rodrigo Mourão
16/09/2009
Olá Rogerio,
Bem a principio seu processo esta correto. Da uma olhada nesta Quick Tips do Wesley Yamacak.
https://www.devmedia.com.br/articles/viewcomp.asp?comp=13787
Qualquer coisa estou as ordens !!
Bem a principio seu processo esta correto. Da uma olhada nesta Quick Tips do Wesley Yamacak.
https://www.devmedia.com.br/articles/viewcomp.asp?comp=13787
Qualquer coisa estou as ordens !!
GOSTEI 0
Rogério Nascimento
16/09/2009
Rodrigo, tudo na paz!!!
Dei uma olhada, aparente o que estou fazendo é exatamente o que está lá, fiz aqui na tela, estou colocando os codigos para vc me ajudar.
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Key := #0;
Perform(WM_NEXTDLGCTL,0,0);
end;
end;
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
DBGrid1.Perform(WM_KEYDOWN, VK_TAB, 0);
end;
Eu digito o enter, ele passa pelos campos certinho, entra no grid, mas qdo continuo dando o enter, ao inves de ele percorrer as colunas da Grid ele volta para o DBEdit EMP_NO, tem q ativar alguma propriedade no Grid ?
Abraços !!!
Ah, gostei muito de vc ter assumido o curso de OOP, você está de parabenz !!!
Dei uma olhada, aparente o que estou fazendo é exatamente o que está lá, fiz aqui na tela, estou colocando os codigos para vc me ajudar.
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Key := #0;
Perform(WM_NEXTDLGCTL,0,0);
end;
end;
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
DBGrid1.Perform(WM_KEYDOWN, VK_TAB, 0);
end;
Eu digito o enter, ele passa pelos campos certinho, entra no grid, mas qdo continuo dando o enter, ao inves de ele percorrer as colunas da Grid ele volta para o DBEdit EMP_NO, tem q ativar alguma propriedade no Grid ?
Abraços !!!
Ah, gostei muito de vc ter assumido o curso de OOP, você está de parabenz !!!
GOSTEI 0
Rodrigo Mourão
16/09/2009
Vlw Rogério,
Bem eu vou testar isso aqui. Peço que aguarde um pouco !!1
Abs!
Bem eu vou testar isso aqui. Peço que aguarde um pouco !!1
Abs!
GOSTEI 0
Rodrigo Mourão
16/09/2009
Olá Rogério, desculpe a demora.
Bem vamos lá, eu não consegui fazer este efeito. Mas não adiante so tiver que não consegui, fui ver o por que. Rodei a VCL todo, cai em Mensagem do SO. rsrsrsrsr Doidera !!!
O fato é que quando colocamos o evento no OnKeyPress do FOrm para mudar o Enter por tab estamos usando o Perform. Este comendo enviar uma Mensagem para um controle, no caso WM_NEXTDLGCTL. Como estamos chamando o Perform de dentro do Form então este mensagem e enviada para o form que move o foco para o proximo controle no tab order.
Por isso temos que colocar o KeyPreview para true. Assim quando pressionamos um tecla com o foco no edit ele "repassa o pressionamento" para o form. O evento é chamado e o foco muda.
Agora quando colocamos o evcento no grid ele intercepta. Por isso que não rola.
Enfim, eu sou da opinião que tudo é possivel em Delphi mas isso é uma das coisas que daria um certo trabalho onde o custo beneficio nao compensaria.
Pode ser até aque alguém tenha um codigo simples que faça isso mas eu não encontrei.
Se ue puder ajudar em algo mais é so falar.
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Bem vamos lá, eu não consegui fazer este efeito. Mas não adiante so tiver que não consegui, fui ver o por que. Rodei a VCL todo, cai em Mensagem do SO. rsrsrsrsr Doidera !!!
O fato é que quando colocamos o evento no OnKeyPress do FOrm para mudar o Enter por tab estamos usando o Perform. Este comendo enviar uma Mensagem para um controle, no caso WM_NEXTDLGCTL. Como estamos chamando o Perform de dentro do Form então este mensagem e enviada para o form que move o foco para o proximo controle no tab order.
Por isso temos que colocar o KeyPreview para true. Assim quando pressionamos um tecla com o foco no edit ele "repassa o pressionamento" para o form. O evento é chamado e o foco muda.
Agora quando colocamos o evcento no grid ele intercepta. Por isso que não rola.
Enfim, eu sou da opinião que tudo é possivel em Delphi mas isso é uma das coisas que daria um certo trabalho onde o custo beneficio nao compensaria.
Pode ser até aque alguém tenha um codigo simples que faça isso mas eu não encontrei.
Se ue puder ajudar em algo mais é so falar.
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Rodrigo Mourão
16/09/2009
Rapaz esquece o que eu falei kkkkkkkkkkkkkkkkkkkkkkkkk
Eu sou chato cara, como disse tudo no Delphi e possivel e as vezes esta tão na cara mas tão na cara que a gente não vê.
Seleciona o DBGrid vai no evento OnEnter dele e coloca:
KeyPreview := False;
Agora vai no OnExit do DBGrid e coloca:
KeyPreview := True;
Testa e depois me fala !!!
Abs!!!
Eu sou chato cara, como disse tudo no Delphi e possivel e as vezes esta tão na cara mas tão na cara que a gente não vê.
Seleciona o DBGrid vai no evento OnEnter dele e coloca:
KeyPreview := False;
Agora vai no OnExit do DBGrid e coloca:
KeyPreview := True;
Testa e depois me fala !!!
Abs!!!
GOSTEI 0
Rogério Nascimento
16/09/2009
Rodrigo, vc é o cara mesmo !!!
Deu certo, é isto mesmo..perfeito !
Valeu meu amigo,
Obrigado pela atenção dada ao meu problema.
Abraços !!!
Deu certo, é isto mesmo..perfeito !
Valeu meu amigo,
Obrigado pela atenção dada ao meu problema.
Abraços !!!
GOSTEI 0
Rodrigo Mourão
16/09/2009
Vlw,
Abraço !!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Abraço !!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0