Trackbar position avec la souris [Résolu]

cs_morinxav2 69 Messages postés mercredi 30 juin 2004Date d'inscription 6 octobre 2011 Dernière intervention - 13 juil. 2007 à 23:56 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention
- 16 juil. 2007 à 21:25
Bonsoir,

Comment peut on positionner le curseur d'un trackbar a l'endroit ou l'on clique avec la souris?

Merci d'avance
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 14 juil. 2007 à 10:26
3
Merci
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TTrackBar = class(ComCtrls.TTrackBar)
  published
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
  end;

  TForm1 = class(TForm)
    TrackBar1: TTrackBar;
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
  public
    procedure TrackBarMouseUp(Sender: TObject; Button: TMouseButton;
                                Shift: TShiftState; X, Y: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

  function _Max(const A, B : integer) : integer;
    begin if A > B then result := A else result := B; end;
  function _Min(const A, B : integer) : integer;
    begin if A < B then result := A else result := B; end;

procedure TForm1.TrackBarMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  with (Sender as TTrackBar) do
  begin
    case Orientation of
      trHorizontal :
        begin
          Position := _Max(_Min(round( (Max/(Width)) * X), Max),Min);
        end;
      trVertical   :
        begin
          Position := _Max(_Min(round( (Max/(Height)) * Y), Max),Min);
        end;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TrackBar1.OnMouseUp := TrackBarMouseUp;
end;

end.

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de f0xi
Meilleure réponse
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 14 juil. 2007 à 13:00
3
Merci
"Impossible n'est pas f0xi"

Bien vu !

Mais...
En gardant ta manière, j'ai modifié l'algorithme pour améliorer le comportement.
Je placé le code dans OnMouseDown, mais ça se discute.
Ça donne :

procedure TForm1.TrackBarMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  with (Sender as TTrackBar) do
  begin
    case Orientation of
      trHorizontal :
        Position := Round ( ((X - 11) * Max) / (Width - 22) );
      trVertical :
        Position := Round ( ((Y - 11) * Max) / (Height - 22) );
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TrackBar1.OnMouseDown := TrackBarMouseDown;
end;

Bonne prog'

Merci japee 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de japee
Utilisateur anonyme - 14 juil. 2007 à 01:13
0
Merci
Salut,

De part le fonctionnement d'un TrackBar ce n'est pas possible de le faire avec précision sauf si la propriété Max correspond à Width. Sinon dans le meilleur des cas la fonction GetCursorPos peut te permettre de le position de facon approximative avec la procedure OnChange.

@++
Commenter la réponse de Utilisateur anonyme
cs_morinxav2 69 Messages postés mercredi 30 juin 2004Date d'inscription 6 octobre 2011 Dernière intervention - 14 juil. 2007 à 22:50
0
Merci
Bonsoir,
C'est beau de voir des Professionnels en action.
Merci beaucoup
Etant autodidacte, je viens de comprendre en plus de la reponse a ma question, comment on pouvait ajouter un evenement manquant a un composant existant et dynamiquement parlant.
Encore un Grand Merci
Commenter la réponse de cs_morinxav2
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 16 juil. 2007 à 15:13
0
Merci
@japee: je serais curieux d savoir d'où viens la valeur "11" que tu soustrais dans le code ...
C'est une histoire de largeur du bidule qu'on déplace avec la souris ou je suis complètement à côté ?

Sinon... et pourquoi pas dans le OnMouseMove alors ? ça peut être plus convivial dans certains cas (à condition que le code du OnChange ne prenne pas 5 sec à s'exécuter)

++
Commenter la réponse de florenth
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 16 juil. 2007 à 19:47
0
Merci
@florenth :
11 est la valeur de x quand le curseur se trouve sur la première graduation (position = 0).
D'après mes observations, cette valeur ne change pas quelle que soit la dimension du TTrackbar... Bon, ça reste peut-être à vérifier selon les évolutions de l'OS ?
Commenter la réponse de japee
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 16 juil. 2007 à 21:25
0
Merci
si j'ai mis le code dans le MouseUp c'est qu'il y a une raison.
si je n'ai pas pris en compte la marge et appliquer un min/max c'est aussi pour certaines raisons. :)
Commenter la réponse de f0xi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.