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 :
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
8
9
10 type TForm1 = class(TForm) DBGrid1 : TDBGrid; ... private { Déclarations privées } OldWindowProc: TWndMethod; Procedure DBGridNewWindowProc(var Msg: TMessage); ... 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 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;
mon problème maintenant et comment la géré sur le 2eme angle de la pageControl
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;
j'ai encore cherché un peut partout j'ai trouver ça
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
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;
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
Partager