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

Lazarus Pascal Discussion :

Ajuster la hauteur d'une fenêtre contenant une barre de menu [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut Ajuster la hauteur d'une fenêtre contenant une barre de menu
    Bonjour !

    Je me décide à vous soumettre un problème que je cherche en vain à résoudre à chaque nouveau projet.

    Mettons que j'ai une fenêtre avec une barre de menu. Je veux mettre dans cette fenêtre un bouton de 300 pixels sur 200, avec une marge de 2 pixels tout autour. Quelle sera la hauteur de la fenêtre ? Sur l'ordinateur sur lequel je suis en train de travailler, j'ai trouvé empiriquement que je devais régler la propriété Height de ma fenêtre (TForm) à 233.
    Nom : capture.png
Affichages : 260
Taille : 14,0 Ko
    Mais si je change d'environnement, ça risque de ne plus fonctionner, n'est-ce pas ?

    233 - (200 + 2 * 2) = 29

    Il correspond à quoi ce 29 ?

    Connaîtriez-vous une stratégie permettant de régler ce problème ?
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé

    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 65
    Par défaut
    Bonjour,

    Et en utilisant la propriété Screen.Height ?

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par microb Voir le message
    Bonjour,

    Et en utilisant la propriété Screen.Height ?
    Merci pour votre réponse, qui pourra me servir une autre fois, mais en l'occurrence je crois que ça ne correspond pas à mon problème (que je n'ai peut-être pas expliqué assez clairement).

  4. #4
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut Roland

    Citation Envoyé par Roland Chastain Voir le message
    Bonjour !

    Je me décide à vous soumettre un problème que je cherche en vain à résoudre à chaque nouveau projet.

    Mettons que j'ai une fenêtre avec une barre de menu. Je veux mettre dans cette fenêtre un bouton de 300 pixels sur 200, avec une marge de 2 pixels tout autour. Quelle sera la hauteur de la fenêtre ? Sur l'ordinateur sur lequel je suis en train de travailler, j'ai trouvé empiriquement que je devais régler la propriété Height de ma fenêtre (TForm) à 233.


    Mais si je change d'environnement, ça risque de ne plus fonctionner, n'est-ce pas ?

    233 - (200 + 2 * 2) = 29

    Il correspond à quoi ce 29 ?

    Connaîtriez-vous une stratégie permettant de régler ce problème ?
    Salut Roland, ton problème est en fait assez simple. Mais il faut prendre en compte que la hauteur de la barre de titre n'est pas prise en compte lorsque tu règles les dimensions de ta fenêtre. En effet la hauteur de la barre de titre peut varier d'un OS à l'autre, suivant le thème de l'OS et suivant le style choisi dans Lazarus (QT, GTK, Natif, Cocoa etc...)

    La hauteur du menu = TMenu.Height;

    La Largeur optimale pour ta fenêtre sera donc : 300 (Largeur du bouton) + 4 (Les marges à gauche et droite du bouton = 2 + 2 ) = 304
    La hauteur optimale pour ta fenêtre sera donc : 200 (Hauteur du bouton) + 4 (Les marges en haut et bas du bouton = 2 + 2) + 20 (Hauteur du menu) = 224

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      Self.Width := BTQuit.Width + 4;
      Self.Height := BTQuit.Height + 4 + MMMenu.Height;
    Sinon, pourquoi ne pas mettre Les propriétés de BTQuit : align := alClient et BorderSpacing.Around := 2 ?

    Tu peux également restreindre les dimensions de ta form à l'aide de la propriété Constraints
    Ou tu peux encore utiliser la propriété AutoSize de ta form (sauf qu'avec celle-ci dans l'IDE la form ne se met pas à jour automatiquement) qui redimensionnera alors automatiquement celle-ci en fonction des dimensions de ton bouton. (des contrôles visible dans ta form)

    Bref à toi de voir si tu veux jouer avec les propriétés de la form et/ou du bouton, et comment. Il y a plusieurs solutions. Ou si tu veux tout faire par code.

    Bonne soirée

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Merci Jérôme pour ta réponse. Je ne connaissais pas TMenu.Height; donc c'est déjà ça de gagné.

    Citation Envoyé par BeanzMaster Voir le message
    La hauteur optimale pour ta fenêtre sera donc : 200 (Hauteur du bouton) + 4 (Les marges en haut et bas du bouton = 2 + 2) + 20 (Hauteur du menu) = 224

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      Self.Width := BTQuit.Width + 4;
      Self.Height := BTQuit.Height + 4 + MMMenu.Height;
    Désolé, mais chez moi (enfin, sur l'un de mes ordinateurs, car sur l'autre c'est différent) c'est 233. Et ton code ne me donne pas le résultat attendu. Je ne me fatigue pas à faire une capture d'écran : je suppose que tu me croiras sur parole.

    Citation Envoyé par BeanzMaster Voir le message
    Sinon, pourquoi ne pas mettre Les propriétés de BTQuit : align := alClient et BorderSpacing.Around := 2 ?

    Tu peux également restreindre les dimensions de ta form à l'aide de la propriété Constraints
    Ou tu peux encore utiliser la propriété AutoSize de ta form (sauf qu'avec celle-ci dans l'IDE la form ne se met pas à jour automatiquement) qui redimensionnera alors automatiquement celle-ci en fonction des dimensions de ton bouton. (des contrôles visible dans ta form)
    Tout ça est intéressant. Je vais explorer ces différentes pistes.

    Mais comme tu t'en doutes, ma fenêtre avec un seul bouton n'était qu'un exemple. Le projet pour lequel j'essaie de résoudre ce problème est celui-ci.

    https://github.com/rchastain/velena

    Je voudrais que le bas de la zone client coïncide exactement avec le bas du label (comme sur la capture d'écran). Mais dès que je passe d'un environnement à un autre (à savoir de Mageia à Manjaro), le résultat n'est plus le même.

  6. #6
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Merci Jérôme pour ta réponse. Je ne connaissais pas TMenu.Height; donc c'est déjà ça de gagné.

    Désolé, mais chez moi (enfin, sur l'un de mes ordinateurs, car sur l'autre c'est différent) c'est 233. Et ton code ne me donne pas le résultat attendu. Je ne me fatigue pas à faire une capture d'écran : je suppose que tu me croiras sur parole.
    Ok donc la valeur de TMenu.Height; est différente ? non ? car elle dépend de la taille de la police de caractères utilisée.


    Citation Envoyé par Roland Chastain Voir le message
    Tout ça est intéressant. Je vais explorer ces différentes pistes.

    Mais comme tu t'en doutes, ma fenêtre avec un seul bouton n'était qu'un exemple. Le projet pour lequel j'essaie de résoudre ce problème est celui-ci.

    https://github.com/rchastain/velena

    Je voudrais que le bas de la zone client coïncide exactement avec le bas du label (comme sur la capture d'écran). Mais dès que je passe d'un environnement à un autre (à savoir de Mageia à Manjaro), le résultat n'est plus le même.
    Je vais y jeter un oeil

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Ok donc la valeur de TMenu.Height; est différente ? non ? car elle dépend de la taille de la police de caractères utilisée.
    Voici ce que j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ShowMessage(Format('MMMenu.Height=%d', [MMMenu.Height]));
      Self.Height := BTQuit.Height + 4 + MMMenu.Height;
    end;
    Et le résultat :

    Nom : capture1.png
Affichages : 240
Taille : 13,4 Ko

    Nom : capture2.png
Affichages : 228
Taille : 14,0 Ko

    Manifestement la valeur de TMenu.Height; est fausse.

  8. #8
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Voici ce que j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ShowMessage(Format('MMMenu.Height=%d', [MMMenu.Height]));
      Self.Height := BTQuit.Height + 4 + MMMenu.Height;
    end;
    Et le résultat :

    Manifestement la valeur de TMenu.Height; est fausse.
    Effectivement la valeur renvoyée par TMenu.Height; est fausse. En regardant ta capture de plus près la hauteur du menu = 29px et il y a bien 8px en trop en bas. Il y a bel et bien un problème sous Linux. Cela serait un bug à reporter sur le forum anglais. Je testerai demain avec Manjaro et avec mon Mac pour comparer.
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  9. #9
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Sinon, pourquoi ne pas mettre Les propriétés de BTQuit : align := alClient et BorderSpacing.Around := 2 ?
    Je viens d'essayer. Oui, ça fonctionne, et ça me paraît être une piste intéressante.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/05/2014, 14h43
  2. JTable: ajuster la hauteur d'une cellule automatiquement
    Par cisnake dans le forum Composants
    Réponses: 0
    Dernier message: 08/11/2012, 12h41
  3. Ajuster la hauteur d'une ligne
    Par progpro dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/09/2007, 07h53
  4. Clignotement d'une fenêtre dans la barre de menu
    Par RR instinct dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 12/12/2006, 10h26
  5. Comment faire une Barre de Menu?
    Par gamerome dans le forum OpenGL
    Réponses: 5
    Dernier message: 18/02/2005, 14h46

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