Activer la molette de la souris

Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006 - 8 juin 2006 à 14:21
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 12 juin 2006 à 20:29
Bonjour,

Comment fais on dans l'inspecteur d'objet pour activer la molette de la souris dans une form qui contient les "ascenceurs" ?

Merci, bonne  journée

----( | TanK | )---- 

13 réponses

Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
9 juin 2006 à 08:55
Merci de ton aide, je vien de regarder ces deux post ainsi que de consulter l'aide de delphi, mais je n'arrive,toujours pas a m'arranger pour que la molette de ma soursi soit active, je souhaite juste quelle soit active comme dans un environnement windows.

Merci de votre aide, si quelqu'un aurait déja codé cette fonction.

----( | TanK | )---- 
0
cs_sim51 Messages postés 240 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 31 décembre 2006 2
9 juin 2006 à 19:31
Salut
On ne peut "activer" comme tu dis la souris comme cela il faut le programmer !!! Ne t'inquiète pas cela prend 2 lignes de prog.
Si tu as été voir les sources, tu vois maintenant quel évènement utiliser. Maintenant il ne reste plus qu'a faire descendre la position des barre dans onmousewheeldown et inversement pour le up.
Bonne continuation
0
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
12 juin 2006 à 11:00
Bonjour,

Excusez moi tout d'abord de réiterrer ma
question, mais après avoir chercher pas mal de temps chez mon ami
google, je ne parviens pas à utiliser la molette de la souris, je
souhaite qu'elle soit tout simplement activée, et qu'elle fonctionne
comme dans un environnement windows. Je sais qu'il faut utiliser les
évenement "OnMouseWheelDown" et "OnMouseWheelUp", mais je suis vraiment
perdu en rapport avec le code a implémenter dans ses deux procedures.
J'éspère que quelqu'un pourra éclairer ma lanterne.

Merci à tous et bonne journée !

----( | TanK | )----
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
12 juin 2006 à 11:14
Voilou...

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
 SendMessage(Handle,WM_VScroll,SB_LINEDOWN,0);
end;

procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
 SendMessage(Handle,WM_VScroll,SB_LINEUP,0);
end;

Attention, l'affichage foire un peu quand une listbox (avec scrollbar verticale) a le focus et qu'on fait défiler la form...

@+
Nico {www.ni69.info}


N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
12 juin 2006 à 17:09
Salut,

chez moi il y a un autre problème:
l'image en dessous représente mon écran, si la souris se trouve en haut à gauche (dèrièrre la ligne rouge) le Scroll ne fonctionne pas au delà de la ligne le Scroll fonctionne très bien ??? (indépendement de la position de la form)

j'ai testé un autre code mais il ne résoud pas mon problème

je vous le donne quand même parce qu'il permet de scroller verticalement et horizontalement (avec la touche Maj pressée)

  TForm1 = class (TForm)
    Image1: TImage; // avec AutoSize à True
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
    procedure WMMouseWheel (var Msg : TWMMouseWheel); message WM_MouseWheel;
  public
    { Déclarations publiques }
  end;
var
  Form1: TForm1;



implementation




{$R *.DFM}



procedure TForm1.FormCreate(Sender: TObject);
begin           // on charge une image plus grande que la form :-)                                
  Image1.Picture.LoadFromFile('14.plage.bmp');
end;



procedure TForm1.WMMouseWheel(var Msg: TWMMouseWheel);
begin                                           
 If Msg.Keys = 4 Then // avec maj pressée
   Begin// Scroll de gauche à droite
     If Msg.WheelDelta < 0 Then Perform(WM_HScroll, SB_LINERIGHT, 0)
     Else Perform(WM_HScroll, SB_LINELEFT, 0);
   End
 Else
   Begin  // Scroll de haut en bas
     If Msg.WheelDelta < 0 Then Perform(WM_VScroll, SB_LINEDOWN, 0)
     Else Perform(WM_VScroll, SB_LINEUP, 0);
   End;
end;



end.

Si vous savez pourquoi je suis preneur 

@+
Cirec
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
12 juin 2006 à 17:42
Ben chez moi, mon code marche quelle que soit la position de la souris... Bizarre...
La fenêtre a-t-elle bien le focus quand tu la fais scroller ?

@+
Nico {www.ni69.info}


N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
12 juin 2006 à 17:51
oui oui elle a bien le focus.

Mais ça provient peut être de mon système double écran

