salut a tous !

sur une form j'ai 2 DBGrid dans une pageControl a 2 angle chaque angle contiens un DBGrid

pour gérer la roulette de la souris sur la DBGrid j'ai trouver ce code dans la faq qui marche très bien

Dans la déclaration de la fiche, ajouter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
type
  TForm1 = class(TForm)
    DBGrid1 : TDBGrid;
     ...
  private
    { Déclarations privées }
    OldWindowProc: TWndMethod;
    Procedure DBGridNewWindowProc(var Msg: TMessage);
     ...
  End;
Puis ajouter le code suivant dans le OnCreate de la fiche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Sauvegarde la WndProc actuelle du DBGrid1.
  OldWindowProc := DBGrid1.WindowProc;
  // Affecte une nouvelle procédure de fenêtre.
  DBGrid1.WindowProc := DBGridNewWindowProc;
end;
Enfin ajouter le code suivant pour gérer la roulette :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.DBGridNewWindowProc(var Msg: TMessage);
begin
  //.Interception de l'évènement WM_MOUSEWHEEL.
  if Msg.Msg = WM_MOUSEWHEEL then
  begin
    if (DBGrid1.DataSource.DataSet.Active) then
    begin
      if SmallInt(Msg.WParamHi) < 0 then
        DBGrid1.DataSource.DataSet.Next
      else
        DBGrid1.DataSource.DataSet.Prior;
    end;
    Exit;
  end;
 
  //.Traitement normal des autres message.
  OldWindowProc(Msg);
end;
mon problème maintenant et comment la géré sur le 2eme angle de la pageControl

j'ai encore cherché un peut partout j'ai trouver ça

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure TForm1.DBGridNewWindowProc(var Msg: TMessage);
begin
  //.Interception de l'évènement WM_MOUSEWHEEL.
  if Msg.Msg = WM_MOUSEWHEEL then
  begin
    If Msg.Handle = DBGrid1.Handle Then
    Begin
      if SmallInt(Msg.WParamHi) < 0 then
        DBGrid1.DataSource.DataSet.Next
      else
        DBGrid1.DataSource.DataSet.Prior;
      Exit;
    End;
    If Msg.Handle = DBGrid2.Handle Then
    Begin
      if SmallInt(Msg.WParamHi) < 0 then
        DBGrid2.DataSource.DataSet.Next
      else
        DBGrid2.DataSource.DataSet.Prior;
      Exit;
    End;
  end;
 
  //.Traitement normal des autres message.
  OldWindowProc(Msg);
end;
mais y a des erreur sur Handle pas déclaré et dans la FormCreate comment on Affecte une nouvelle procédure de fenêtre puisque elle déjà affecter au 1er DBGRID

un petite coup de main SVP merci d'avance

PS: les DataSource DataSet ne sont pas le même pour les DBGIRD chacun a sa table