Trocar Tab por Enter em Form com GRID

16/09/2009

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

Rogério Nascimento

Curtidas 0

Respostas

Rodrigo Mourão

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

GOSTEI 0
Rogério Nascimento

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




GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

16/09/2009

Vlw Rogério,

Bem eu vou testar isso aqui. Peço que aguarde um pouco !!1

Abs!
GOSTEI 0
Rodrigo Mourão

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
GOSTEI 0
Rodrigo Mourão

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

GOSTEI 0
Rogério Nascimento

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




GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

16/09/2009

Vlw,

Abraço !!!


Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
POSTAR