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

Langage Delphi Discussion :

Connaître la fin du resize d'une form


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut Connaître la fin du resize d'une form
    Bonjour à toutes et à tous,

    J'essai de détecter la fin du resize d'une form.
    J'ai detsté cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure WMExitSizeMove(var Message: TMessage) ; message WM_EXITSIZEMOVE;
    ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure WMSize(var Message: TMessage) ; message WM_Size;
    J'ai essayer dans l'évenement Resize de la form, mais celui ci est a utiliser lorsqu'on est entrain de retailler la form.

    Mon but est :
    1) de rien faire tant que l'utilisateur retaille la form
    2) d'attraper l'information de fin (lorsqu'il a fini de la retailler)
    3) lorsque il maximise également la form
    4) lorsque il minimise également la form

    Donc connaissez vous un moyen de connaître ces informations ?

    Merci à vous

  2. #2
    Membre chevronné Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Par défaut
    Peut être qu'avec les messages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WM_ENTERSIZEMOVE
    WM_EXITSIZEMOVE
    SIZE_MAXIMIZED
    SIZE_RESTORED
    ça pourra être possible

  3. #3
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Citation Envoyé par JustMe Voir le message
    Peut être qu'avec les messages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WM_ENTERSIZEMOVE
    WM_EXITSIZEMOVE
    SIZE_MAXIMIZED
    SIZE_RESTORED
    ça pourra être possible
    Salut Just,

    Enter ou Exit ne fonctionne que si tu bouge la form avec la souris pas quand tu maxisme ou minimise

    J'ai vue le restored effectivement, mais le problème c'est que cette évenement attraper est just au début du restore (la form est pas encore restored) donc je ne peux pas l'utiliser.
    Je cherche en fait la position final de la form lorsque l'utilsateur à fini de retailler ou fini de bouger la form ou fini de la maximisée.

    Citation Envoyé par DOLPat® Voir le message
    Bonjour

    Tu était pourtant sur la bonne voie:

    2) d'attraper l'information de fin (lorsqu'il a fini de la retailler): WM_EXITSIZEMOVE
    3) lorsque il maximise également la form: Utilisation de l'événement FormResize de la fiche.
    4) lorsque il minimise également la form: Utilisation de l'événement Application.OnMinimize

    Pat.
    Salut,
    Alors évidement avant de poser mon message vous imaginez bien les millions de teste qu'on fait...
    Bref pour te répondre :
    1) Wm_ExitSizeMove n'est pas du tout une fin de resize mais un fin de mouvement de form lorsque tu a fini de la bouger, si tu maximise ou minimise il n'y a même pas de WM_ExitSizeMove donc cela ne peut pas servir de "lorsqu'il a fini de la retailler"
    2) FormResize maintenant n'est pas l'évement de maximise exlcusivement le FormResize a lieu tout au long du resize d'une form, et mon travail doit avoir lieu 1 seule fois
    3) idem pour ton commentaire que le 2)

    J'ai essaye le OnPaint qui a lieu entre 1 à 2 fois a chaque mouvement de form quelque soit sont mouvement (début/fin/entrain de) mais le "entrain de" me gêne évidement. J'ai tenté d'utiliser une variable globale que je remet à zero dans mon FormResize et que je teste dans mon OnPaint mais bon c'est tordu.

    J'ai essayé également le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure WMSysCommand (var Msg: TWMSysCommand) ;message WM_SYSCOMMAND;
    Avec les SC_MAXI ou autre message, mais ce n'est pas concluant.


    Merci de votre aide.

  4. #4
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Apres reflexion,

    Ce que j'ai besoin de savoir c'est en fait si la form change de taille que se soit en move en resize en restore en minimize...
    Mais cette information j'aimerais la connaître à la fin de tout retaillage.

    Existe-t-il cette information quelquepart ? ou alors dans quelle évenement je peux tester cette différence de taille ?

    Merci.

  5. #5
    Membre chevronné Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Par défaut
    Peut être que d'autres message vont t'aider comme :
    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
    procedure WMSizing(var Message: TMessage); message WM_SIZING;
    procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
    ...
    procedure TForm1.WMSizing(var Message: TMessage);
    begin
     
     
    end;
    procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
    begin
      case Msg.CmdType of
        SC_MINIMIZE:
          begin
          end;
        SC_MAXIMIZE:
          begin
          end;
        SC_RESTORE:
          begin
          end;
      end;
      inherited;
    end;

  6. #6
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Citation Envoyé par JustMe Voir le message
    Peut être que d'autres message vont t'aider comme :
    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
    procedure WMSizing(var Message: TMessage); message WM_SIZING;
    procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
    ...
    procedure TForm1.WMSizing(var Message: TMessage);
    begin
     
     
    end;
    procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
    begin
      case Msg.CmdType of
        SC_MINIMIZE:
          begin
          end;
        SC_MAXIMIZE:
          begin
          end;
        SC_RESTORE:
          begin
          end;
      end;
      inherited;
    end;
    J'ai testé le WMSysCommand, etfigure toi que le message SC_MAXIMIZE ne fonctionne pas si dans la propriété de la form tu place déjà en Ws_Maximised, il n'y a pas de message (cela fonctionne après par contre).
    Maintenant si tu utilise WM_Size en testant SIZE_MAXIMIZED et que tu place dans la conception le propriété Windowstate à wsMaximized ce message est envoyé 4 fois !! mdr Bon là j'ai replacer la propriété windowsState à wsNormalet dans le show de la form je modifie le WindowsState et l'évement Wm_Size est bien appelé qu'une fois et fonctionne mieux que le SC_MAXIMIZED du MWSysCommand.

    Mais il y a un hic, ma procédure qui est en fait un recalcul de la taille des colonnes de plusieur grid, lorsque je la place dans le message WM_Size j'ai une belle access violation...

    Je n'ai pas testé par contre le Sizing je pensais que ce dernier est comme le On Resize de la form. je vais voir.

    Merci





    Citation Envoyé par DOLPat® Voir le message
    Re-bonjour,

    j'en démords pas, Wm_ExitSizeMove est provoqué lorsque l'utilisateur relâche le bouton de la souris après avoir soit déplacé ou redimensionné la fenêtre.

    Et tu dis bien que tu veux cette info après-coup:


    Pat.

    Alors, soit je comprends mal ta question ou alors
    En fait ce que je veux dire c'est qu'on utilise à tord WM_ExitSizeMove ce message n'est pas appelé quand tu restore ou maximise la form et pourtant dans le cas d'un restore la taille change !!!
    En fait ce message ne fonctionne que si la fenêtre n'est pas maximisée et si le restore est terminé, a ce moment précis tu peux effectivement retaillé la fenetre ou la bouger et là tu reçoit ce message.


    Bon je pense que cela n'ai pas possible en une seule information.

    Donc pour le moment j'utilise toujours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure WMExitSizeMove(var Message: TMessage) ; message WM_EXITSIZEMOVE;
     
    procedure TForm1.WMExitSizeMove(var Message: TMessage) ;
    begin
       SCalendrierClick(Nil); // On replace toutes les colonnes des grids correctement
    end;
    Là on règle juste l'histoire du retaillage quand la form est en restore

    Maintenant je vais voir pour le maximized si avec Sizing cela m'aide ou si j'arrive à faire fonctionner ma procédure sans rejet "access biolation" dans le WM_Size.


    MErci bien à vous.

  7. #7
    Membre émérite Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Par défaut
    Re-bonjour,

    j'en démords pas, Wm_ExitSizeMove est provoqué lorsque l'utilisateur relâche le bouton de la souris après avoir soit déplacé ou redimensionné la fenêtre.

    Et tu dis bien que tu veux cette info après-coup:
    Mais cette information j'aimerais la connaître à la fin de tout retaillage.
    Pat.

    Alors, soit je comprends mal ta question ou alors

  8. #8
    Membre émérite Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Par défaut
    Bonjour

    Tu était pourtant sur la bonne voie:

    2) d'attraper l'information de fin (lorsqu'il a fini de la retailler): WM_EXITSIZEMOVE
    3) lorsque il maximise également la form: Utilisation de l'événement FormResize de la fiche.
    4) lorsque il minimise également la form: Utilisation de l'événement Application.OnMinimize

    Pat.

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

Discussions similaires

  1. [Débutant] Problème de la fin de vie d'une form
    Par JeanNoel53 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/04/2012, 19h41
  2. Empecher le resize d'une form
    Par Elstak dans le forum C#
    Réponses: 3
    Dernier message: 01/05/2009, 14h46
  3. Resize d'une form sans bordure
    Par Papy214 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/05/2008, 15h13
  4. Resize - hauteur d'une form
    Par mosquitout dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 11/02/2008, 14h08
  5. Réponses: 2
    Dernier message: 28/06/2006, 16h50

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