Vivendo&Aprendendo Postado Fevereiro 14, 2008 Denunciar Share Postado Fevereiro 14, 2008 (editado) Peguei este código que o Jhonas postou em uma resposta e agora gostaria de saber como faço para colocar esse componente no form principal e só chamar o procedimento nos outros forms que contenham o dbgrid.procedure TFrmClientes.ApplicationEventsMessage(var Msg: tagMSG; var Handled: Boolean);var i: SmallInt;begin if (ActiveControl is TDBGrid) then begin with TDBGrid(ActiveControl) do begin if Msg.message = WM_MOUSEWHEEL then begin Msg.message := WM_KEYDOWN; Msg.lParam := 0; i := HiWord(Msg.wParam); if i > 0 then Msg.wParam := VK_UP else Msg.wParam := VK_DOWN; Handled := False; end; end; end;end;Testei aqui assim: FormPrincipal.ApplicationEvents.Activate;Mas não funcionou.Abraços Editado Fevereiro 14, 2008 por Vivendo&Aprendendo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Fevereiro 14, 2008 Denunciar Share Postado Fevereiro 14, 2008 Este exemplo é baseado na mesma filosofia de um código que postei há algum tempo. Entretanto, adaptado a situação proposta:- Procedimento para evento declarado no form principal;- Uso apenas por forms que contenham DBGrid;Faça esta codificação no form principal:type TFormPrincipal = class(TForm) private procedure AppEventsMessage(var Msg: TMsg; var Handled: Boolean); end; ... procedure TFormPrincipal.AppEventsMessage(var Msg: TMsg; var Handled: Boolean); var Sentido: SmallInt; begin // primeiramente verificamos se é o evento a ser tratado... if Msg.message = WM_MOUSEWHEEL then if ActiveControl is TDBGrid then // *** <=== AQUI você testa se classe é TDBGRID begin Msg.message := WM_KEYDOWN; Msg.lParam := 0; Sentido := HiWord(Msg.wParam); if Sentido > 0 then Msg.wParam := VK_UP else Msg.wParam := VK_DOWN; end; end; // no evento OnCreate do form principal procedure TFormPrincipal.FormCreate(Sender: TObject); begin ... Application.OnMessage := AppEventsMessage; end; Caso você venha a querer processar este evento para componentes tipo lista (TComboBox, TListBox, ...), basta que você adicione estas classes ao teste, como segue: ... if (ActiveControl is TDBGrid) or (ActiveControl is TListBox) or (ActiveControl is TComboBox) then ...Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Vivendo&Aprendendo Postado Fevereiro 14, 2008 Autor Denunciar Share Postado Fevereiro 14, 2008 Não entendi com vou chamar este evento em outro form que contenha grid tb...Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Vivendo&Aprendendo Postado Fevereiro 14, 2008 Autor Denunciar Share Postado Fevereiro 14, 2008 Ae galera consegui resolver da seguinte forma:procedure TFrmPrincipal.ApplicationEventsMessage(var Msg: tagMSG;var Handled: Boolean);var i : SmallInt;begin if (Screen.ActiveControl is TDBGrid) then begin with TDBGrid(ActiveControl) do begin if Msg.message = WM_MOUSEWHEEL then begin Msg.message := WM_KEYDOWN; Msg.lParam := 0; i := HiWord(Msg.wParam); if i > 0 then Msg.wParam := VK_UP else Msg.wParam := VK_DOWN; Handled := False; end; end; end;end;procedure TFrmPrincipal.FormCreate(Sender: TObject);begin Application.onMessage := ApplicationEventsMessage;end;Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Vivendo&Aprendendo
Peguei este código que o Jhonas postou em uma resposta e agora gostaria de saber como faço para colocar esse componente no form principal e só chamar o procedimento nos outros forms que contenham o dbgrid.
Testei aqui assim: FormPrincipal.ApplicationEvents.Activate;
Mas não funcionou.
Abraços
Editado por Vivendo&AprendendoLink para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.