le Moniteur secondaire est en fait le moniteur principale sous win

@+
Cirec
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
12 juin 2006 à 18:08
re, j'ai testé le code que tu proposes... et ben chez moi ça foire bien !!!
Pas moyen de lui faire obtenir le message de scroll !!! Enfin, si, une fois, mais je sais pas comment j'ai fait !

Enfin bon, je me suis rabattu sur mon code, légèrement modifié dans ton optique... En tout cas ça marche chez moi
procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
  if (ssShift in Shift) then SendMessage(Handle,WM_HScroll,SB_LINELEFT,0)
  Else SendMessage(Handle,WM_VScroll, SB_LINEUP, 0);
end;

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
  if (ssShift in Shift) then SendMessage(Handle,WM_HScroll, SB_LINERIGHT, 0)
  Else SendMessage(Handle,WM_VScroll,SB_LINEDOWN,0);
end;

@+
Nico {www.ni69.info}


N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
12 juin 2006 à 18:20
eh ben chez moi les deux méthodes fonctionne à l'identique

surprenent que tu ne puisses pas faire fonctionner mon code

essaye en placant le curseur en bas à droite de la form où en bas à droite de l'écran
c'est ce qui se passe chez moi

@+
Cirec
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
12 juin 2006 à 18:40
oula, j'ai trouvé quelque-chose : pour que le scroll marche chez moi avec ton code, il faut que en même temps (sinon ça marche pas) :
- je clique avec le bouton gauche de la souris
- je clique avec la molette
- je fasse défiler la molette
- je fasse bouger la souris...

Il faut avouer que c'est un peu contraignant !

@+
Nico {www.ni69.info}


N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
12 juin 2006 à 18:47
chez moi ça fonctionne très bien sous D4 et D2005 et les deux codes

à part bien sur le problème cité plus haut mais comme dit je pense que ça provient de mon système deux écrans

@+
Cirec
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
12 juin 2006 à 19:46
ben écoute, quoique je fasse (où que je sois... avec la souris), mon code marche très bien, mais le deuxième ne produit aucun effet... Je comprends vraiment pas ce qu'il peut se passer pour que l'event atteigne OnMouseWheelDown sans passer par un message windows avant... Sur d'autres ordis que les notres, ça donne quoi ? Peut-être que le mien est capricieux !!

@+
Nico {www.ni69.info}
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
12 juin 2006 à 20:29
Tiens essaye celui-ci,

chez moi il fonctionne à la perfection et dans tous les cas :
TForm1

=
class (TForm
)
   Image1
: TImage
;
   procedure FormCreate
(Sender
: TObject
);
   procedure FormClose
(Sender
: TObject
;
var Action
: TCloseAction
);
private
   { Déclarations privées }
   procedure NewWndProc
(var
Message: TMessage
);
public
   { Déclarations publiques }
end;
var
   OldWndProc
: TWndMethod
;
   Form1
: TForm1
;
implementation
   {$R *.DFM}

procedure TForm1
.NewWndProc
(var
Message: TMessage
);
begin
   If
message.Msg
= WM_MouseWheel
Then // si c'est un WM_MouseWheel 
      Begin
         If
Message.WParamLo
=
4
Then
// avec maj pressée
            Begin
// Scroll de gauche à droite
               If
Message.WParam
<
0
Then Perform
(WM_HScroll
, SB_LINERIGHT
,
0)
               Else Perform
(WM_HScroll
, SB_LINELEFT
,
0);
            End
      Else
         Begin
// Scroll de haut en bas
            If
Message.WParam
<
0
Then Perform
(WM_VScroll
, SB_LINEDOWN
,
0)
            Else Perform
(WM_VScroll
, SB_LINEUP
,
0);
         End;
      End;
// Sinon c'est la procedure d'origine qui traite le message
  OldWndProc
(Message);end;

procedure TForm1
.FormCreate
(Sender
: TObject
);
begin
  OldWndProc
: = Form1
.WindowProc
;
// On Mémorise le WindowProc
  Form1
.WindowProc
:= NewWndProc
;
// On lui affecte le nouveau
  Image1
.Picture
.LoadFromFile
(14.plage
.bmp
');
end ;

procedure TForm1
.FormClose
(Sender
: TObject
;
var Action
: TCloseAction
);
begin
  WindowProc
: = OldWndProc
;
// et on restitue
end;

end.

@+
Cirec
0
Rejoignez-nous