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.

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;
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.
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!