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

Delphi Discussion :

Déplacer un panel avec la souris


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Avatar de Harry
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 224
    Points : 1 331
    Points
    1 331
    Par défaut Déplacer un panel avec la souris
    Bonjour,

    Connaissez vous une technique qui permettrait de déplacer un panel dans une fenêtre comme si c'était une fenêtre?

    J'ai testé bon nombre de méthodes 'maison' mais à chaque fois quelquechose cloche.

    Merci de vos idées

    Attention le .NET sur PDA peut causer des chutes de cheveux

  2. #2
    Membre actif Avatar de gibet_b
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 292
    Points : 296
    Points
    296
    Par défaut
    Bonjour la Seyne sur Mer,

    Tu serais pas chez Xzeos ?

    Quels sont les méthodes que tu as utilisé ?
    Jean-Baptiste, vieux membre éclairé à la bougie
    -----
    www.e-jbb.net : Écriture et lecture numérique
    ---
    Citation du moment : "On abdique pas l'honneur d'être une cible" - Cyrano De Bergerac

  3. #3
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Tu peux t'inspirer de cela.

    Dans un nouveau projet, un seul formulaire et un Tpanel

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        procedure FormCreate(Sender: TObject);
        procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Déclarations privées }
        selected: boolean;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      selected := false;
    end;
     
    procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      selected := true;
    end;
     
    procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if selected  and (Sender is TPanel)
        then begin
               (Sender as TPanel).Left := (Sender as TPanel).Left + x;
               (Sender as TPanel).Top := (Sender as TPanel).Top + y;
             end;
    end;
     
    procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      selected := false;
    end;
     
    end.
    Cordialement
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  4. #4
    Membre expérimenté
    Avatar de Harry
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 224
    Points : 1 331
    Points
    1 331
    Par défaut
    Bonjour,

    Merci pour ton code, c'est en effet tres similaire à ce que j'avais fait, je refait des tests avec cette méthode.

    Pour gibet_b ben LA SEYNE SUR MER C la ou j'habite, moi c harry... Non, sui pas chez Xzeos

    Au fait c quoi comme boite Xzeos?

    Par rapport à mes méthodes ... ben sont un peu complexes à expliquer... faudrait une bonne dizaine de pages pour expliquer tout ca, je vais essayer le code de Pascal Jankowski avant


    Merci, à demain

    Attention le .NET sur PDA peut causer des chutes de cheveux

  5. #5
    Membre expérimenté
    Avatar de Harry
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 224
    Points : 1 331
    Points
    1 331
    Par défaut
    C'est bon, merci!!! J'hallucine : j'ai fait des trucs super compliquées dans tous les sens alors que c'était super simple

    Merci beaucoup

    Attention le .NET sur PDA peut causer des chutes de cheveux

  6. #6
    Membre actif Avatar de gibet_b
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 292
    Points : 296
    Points
    296
    Par défaut
    Xzeos, c'est une boite d'info qui est justement à La Seyne Sur Mer :-) J'avais bien compris que c'était là ou tu habitais. C'est eux qui font XnView, ExpertPDf, Universal PDF Suite, Ability, Superbase, etc. Ils font du développement, de la traduction de logiciel, tout plein de chose. C'est la ou j'ai fait mes stages...

    Tiens nous au courant de tes essais.
    Jean-Baptiste, vieux membre éclairé à la bougie
    -----
    www.e-jbb.net : Écriture et lecture numérique
    ---
    Citation du moment : "On abdique pas l'honneur d'être une cible" - Cyrano De Bergerac

  7. #7
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Pascal Jankowski
    Tu peux t'inspirer de cela.

    Dans un nouveau projet, un seul formulaire et un Tpanel

    [...]

    Cordialement
    Bonjour Pascal,

    J'ai copié ton projet pour l'essayer, mais il ne fonctionne pas !!! Pourquoi ?
    J'utilise Delphi 7. As tu peut être une autre manière de faire ?
    Merci pour ta réponse,

    Christelle

  8. #8
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Bonsoir Christelle,

    Et avant tout, bienvenue sur dvp.

    A mon avis tu as recopié dans delphi, le projet sans redéfinir les liens avec les événements dans l'inspecteur d'objet.


    Je m'explique :

    Dans le code tu trouves un FormCreate alors dans l'inspecteur d'objet tu sélectionnes l'événement onCreate puis tu le relies à la méthode FormCreate et ainsi de suite pour tous les autres événements que tu retrouves dans le projet, soit encore pour les événements Panel1MouseDown, Panel1MouseMove et Panel1MouseUp.

    Cordialement
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  9. #9
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci,

    Effectivement ça marche !
    Je débute en Delphi : nous utilisons Delphi en cours d'informatique et j'ai un projet à rendre prochaînement.
    Ce forum est très intéressant : il m'a beaucoup aidé pour le sql et les tables.

    Christelle

  10. #10
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    on peut adapté la méthode Pascal Jankowski par cele sité ici: http://www.developpez.net/forums/sho...d.php?t=157392
    mais au lieu d'affecté le variable selected en affect directement un evenemnet de déplacement de la souri dans onmousedown et dans onmouseup en lui donne un nil
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  11. #11
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Edam

    Est-ce le code que tu voulais que j'écrive ?

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
      Forms, Dialogs, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        procedure FormCreate(Sender: TObject);
      private
        FcanMove: boolean;
        procedure SetcanMove(const Value: boolean);
        { Déclarations privées }
      public
        { Déclarations publiques }
        property canMove: boolean read FcanMove write SetcanMove;
     
        procedure doMove(Sender: TObject; Shift: TShiftState;
                         X,Y: Integer);
        procedure doMouseDown(Sender: TObject; Button: TMouseButton;
                              Shift: TShiftState; X, Y: Integer);
        procedure doMouseUp(Sender: TObject; Button: TMouseButton;
                            Shift: TShiftState; X, Y: Integer);
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
    { TForm1 }
     
    procedure TForm1.SetcanMove(const Value: boolean);
    begin
      FcanMove := Value;
    end;
     
    procedure TForm1.doMove(Sender: TObject; Shift: TShiftState;
                        X,Y: Integer);
    begin
      if FcanMove then
      if Sender is TPanel then
      begin
        TPanel(Sender).Left := TPanel(Sender).Left + X;
        TPanel(Sender).Top := TPanel(Sender).Top + Y;
      end;
    end;
     
    procedure TForm1.doMouseDown;
    begin
      FcanMove := True;
    end;
     
    procedure TForm1.doMouseUp;
    begin
      FcanMove := False;
    end;
     
    // Assignation des événements
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Panel1.OnMouseMove := doMove;
      Panel1.OnMouseDown := doMouseDown;
      Panel1.OnMouseUp := doMouseUp;
    end;
     
    end.
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  12. #12
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    non pas exactement:
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Buttons, ExtCtrls;
     
    type
       TIntegerArray = array of Integer;
      TForm1 = class(TForm)
        Panel1: TPanel;
        procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Déclarations privées }
        Procedure Mon(Sender: TObject; Shift: TShiftState; X, Y: Integer);
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
    var
        s:string;
        pos:TPoint;
    procedure TForm1.Mon;
    begin
        TPanel(Sender).Left := TPanel(Sender).Left +X-pos.X;
        TPanel(Sender).Top := TPanel(Sender).Top + Y-pos.Y;
    end;
    procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
         if not Assigned(TPanel(Sender).OnMouseMove) then
             panel1.OnMouseMove:=Mon;
         pos.X:=x;
         pos.Y:=y;
    end;
     
    procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
         if Assigned(TPanel(Sender).OnMouseMove) then
            TPanel(Sender).OnMouseMove:=nil;
    end;
     
    end.
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  13. #13
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Ok je vois ce que tu voulais dire maintenant soit faire l'économie de l'événement onMouseMouve.

    Je me permets de modifier quelque peu ton code afin de passer en property le TPoint. Entre nous je n'aime pas trop les variables globales sauf si elles sont justifiées.

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
      Forms, Dialogs, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        Fpos: TPoint;
        procedure Setpos(const Value: TPoint);
        { Déclarations privées }
      public
        { Déclarations publiques }
        property pos:TPoint read Fpos write Setpos;
        Procedure mouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
      end;
     
    var
      Form1: TForm1;
     
    implementation
    {$R *.dfm}
    { TForm1 }
     
    procedure TForm1.Setpos(const Value: TPoint);
    begin
      Fpos := Value;
    end;
     
    procedure TForm1.mouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    begin
       if not (Sender is TPanel) then exit;
       TPanel(Sender).Left := TPanel(Sender).Left +X-pos.X;
       TPanel(Sender).Top := TPanel(Sender).Top + Y-pos.Y;
    end;
     
    procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if not Assigned(TPanel(Sender).OnMouseMove)
        then panel1.OnMouseMove:=mouseMove;
      pos := Point(x,y);
    end;
     
    procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if Assigned(TPanel(Sender).OnMouseMove)
        then TPanel(Sender).OnMouseMove:=nil;
    end;
     
    end.
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  14. #14
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    j'ai trouvé sa aussi dans http://www.developpez.net/forums/sho...d.php?t=158198
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Panel1MouseDown(Sender: TObject;
     Button:TMouseButton; Shift:TShiftState; X,Y: Integer);
    const
    SC_DragMove = $F012; // le nombre qui deplace
    begin
     ReleaseCapture;
    panel1.perform(WM_SYSCOMMAND, SC_DragMove, 0);
    end;
    trés intérésant ,,non???
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  15. #15
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Voire même plus rapide.
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

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

Discussions similaires

  1. Déplacer un panel avec la souris
    Par zyanya dans le forum Flex
    Réponses: 4
    Dernier message: 15/04/2011, 09h38
  2. [C#] Déplacer un composant avec la souris
    Par GéniuS77 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 07/04/2011, 23h12
  3. [C++.net]Déplacer un Panel avec la souris
    Par Dlyan dans le forum MFC
    Réponses: 28
    Dernier message: 03/03/2006, 15h36
  4. Déplacer une TImage avec la souris
    Par Ingelishome dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/03/2005, 14h16

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