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 :

[TForm] Problème lors du déplacement d'une fenêtre sans barre de titre


Sujet :

Composants VCL Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut [TForm] Problème lors du déplacement d'une fenêtre sans barre de titre
    Salut,

    Je souhaiterais permettre à l'utilisateur de pouvoir déplacer une Form sans barre de titre.

    J'ai donc récupérer l'exemple de la FAQ mais ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TDlgErreur.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ReleaseCapture;
      Perform(WM_SysCommand, SC_MOVE, 0);
    end;
    La form est chargé en ShowModal et comporte un Bevel, quelques boutons, un panel avec image et labels.

    Lorsque je clique sur la souris (et que j'ai retiré le Bevel) , le curseur se centre sur le bord haut de la form et aucun déplacement n'est effectué.
    Si le Bevel est la, alors rien ne se passe, l'évenement n'est pas déclenché.

    merci,
    CV :
    - LinkedIn
    - Viadeo

  2. #2
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943

  3. #3
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    milles excuses ....
    merci
    CV :
    - LinkedIn
    - Viadeo

  4. #4
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Pour gérer le déplacement d'une fenêtre via les glisser-déplacer de son panel, on peut faire comme cela :
    //déclaration
    //....
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    // ces procedures d'évènement doivent être utiliser pour tous les composants devant gérer le déplacement

    Private
    FPoint : TPoint;
    // permet de garder la position du curseur par rapport à la fiche

    // permet de gérer le déplacement seulement si un bouton est enfoncé
    ...
    puis dans les gestionnaires d'évenement :
    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 TDlgErreur.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      FPoint.X := X;
      FPoint.Y := Y;
    end;
     
    procedure TDlgErreur.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if (ssLeft in Shift) then
      begin
        Self.Top := Self.Top + (Y - FPoint.Y);
        Self.Left :=  Self.Left + (X - FPoint.X);
      end;
    end;
    Voila comment permettre le déplacement d'une fiche via son composant.

    Pour déplacer une fiche par celle-ci, cette méthode ne fonctionne pas et il faut donc gérer cela par message (comme le précisait Pierre Castelain (cf lien précédent)):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TDlgErreur.WMNCHitTest(var msg: TWMNCHitTest);
    var
      pt: TPoint;
    begin
      inherited;
      pt:= ScreenToClient(Point(msg.XPos, msg.YPos));
      if PtInRect(Rect(0, 0, ClientWidth, Panel2.Height), pt) then
        msg.Result:= HTCAPTION;
    end;
    voila,

    j'espère que cela pourra servir à d'autre.
    A bientot,
    CV :
    - LinkedIn
    - Viadeo

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

Discussions similaires

  1. Déplacement d'une fenêtre sans bordure
    Par Saintux dans le forum wxPython
    Réponses: 4
    Dernier message: 13/06/2009, 07h25
  2. VB2008: Déplacer une fenêtre sans barre de titre plus..
    Par Erreur_404 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 27/01/2009, 16h27
  3. [WPF] Déplacer une fenêtre sans barre de titre
    Par tomlev dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 12/09/2007, 11h25
  4. Déplacer une Form sans barre de titre
    Par stigma dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 16/02/2006, 13h45
  5. Fenêtre sans barre de titre mais redimentionable
    Par gandf dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2005, 10h49

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