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 :

Deplacement simultané de plusieurs fenetre sans bords


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Points : 57
    Points
    57
    Par défaut Deplacement simultané de plusieurs fenetre sans bords
    Bonjour,

    J'aimerais déplacer deux fenetres (et plus) de façon simultané : si je deplace form1 alors form2 doit se deplacer de la même façon que form1 et en meme temps.

    Comment puis je le faire ?

    PS : J'utilise deja FormMouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);


    Merci !

  2. #2
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Il faut selon moi au départ sauver la position de la form1 pour calculer l'offset.
    Puis utiliser l'évènement WM_MOVING comme ceci 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Unit Unit1;
    Interface
    Uses Windows, Messages, SysUtils, Variants, Classes, Graphics,
         Controls, Forms, Dialogs;
     
    Type
      TForm1 = Class(TForm)
        Procedure FormShow(Sender: TObject);
        Procedure WMMoving(Var msg: TMessage); message WM_MOVING;
      End;
     
    Var
      Form1: TForm1;
     
    {----------------------------------------------------------------}
    {                       }Implementation{                         }
    {----------------------------------------------------------------}
    {$R *.dfm} Uses Unit2, Unit3;
     
    Var SavPos: TPoint;
     
    {----------------------------------------------------------------}
    Procedure TForm1.FormShow(Sender: TObject);
    Begin
      Form2.Show;
      Form3.Show;
      SavPos := Point(Form1.Left, Form1.Top);
    End;
     
    {----------------------------------------------------------------}
    Procedure TForm1.WMMoving(Var msg: TMessage);
    Begin
      Form2.Left := Form2.Left + Form1.Left - SavPos.X;
      Form2.Top := Form2.Top + Form1.Top - SavPos.Y;
      Form3.Left := Form3.Left + Form1.Left - SavPos.X;
      Form3.Top := Form3.Top + Form1.Top - SavPos.Y;
      SavPos := Point(Form1.Left, Form1.Top);
    End;
     
    {----------------------------------------------------------------}
    End.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    Bonjour et merci de me répondre,

    J'ai regardé ton code source, et j'ai la très nette impression que j'ai fait la même chose. Le resultat est que lors du deplacement de Form1, la Form2 est deplacée uniquement quand Form1 n'est plus déplacée.

    Clarifions : Si je bouge Form1 de 30 pixel sur la gauche, Form2 ne sera deplacé de 30 pixels vers la gauche QUE lorsque je lacherai mon clic sur la form1.

    Or j aimerais que pendant le deplacement de Form1, Form2 se deplace aussi plutot que d attendre la fin du deplacement pour se repositionner !

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    En réalité, si tu executes mon code tel quel avec des foms vierges, tu t'appercevras que les 3 forms se suivents lorsqu'on déplace Form1. En résumé, avec ce code, l'ensemble des forms se déplace simultannément (j'avais bien compris ta demande de départ). Hélas, si tes forms sont chargées de composants et d'objets, windows va mettre un certain temps avant de redessiner l'ensemble, ce qui a pour effet un déplacement saccadé...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    Ha ok autant pour moi, je vais donc la fermer et regarder de plus près ton code .

    Merci du coup de main !

  6. #6
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je possède une meilleure méthode via FormMouseDown pour le déplacement des forms mais je ne suis pas arrivé à l'utiliser pour ton problème... Je te donne le code, essaye de l'adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Procedure TForm1.FormMouseDown(Sender: TObject; 
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    Begin
      ReleaseCapture;
      Perform(WM_SysCommand, $F012, 0);
    End;

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    Merci pour cette solution que je tenterai des que possible. En attendant, la solution que j ai offre au moins l avantage d etre moins gourmande en performance, ce que je favorise.

    Encore merci.

    Dois je mettre le topic en resolu? ou le laisser tel quel?

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par gobgob
    la solution que j ai offre au moins l avantage d etre moins gourmande en performance
    Si tu le dis...

    Ajoute le tag résolu lorsque tu estimeras le sujet terminé, à+

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    Si tu n es pas de cet avis, explique pourquoi s'il te plait.

    Mon point de vue est le suivant : demander le deplacement d'une fenetre de 300 pixel sur la gauche et bien moins violent que de deplacer 300 fois la fenetre de 1 pixel sur la gauche.

  10. #10
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    http://www.developpez.net/forums/sho...d.php?t=159322

    Dans le sujet ci-dessus, nous avons pu tester toutes les méthodes de déplacement de 2 forms superposées. Celle que j'ai utilisé et qui est la plus performante (et de loin) est la dernière que je t'ai proposé. Un conseil, si tu as la possibilité, teste le résultat de ton code avec un PC pas très puissant, à+

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    Donc je regarderai plus en détail.

    Merci à tout le monde de votre aide !

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

Discussions similaires

  1. Fenetre sans Scroll Bar
    Par nicolas78986 dans le forum MFC
    Réponses: 15
    Dernier message: 01/06/2007, 03h15
  2. [Tkinter] fenetre sans bord.. INFO
    Par airod dans le forum Contribuez
    Réponses: 3
    Dernier message: 09/12/2006, 13h27
  3. Comment deplacer une fenetre sans cadre
    Par Geoff-sk8 dans le forum SDL
    Réponses: 5
    Dernier message: 17/08/2006, 21h38
  4. fenetre sans bords pour attente chargement page
    Par k4eve dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/11/2004, 10h17
  5. [Syntaxe] Action simultanée sur plusieurs élements
    Par FranT dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/03/2003, 20h20

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