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 déplaceer un TShape ?


Sujet :

Composants VCL Delphi

  1. #1
    En attente de confirmation mail
    Inscrit en
    Octobre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 29
    Points : 24
    Points
    24
    Par défaut Comment déplaceer un TShape ?
    Voila je souhaite dans mon application pouvoir déplacer un shape en maintenant la souris enfoncée. J'arrive a le faire déplacer seulement je n'ai pas d'autre moyen que d'utilise la propriete repaint ou refresh du shape pour mettre a jour sa position du coup de temps en temps le shape se met a grésiller. De plus si je déplace la souris trop rapidement le shape lui ne suis pas et je ne sais pas comment faire en sorte que le curseur de la souris soit toujours au meme emplacement sur le shape lorsque je déplace le curseur ce qui je penses devrai pouvoir résoudre le probleme de vitesse.
    Si quelqu'un pouvait m'aider à resoudre ce probleme. Voici mon code :
    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
     
    procedure TFormJeux.shcasseMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var position: TPoint;
    var i: integer;
    begin
    GetCursorPos(Position);
    i:=position.X;
    // tant que le bouton de la souris est enfoncé
    while GetAsyncKeyState(VK_LBUTTON) And $8000<>0 do
      begin
        GetCursorPos(Position);
        begin
            shcasse.Left:=shcasse.Left-1;
            shcasse.Repaint;
         end;
     
        if position.X>i then
          begin
            shcasse.Left:=shcasse.Left+1;
            shcasse.Repaint;
          end;
     
           i:=position.X;
     
      end;
    end;
    Merci d'avance 8)

  2. #2
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    La boucle While en plein milieu d'un OnMouseMov n'est pas une habitude à prendre.

    Il faut gérer le OnMouseDown et OnMouseMove du composant :

    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
    Var X0,Y0:Integer;
    procedure TForm1.shCasseMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    Var Position:TPoint;
    begin
      GetCursorPos(Position);
      Position:=ShCasse.Parent.ScreenToClient(Position);
      If ssLeft In Shift Then
      Begin
        shCasse.Left := Position.X-X0;
        shCasse.Top  := Position.Y-Y0;
      End;
    end;
     
    procedure TForm1.shCasseMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      If Button=mbLeft Then
      Begin
        X0:=X;
        Y0:=Y;
      End;
    end;

  3. #3
    En attente de confirmation mail
    Inscrit en
    Octobre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup ca marche

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 14/10/2011, 10h10
  2. [TShape] Comment changer la couleur ?
    Par savoir dans le forum Composants VCL
    Réponses: 2
    Dernier message: 03/11/2008, 11h06
  3. Réponses: 5
    Dernier message: 20/08/2002, 18h01
  4. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 16h33
  5. Réponses: 7
    Dernier message: 01/05/2002, 20h23

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