Problema com o SetFocus e OnKeyDown

Delphi

17/02/2004

Bom dia Pessoal;
Estou com um probleminha e ,sinceramente, já esgotei minhas fontes,
inclusive esta é a 2º u 3º vez que posto esta pergunta aqui.

É o seguinte eu faço uso dos componentes do pacote InforPower em meu sistemas e dentre os vários componentes que a suite oferece eu utilizo muito o wwDBNavigator(wwDBN).

Em meus sistemas eu defini uma parametrização para utilizar as teclas de funções como atalho, eu as associo ao envento OnClick do wwDBN,e programo o evento OnKeyDown do do form, para processar o pressionamento das teclas tenho um rotina que é invocada no evento OnKeydown do form da seguinte forma.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  EnterAsTab(Form1,Key,wwDBNavigator1);
end;


O que acontece é o seguinte quando chamo um outro form, ex: estou em Clientes e quero ver os pedidos destes Clientes através de uma opção que tenho em um popup , mostro o form com os pedidos deste cliente, mas quando retorno ao form que originou a chamada ele não mais obedece as teclas de funções, eu preciso dar um click no form ou pressionar a tecla esc, para que as teclas voltem a serem processadas.

Já postei esta dúvida aqui antes e um amigo me enviou duas dicas sobre Cuidados ao utilizar o OnExit parte I e parteII, li e reli entendi, mas não funcionou, ao que me parece quando se retorna ao form que originou a chamada este perde totalmente o foco.

Caros amigos seria possível alguém me dar uma mãozinha?
Estou enviando abaixo o código onde processo as teclas.
 
procedure EnterAsTab(Frm:TForm; Var Key:Word;const Nav:TwwDBNavigator);
var Dummy : TMsg ;
begin
  if (Key in [VK_F2..VK_F10]) then
  begin
    if (Key = VK_F2) and (Nav.Buttons.Items[6].Visible) then
     Nav.Buttons.Items[6].Click;   // Editar
 
    if (Key = VK_F3) and (Nav.Buttons.Items[10].Visible) then
     Nav.Buttons.Items[10].Click; //  Pesquisar
 
    if (Key = VK_F4) and (Nav.Buttons.Items[9].Visible) then
     Nav.Buttons.Items[9].Click;  //  Imprimir
 
    if (Key = VK_F5) and (Nav.Buttons.Items[11].Visible) then
     Nav.Buttons.Items[11].Click; //  Filtrar
 
    if (Key = VK_F6) and (Nav.Buttons.Items[4].Visible) then
     Nav.Buttons.Items[4].Click;  //  Incluir
 
    if (Key = VK_F7) and (Nav.Buttons.Items[7].Visible) then
     Nav.Buttons.Items[7].Click;  //  Gravar
 
    if (Key = VK_F8) and (Nav.Buttons.Items[5].Visible) then
     Nav.Buttons.Items[5].Click;  //  Excluir
 
    if (Key = VK_F9) and (Nav.Buttons.Items[8].Visible) then
     Nav.Buttons.Items[8].Click;  //  Cancelar
 
    if (Key = VK_F10) and (Nav.Buttons.Items[12].Visible) then
     Nav.Buttons.Items[12].Click; //  Sair
  end;
 
  if ((Key = VK_RETURN) and not (Frm.ActiveControl is TDBMemo)) then
  begin
    PeekMessage(Dummy, Frm.Handle, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE) ;
    if not ((Frm.ActiveControl is TDBGrid)
        or (Frm.ActiveControl is TwwDBGrid)) then
    begin
      Frm.Perform(WM_NEXTDLGCTL, 0, 0);
    end;
    if (Frm.ActiveControl is TDBGrid) then
    begin
      with TDBGrid(Frm.ActiveControl) do
      begin
        if selectedIndex < (fieldcount -1) then
         selectedindex := selectedindex +1
        else
         selectedindex := 0;
      end;
    end;
  end;
  if ((Key = VK_RETURN) and (Frm.ActiveControl is TDBMemo)) then
    Frm.Perform(WM_NEXTDLGCTL, 0, 0);
end;
 

Desde já agradeço

Fausto


Faustoalves

Faustoalves

Curtidas 0
POSTAR