Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Rolar o grid com o scroll do mouse


Vivendo&Aprendendo

Question

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

Edited by Vivendo&Aprendendo
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.6k
×
×
  • Create New...