Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Rolar o grid com o scroll do mouse


Vivendo&Aprendendo

Pergunta

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 por Vivendo&Aprendendo
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...