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

  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
    Points : 1 113
    Points
    1 113
    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 confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    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
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

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

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Points : 790
    Points
    790
    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.
    À +
    Pat.


    Si vous avez trouvé chaussure à votre pied... euh solution à votre problème, n'oubliez pas de clôturer le sujet en le marquant comme:
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    Windows 8.1, Lazarus 1.8.2 SVN 57369 FPC 3.0.4 x86_64-win64-win32/win64

  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
    Points : 1 113
    Points
    1 113
    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.

  5. #5
    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
    Points : 1 113
    Points
    1 113
    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.

  6. #6
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    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;
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

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

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Points : 790
    Points
    790
    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
    À +
    Pat.


    Si vous avez trouvé chaussure à votre pied... euh solution à votre problème, n'oubliez pas de clôturer le sujet en le marquant comme:
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    Windows 8.1, Lazarus 1.8.2 SVN 57369 FPC 3.0.4 x86_64-win64-win32/win64

  8. #8
    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
    Points : 1 113
    Points
    1 113
    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.

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

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

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

    Bon je pense que cela n'ai pas possible en une seule information.
    C'était évident pour moi, d'où ma proposition de "jonglage" avec les fonctions Application.OnMinimize, FormResize et WM_ExitSizeMove.
    À +
    Pat.


    Si vous avez trouvé chaussure à votre pied... euh solution à votre problème, n'oubliez pas de clôturer le sujet en le marquant comme:
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    Windows 8.1, Lazarus 1.8.2 SVN 57369 FPC 3.0.4 x86_64-win64-win32/win64

  10. #10
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    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).
    Tu veux dire que, si a la conception tu met ta form a wsMaximized, tu n'as pas le message OnMaximized ? C'est normal. Pour eviter ca, il te suffit de faire ton traitement
    dans le OnCreate de ta fiche.

    De toutes facons, je ne pense pas qu'il existe un message unique qui prévienne quand la taille de ta fiche change, de n'importe quelque manière ...

    Bonne chance

  11. #11
    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
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par DOLPat® Voir le message
    Bonjour



    C'était évident pour moi, d'où ma proposition de "jonglage" avec les fonctions Application.OnMinimize, FormResize et WM_ExitSizeMove.
    Même si on peut décomposer les évenements pour faire agir ma procédure, il me reste un problème que j'arrive pas à gérer.

    Quand on détecte le maximized la taille de la fenêtre au début est égale à celle de ma conception, une fois terminer mon maximized ma procédure à déjà eu lieu et donc il n'y a aucun changement !!! Si seulement je pouvais connaître la fin d'un maximized pour récupérer la taille finale de ma fenêtre et le faire appel à ma procédure...

    Voilà un morceau de ma procédure sCalendrierClick();

    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
    procedure TFPrincipal.InitStringGridRu;
    Var
      i: integer;
      NumeroLigne: Integer; // sert à trouver le placement de la première ligne du StringGridSalaries
    begin
      Screen.Cursor := crSQLWait;
    // Taille ecran à gérer 1024  ou 1152 ou 1280 ou 1600 ou 1920
    // On doit adapter selon la taille de la fenêtre
    //sStatusBar1.Panels[4].Text := 'Taille Fenêtre : '+inttostr(Self.Width) + ' * ' + inttostr(Self.Height);
     
      case Self.Width of
        0..1035:
        begin
          // non gérer on affiche rien
        end;
        1040..1167: // Taille Ecran 1024 * x
        Begin
          TailleColonne1Gridjour    := 160;
          TailleColonne1GridSemaine := 130;
          TailleColonne1GridSalarie := 130;
          TailleFontSize            := 7;
          TailleColonne2Jour        := 810;
          TailleColonneSemaine      := 120;
          TailleColonneSalarie      := 120;
        End;
        1168..1295: // Taille Ecran 1152 * x
        begin
          TailleColonne1Gridjour    := 170;
          TailleColonne1GridSemaine := 250;
          TailleColonne1GridSalarie := 250;
          TailleFontSize            := 8;
          TailleColonne2Jour        := 930;
          TailleColonneSemaine      := 120;
          TailleColonneSalarie      := 120;
        end;
        1296..1615: // Taille Ecran 1280 * x
        begin
          TailleColonne1Gridjour    := 178;
          TailleColonne1GridSemaine := 178;
          TailleColonne1GridSalarie := 178;
          TailleFontSize            := 9;
          TailleColonne2Jour        := 1050;
          TailleColonneSemaine      := 150;
          TailleColonneSalarie      := 150;
        end;
        1616..1935: // Taille Ecran 1600 * x
        begin
          TailleColonne1Gridjour    := 225;
          TailleColonne1GridSemaine := 248;
          TailleColonne1GridSalarie := 248;
          TailleFontSize            := 9;
          TailleColonne2Jour        := 1320;
          TailleColonneSemaine      := 180;
          TailleColonneSalarie      := 180;
        end;
        else // au delà de 1935  // taille Ecran 1920 * x
        begin
          TailleColonne1Gridjour    := 256;
          TailleColonne1GridSemaine := 188;
          TailleColonne1GridSalarie := 188;
          TailleFontSize            := 10;
          TailleColonne2Jour        := 1590;
          TailleColonneSemaine      := 240;
          TailleColonneSalarie      := 240;
        end;
      end;
    J'ai donc cela pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TFPrincipal.WMSyscommande(var msg:TWMSysCommand);
    begin
      if (Msg.CmdType = SC_RESTORE)  then
      begin
        sCalendrierClick(Nil);
        Msg.Result := 0;
      end;
      DefaultHandler(Msg);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFPrincipal.OnFinResize(var msg:TMessage);
    begin
      sCalendrierClick(Nil);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFPrincipal.FormActivate(Sender: TObject);
    begin
      sCalendrierClick(Sender);
    end;
    Mais comme je le précise plus, une fois la fenetre en pleine écran, si je la minimise puis la maximise, lors du maximise je ne suis pas dan sle bon Case of Self.Width

    Merci à vous

  12. #12
    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
    Points : 1 113
    Points
    1 113
    Par défaut
    De retour,

    Donc après mon dernier message ci-dessous, voilà ce que j'ai fais..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TFPrincipal.FormShow(Sender: TObject);
    Var
      i: Integer;
    begin
      LanceMaximise := False;
    // ...
    end;
    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
    procedure TFPrincipal.WMSyscommande(var msg:TWMSysCommand);
    begin
      if (Msg.CmdType = SC_RESTORE)  then
      begin
        LanceMaximise := True;
        Msg.Result := 0;
      end
      else
        if (Msg.CmdType = SC_MAXIMIZE) then
        begin
          LanceMaximise := True;
          Msg.Result :=0;
        end;
     
      DefaultHandler(Msg);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFPrincipal.OnFinResize(var msg:TMessage);
    begin
      sCalendrierClick(Nil);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TFPrincipal.FormPaint(Sender: TObject);
    begin
      if LanceMaximise then sCalendrierClick(Sender);
      LanceMaximise := False;
    end;
    Je ne suis pas sur du nombre de fois que repaint aura lieu dans ce cas précis, surtout que dans ma procédure sCalendrierClick() il y a des appels ADOquery et des creates de composant dynamique (que j'ai pas encore mis) mais de la sorte cela fonctionne pour la taille des colonnes des grids.

    Des suggestions ?

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 745
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 745
    Points : 13 306
    Points
    13 306
    Par défaut
    Salut Buzz

    OnPaint ne surviendra pas si souvent que cela parce que WM_PAINT n'est pas un message prioritaire. Ils seront traités en vrac (en une fois) lorsque la tâche n'aura plus que cela à faire.
    Il faudrait surtout que tu nous dises pourquoi il y a tellement de traitements à réaliser au retaillage de la fiche. Simuler des clicks ou faire des requêtes au redimensionnement; quelque chose m'échappe

  14. #14
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Surcharge la méthode CanResize

  15. #15
    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
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Montor Voir le message
    Surcharge la méthode CanResize
    bonsoir Montor, pense tu qu'on puisse en la surchargeant connaitre la fin d'un maximised ET la fin d'un resize de form ?

    Citation Envoyé par Andnotor Voir le message
    Salut Buzz

    OnPaint ne surviendra pas si souvent que cela parce que WM_PAINT n'est pas un message prioritaire. Ils seront traités en vrac (en une fois) lorsque la tâche n'aura plus que cela à faire.
    Il faudrait surtout que tu nous dises pourquoi il y a tellement de traitements à réaliser au retaillage de la fiche. Simuler des clicks ou faire des requêtes au redimensionnement; quelque chose m'échappe
    Salut AndNotOr comment vas-tu.

    Pour te répondre

    1) les traitements que je dois faire
    - Calcul de Date (c'est juste des remplissage de variable globale)
    - J'ai 4 Tabsheets (qui ont chacun 1 Stringridru dérivé d'un stringgrid classique en Alclient) sur un TPanel en alclient dans ma fiche principal, selon le Tabhsheet actif je dois calculer alors la taille de la premiere colonne puis les autres, la taille d'affichage du stringGrid etc..
    - Free les composants présent dans le StringGrid du tabsheet actif
    - Me connecter à une base access sur 1 Table pour récupérer des données me permettant de placer en dynamique des composants ShapeRu (dérivé d'un Shape) dsur chaque colonne de me sStringGrid
    2) Pourquoi faire ces traitements
    Je dois afficher des Shapes sur un StringGrid et selon la taille de ma fenêtre je tiens à ce que chacun de mes grid ne puisse pas faire un Scroll Verticale donc je redimensionne mes grids pour qu'ils soient pile poile à la taille de la fenêtre en verticale. Cela me sert aussi pour connaitre la taille minimum de mon shape (composant dynamique à créer)

    Mais la vrai raison , c'est que il m'est trés difficile lorsque je scroll verticalement de replacer correctement mes shapes, ou pire lorsqu'on déplace un shape je ne sais pas faire en sorte que le scroll s'active (quand je vais de gauche à droite avec le shape), alors je me suis dit de recalculer la taille de mon grid par rapport à la taille de la fenêtre ainsi plus de probleme de déplacement de mes shape et autre probleme...

    Avec ce que j'ai fais plus haut, cela fonctionne apparement bien.

    J'ai même ajouté ce traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TFPrincipal.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
    begin
      inherited;
      With Msg.MinMaxInfo^ do
      begin
        ptMinTrackSize.X := 1040;
      end;
    end;

  16. #16
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 745
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 745
    Points : 13 306
    Points
    13 306
    Par défaut
    Depuis le début de tes Stringridru, je te conseillais de te passer de ces TShape et de te contenter des fonctions de repeinture

    Ça demanderait un peu de réflexion, mais calculer des dates, détruire et reconstruire les composants de la fiche à chaque redimensionnement; je dis : peut mieux faire...

  17. #17
    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
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Depuis le début de tes Stringridru, je te conseillais de te passer de ces TShape et de te contenter des fonctions de repeinture

    Ça demanderait un peu de réflexion, mais calculer des dates, détruire et reconstruire les composants de la fiche à chaque redimensionnement; je dis : peut mieux faire...
    LOL, sur que je peux mieux faire...

    Mais tu c'est bien que les effet 3D ou les evenements sur mes shapes son difficile à reproduire par un simple recoloriage du grid et puis se serais telement long à faire...lol

    Par contre j'ai changé ma manière de faire, voilà ce que j'ai fais pour justement éviter un détruction/reconstruction à chaque redimensionnement comme du le sugère et je te rejoind c'est un peu lourd comme traitement.

    Evidement tu va me dire que c'est radicale mais voilà :

    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
    procedure TFPrincipal.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
    begin
      inherited;
      With Msg.MinMaxInfo^ do
      begin
        case Screen.Width of
        0..1023   : ; // même pas en rêve
        1024..1151: ptMinTrackSize.X := 1040;
        1152..1279: ptMinTrackSize.X := 1168;
        1280..1599: ptMinTrackSize.X := 1296;
        1600..1919: ptMinTrackSize.X := 1616;
        Else
          ptMinTrackSize.X := 1936;
        end;
      end;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFPrincipal.FormActivate(Sender: TObject);
    begin
      sCalendrierClick(Sender);
    end;
    Dans mon DPR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // ...
      if Screen.Width < 1024 then
      begin
        MessageDlg('xxxxxxx ne peut pas fonctionner sur votre écran.'+#13+'La taille de votre écran trop petit.'+#13+#13+'La taille minimum autorisée est de 1024*768',mtWarning,[mbOK],0);
        Exit;
      end;
    // ...
    Et puis déssiner sur mon stringgrid si tu te souvient de mon programme c'est quaziement impossible et se ne serait pas jolie ...

    Que penses-tu de cette version ? lol

+ 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