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 CanResize DPI


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 260
    Points : 171
    Points
    171
    Par défaut TForm CanResize DPI
    Bonjour à tous,

    Comment géré le redimensionnement d’un TForm en prenant en charge le DPI ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    { Form CanResize }
    procedure TFrom.FormCanResize(Sender: TObject;
      var NewWidth, NewHeight: Integer; var Resize: Boolean);
    const
      AWidth = 900;
      AHeight = 550;
    begin
      if NewWidth < AWidth then
        NewWidth := AWidth;
     
      if NewHeight < AHeight then
        NewHeight := AHeight;
    end;
    Mon Form par défaut : Height = 550, Width = 900

    A l’ouverture avec le DPI : Height = 774, Width = 1339

    Merci
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  2. #2
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 260
    Points : 171
    Points
    171
    Par défaut
    Citation Envoyé par XeGregory Voir le message
    Bonjour à tous,

    Comment géré le redimensionnement d’un TForm en prenant en charge le DPI ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    { Form CanResize }
    procedure TFrom.FormCanResize(Sender: TObject;
      var NewWidth, NewHeight: Integer; var Resize: Boolean);
    const
      AWidth = 900;
      AHeight = 550;
    begin
      if NewWidth < AWidth then
        NewWidth := AWidth;
     
      if NewHeight < AHeight then
        NewHeight := AHeight;
    end;
    Mon Form par défaut : Height = 550, Width = 900

    A l’ouverture avec le DPI : Height = 774, Width = 1339

    Merci
    Ou sinon il faut que je passe les constantes en Variable Private (AWidth, AHeight).
    Je récupère les nouvelle dimensions du Form visa la procédure FormCreate. (Form.Width := AWidth, Form.Height := AHeight).
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  3. #3
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 260
    Points : 171
    Points
    171
    Par défaut
    J'ai aussi le même problème avec le TPanel visa le TSplitter sur le redimensionnement Min du Tpanel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Panel.Constraints.MinWidth := 250;
      Splitter.MinSize := Panel.Constraints.MinWidth;
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  4. #4
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 260
    Points : 171
    Points
    171
    Par défaut
    Citation Envoyé par XeGregory Voir le message
    J'ai aussi le même problème avec le TPanel visa le TSplitter sur le redimensionnement Min du Tpanel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Panel.Constraints.MinWidth := 250;
      Splitter.MinSize := Panel.Constraints.MinWidth;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if Screen.PixelsPerInch > USER_DEFAULT_SCREEN_DPI then // 96 DPI
      Panel.Constraints.MinWidth := 250 + Screen.PixelsPerInch;
    else
      Panel.Constraints.MinWidth := 250;
     
      Splitter.MinSize := Panel.Constraints.MinWidth;
    Cela peut être une solution avec une différence taille

    Screen.PixelsPerInch : 144
    Mon Panel par défaut : Width = 250
    A l’ouverture avec le DPI : Width = 375

    Screen.PixelsPerInch + PixelsPerInch = Width 394 cela me fait une différence de 19 px (A l’ouverture avec le DPI - Screen.PixelsPerInch + PixelsPerInch).
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Tu peux poser dix fois la question, la réponse sera invariablement la même...

  6. #6
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 260
    Points : 171
    Points
    171
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Tu peux poser dix fois la question, la réponse sera invariablement la même...
    la Solution été la !
    https://www.developpez.net/forums/d2...ifeste-semble/

    Citation Envoyé par Andnotor Voir le message
    C'est à toi de prendre en compte la résolution lors de dessins personnalisés, toutes les quotes doivent être MulDiv.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Left := 10;                                              // Faux
    Left := MulDiv(10, CurrentPPI, USER_DEFAULT_SCREEN_DPI); // Juste
    Tu peux ensuite simplifier cela par un class helper :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    type
      TControlHelper = class Helper for TControl
      public
        function PPI(aValue :integer) :integer;
      end;
     
    implementation
     
    { TControlHelper }
     
    function TControlHelper.PPI(aValue: integer): integer;
    begin
      Result := MulDiv(aValue, CurrentPPI, USER_DEFAULT_SCREEN_DPI);
    end;
    que tu invoquera ainsi :
    A noter que ScaleValue est apparu en D11.2.
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

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

Discussions similaires

  1. [TForm] Problème lors du déplacement d'une fenêtre sans barre de titre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/10/2004, 17h10
  2. Réponses: 2
    Dernier message: 17/09/2003, 09h36
  3. Taille d'un TForm à l'état Maximized
    Par Altau dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/06/2003, 12h57
  4. [TForm] Ne pas autoriser l'ouverture d'un form
    Par sbeu dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2002, 11h20
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

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