Bonsoir,
Je me heurte à un petit problème:
J'affiche une image dans un controle TImage32 (de la collection Graphics32), mais dans mon problème c'est équivalent à un Timage.
Mon application doit permettre deux choses:
-L'utilisateur clique sur un point de l'image, maintient le bouton enfoncé, déplace la souris (ce qui fait scroller l'image qui est plus grande que le contrôle), et enfin relâche le bouton quand l'image est en position voulue.
-L'utilisateur clique sur un point de l'image (click rapide) et mon application retient les coordonnées de ce point pour des calculs. (à effectuer seulement si click rapide sans mouvement)
pour le glisser j'utilise les évènements MouseDown et Mouse Up.
Mon problème réside dans le fait que dès lors que l'utilisateur appuie sur le bouton, indépendamment de la durée, ma variable app.Panning devient vraie, et la deuxième partie du code MouseUP n'est jamais effectuée. Bien sur si l'utilisateur déplace l'image (app.panning), le click ne doit pas être pris en compte pour les calculs.
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
27
28
29
30
31
32
33
34 procedure TForm1.ImgView321MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer); begin if layer = nil then begin app.Panning:=True; app.OldPos:=point(X,Y); end; end; procedure TForm1.ImgView321MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer); begin if app.Panning then begin imgView321.Scroll(app.OldPos.X-X,app.OldPos.Y-Y); app.OldPos:=point(x,y); end; end; procedure TForm1.ImgView321MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer); begin if app.Panning then begin app.Panning:=false; imgView321.SetFocus; exit; end; case app.Phase of pCalibrating: // Ici vient ma routine de calcul begin end;
J'ai bien essayé avec l'évènement OnClick, mais le résultat est le même: MouseDown fait invariablement basculer la variable app.panning.
De temps en temps, un double click fait se lancer ma routine de calcul.
Pour le moment j'ai contourné cette difficulté en associant le panning uniquement au bouton droit de la souris, mais mon interface s'en retrouve moins intuitive.
Avez vous une idée du comment procéder? Calculer le temps écoulé entre mousedown et mouseup?
Merci d'avance!
Partager