Tank01
Messages postés106Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention10 novembre 2006
-
8 juin 2006 à 14:21
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 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" ?
Tank01
Messages postés106Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention10 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.
cs_sim51
Messages postés240Date d'inscriptiondimanche 31 octobre 2004StatutMembreDernière intervention31 décembre 20062 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
Tank01
Messages postés106Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention10 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.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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;
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 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 !
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 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 !
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 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 !!
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;