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 FMX Delphi Discussion :

Position de fenêtre et proportion de l'écran


Sujet :

Composants FMX Delphi

  1. #1
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut Position de fenêtre et proportion de l'écran
    Bonjour,

    J'essaie de positionner une fenêtre en bas et à droite de l'écran, alors voilà ce que j'ai écrit dans l'evènement onShow:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      setbounds(Monitor.WorkArea.right-500,Monitor.WorkArea.Bottom-300,500,300);
    Dans windows, lorsqu'on choisi une proportion de 100%, ça marche (à quelque chose près car il y a un problème de bordure)
    Mais si on sélectionne par exemple 125%, alors ma fenêtre sort de l'écran à droite et en bas.
    Le problème est que sur les nouveaux portables à haute résolution, la proportion n'est pas de 100%.
    Comment prévenir de ce problème et être certain que ma fenêtre sera bien cadré en bas à droite quelque soit la proportion d'écran ?

    merci
    Franck

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Delphi procède à la mise à l'échelle à la création de la fiche, puis sur événements mais pas à chaque modification de propriété.

    Si tu utilises Width/Height, l'alignement sera correct puisqu'elles ont été adaptées dès la création :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetBounds(Screen.WorkAreaWidth -Width, Screen.WorkAreaHeight -Height, Width, Height);
    Mais si tu devais ensuite changer ces dimensions, tu devras demander une nouvelle mise à l'échelle par ScaleForCurrentDpi.
    Le problème est que ça n'affecte pas le Top/Left de la fiche. Il faut donc y aller par étape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Width  := 500;
    Height := 300;
    ScaleForCurrentDpi;
    SetBounds(Screen.WorkAreaWidth -Width, Screen.WorkAreaHeight -Height, Width, Height);
    Ou alors une fonction de conversion (ici 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
      TCustomFormHelper = class Helper for TCustomForm
        function Scale(Value :integer) :integer;
      end;
     
    function TCustomFormHelper.Scale(Value: integer): integer;
    begin
      Result := MulDiv(Value, Monitor.PixelsPerInch, PixelsPerInch);
    end;
     
    procedure TForm1.FormShow(Sender: TObject);
    begin
      SetBounds(Screen.WorkAreaWidth -Scale(500), Screen.WorkAreaHeight -Scale(300), Scale(500), Scale(300));
    end;

  3. #3
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Merci d'avoir répondu Andnotor,

    La fonction ScaleForCurrentDpi n'existe, à priori, que pour la VCL..

    Sinon lorsque je compile avec l'option HD désactivée, je n'ai pas le problème (Menu Options/Projet puis Application et "Activer la haute résolution" décochée)
    Mais à quoi sert cette option ??
    J'ai vu que c'était une prise en charge des écrans 4K mais qu'apporte cette option ?

    Merci

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Citation Envoyé par franckcl Voir le message
    Mais à quoi sert cette option ??
    A avertir le système opératif que l'application se charge elle-même de la mise à l'échelle et qu'il n'a pas besoin de s'en occuper.

    Sinon, l'OS procède à la mise à l'échelle en stretch-ant simplement l'image de la fiche stockée dans le Windows Display Manager. Le rendu est bien moins bon.

Discussions similaires

  1. Garder Taille et positions des fenetres
    Par Cazaux-Moutou-Philippe dans le forum Mandriva / Mageia
    Réponses: 1
    Dernier message: 05/07/2007, 21h04
  2. MDI Application - position des fenetres
    Par Redsky dans le forum Delphi
    Réponses: 4
    Dernier message: 26/09/2006, 09h57
  3. [Position de fenetre]
    Par datym dans le forum Delphi
    Réponses: 2
    Dernier message: 19/07/2006, 09h05
  4. [MFC] Taille et position de fenetres (CFormView)
    Par MarieMtl dans le forum MFC
    Réponses: 7
    Dernier message: 10/11/2005, 18h15
  5. [web] [PerlTk] Position des fenêtres
    Par Cyspak dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 05/11/2004, 11h49

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