Problema com o SetFocus e OnKeyDown
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.
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.
Desde já agradeço
Fausto
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
Curtidas 0