IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Comment limiter le déplacement d'un composant ?


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 60
    Par défaut Comment limiter le déplacement d'un composant ?
    Bonsoir à tous,

    Je cherhce à limiter le déplacemt par drag and drop d'un composant situé dans un Timage lui même dans un scrollbox.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     private
        deplace: boolean;
        xa, ya, xo, yo: integer;
    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
    35
    36
    37
    38
    39
    40
    41
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.TexteMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      begin
        deplace := true;
        xa := x;
        ya := y;
      end;
    end;
     
    procedure TForm1.TexteMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if deplace then begin
          {  la souris comme hors de l'image. }
          if not PtInRect(Rect(0, 0, image1.Width , image1.Height), Point(X, Y)) then
            Exit
         else
        Texte.Left := Texte.Left + x - xa;
        Texte.Top := Texte.Top + y - ya;
        image1.Repaint;
      end;
    end;
     
    procedure TForm1.TexteMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      deplace := false;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      deplace := false;
      Image1.Picture.LoadFromFile('c:\test.bmp');
    end;
     
    end.
    Le code censé limité le déplacement du composant dans l'image est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if not PtInRect(Rect(0, 0, image1.Width , image1.Height), Point(X, Y)) then
            Exit
    Walou , peanuts, ça marche pas ....

    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    Je dirais que c'est normal, regarde ou tu prend X et Y, ce sont les coordonnée de ta souris sur Texte, toi il te faut les coordonnée de ta souris sur le composant qui contient Texte (c'est le meme que celui qui contient le Timage, etant donné qu'un TImage ne peut rien contenir)

    a++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Re
    Tu devrais peut etre regarder dans cette direction la
    RealeseCapture fait ce que tu cherche a faire je pense
    a++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 60
    Par défaut
    Merci pour ta réponse !

    Citation Envoyé par Qwazerty Voir le message
    Je dirais que c'est normal, regarde ou tu prend X et Y, ce sont les coordonnée de ta souris sur Texte
    Râââ...biensûr....
    Mais je capte pas pourquoi le code suivant ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if deplace then begin
        if not PtInRect(Rect(0, 0, image1.Picture.bitmap.Width, image1.Picture.bitmap.Height), Point(X, Y)) then
        begin
          deplace := false;
          exit;
        end;
      end;
    end;
    Dans le cas au dessus , on devrait limiter le déplacement au rectangle du bimap contenu dans le Timage, non ?

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    Non puisque ton Edit se deplace en meme temps que ta souris, ta souris n'etant pas au contact de ton TImage, l'evenement Timage.OnMouseMove n'est pas declenché... et donc ton code pas executer
    As tu regerdé le lien que je t'ai donné plus haut, je pense que tu gagnerais en temps et en qualité.

    As tu remarquer que ton image flashé lors du deplacement de ton edit, pour resoudre le probleme dans Form1.Create rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.DoubleBuffer := True
    J'ai pas verifié le code mais avec le completauto tu vas trouver facilement (si tu ne connaissais pas deja )

    Mais encore une fois je pense qu'il serais preferable que tu utilise le RealeseCapture.
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut
    Citation Envoyé par scara Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if deplace then begin
        if not PtInRect(Rect(0, 0, image1.Picture.bitmap.Width, image1.Picture.bitmap.Height), Point(X, Y)) then
        begin
          deplace := false;
          exit;
        end;
      end;
    end;
    Dans le cas au dessus , on devrait limiter le déplacement au rectangle du bimap contenu dans le Timage, non ?
    Ce n'est pas parce que tu gères un boolean (deplace) autorisant ou non l'exécution du corps de ta procédure que cela va contrôler le déplacement de la souris.

    La solution serait peut-être (surement ?) d'utiliser la fonction ClipCursor qui attend comme paramètre un TRect. Tu définis le rectangle qui correspond à ton TImage lors du Drag'n'Drop, et une fois le Drop effectué tu rappelles ClipCursor avec comme paramètre Nil pour libérer le déplacement de la souris.

    C'est une idée à creuser.

    @+ Claudius

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 60
    Par défaut
    Merci je cogite ça ce soir en rentrant du taf.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 60
    Par défaut
    OUééééé!
    Voilà de quoi confiner le curseur dans un scrollbox , par exemple :

    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
    procedure TForm1.ScrollBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      Cursor_confine: TRect;
      Coordonnees: TPoint;
    begin
      Coordonnees := ClientToScreen(Point(scrollbox1.Left, scrollbox1.Top));
      Cursor_confine := Bounds(Coordonnees.X, Coordonnees.Y, scrollbox1.Width, scrollbox1.Height);
      Windows.ClipCursor(@Cursor_confine);
    end;
     
    procedure TForm1.ScrollBox1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
     
    begin
      Windows.ClipCursor(nil);
    end;
    J'ai découvert par ma suite qu'il y a un tutoriel sur le site :
    http://delphi.developpez.com/sources...r#LimiterMouse

    J'y suis presque, presque parce que je veux confiner le déplacement d'un composant (un label qu'on drag & drop), en fait pas seulement du curseur.Et ça dépend où on saisit le composant pour le dragger.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment limiter la souris dans son déplacement à l'écran
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 21/02/2013, 21h13
  2. [C#] Comment limiter l'accès à certaines personnes ?
    Par moimoimoi dans le forum Services Web
    Réponses: 1
    Dernier message: 26/05/2004, 10h14
  3. Comment mettre plusieurs objets ds un composant ?
    Par Fleury dans le forum Composants VCL
    Réponses: 7
    Dernier message: 24/05/2003, 17h34
  4. Limiter le déplacement de la souris
    Par el_bouleto dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/11/2002, 23h56
  5. Comment limiter les mouvements du curseur??
    Par scorpiwolf dans le forum C++Builder
    Réponses: 9
    Dernier message: 07/07/2002, 22h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo