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 :

Utilisation simple du TMemo : pire que les travaux d'Hercule !


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut Utilisation simple du TMemo : pire que les travaux d'Hercule !
    Bonjour,

    Je voudrais avoir un texte centré en hauteur dans un TMemo, chose qui n'est pas prévue de base,
    et en plus le texte doit pouvoir changer de taille au moyen d'un SpinEdit.

    Et comme ce que je voudrais faire n'est pas prévu dans les propriétés de l'objet,
    je me suis dit que j'allais bidouiller et mettre mon texte dans un TMemo,
    qui serait posé sur un TPanel blanc pour faire le fond.

    L'image en mode construction, où le second TPanel n'est pas encore posé :
    Nom : mode_construction.png
Affichages : 254
Taille : 9,8 Ko

    Nous avons donc un TPanel principal (pnlDemo) qui contient à gauche un TMemo aligné à alNone,
    et à droite un autre TPanel (pnlTools bleu ciel alRight) pour contenir les boutons et le spinedit, et c'est tout.

    Et je n'arrive déjà pas à accomplir cette première partie : on ne peut pas faire plus simple, et ça fonctionne mal, très mal...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      mmoDemo.AutoSize:=False;
      mmoDemo.SetBounds(5, 5, pnlDemo.Width-pnlTools.Width, seSize.Value);
      //             left,top,           width,             height
    end;
    Voilà le résultat de F9, dramatique, àmha :
    Nom : mode_exécution.png
Affichages : 264
Taille : 7,8 Ko

    Et ce qui ne se voit pas sur cette image, c'est l'inaction du SpinEdit sensé contrôler la hauteur du TMemo :
    il commence à être actif à partir de 36 !
    Nom : spinedit.png
Affichages : 254
Taille : 4,0 Ko

    Et donc je suis bloqué là. Bug ou mauvaise utilisation ?

    Alors si des gens ont des idées, malgré la chaleur étouffante, je les lirai avec plaisir.

    Bonne journée, et merci pour les retours et les pistes.
    Contexte : Debian Bullseye 11.7, FPC 3.2.2, Laz 2.2.6

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Si j'utilise FormActivate au lieu de FormCreate, c'est un peu moins mal, mais ce n'est pas encore ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      mmoDemo.AutoSize:=False;
      mmoDemo.SetBounds(5, 5, pnlDemo.Width-pnlTools.Width, seSize.Value);
    end;
    Nom : avec_FormActivate.png
Affichages : 218
Taille : 9,3 Ko

    Autre chose : j'ai beau mettre Constraints.MinHeight à 4 puis changer Height à 30 par ex., l'IDE me le remet à 35, , et je ne sais pas d'où sort cette valeur, les Ctrl-Clics ne remontant pas jusqu'à elle...

    Encore autre chose : je rajoute le TPanel (alClient) qui va héberger le TMemo à qui je supprime le SetBounds et je définis dans l'inspecteur d'objets BorderSpacing.Left à 15 et .Right à 20, et sur l'image vous avez l'impression que c'est respecté ?
    Nom : valeurs_non_respectées.png
Affichages : 214
Taille : 9,3 Ko

    Et au bout du compte, que je change les valeurs de BorderSpacing et/ou de ChildSizing de la cible (le TMemo) ou de son parent (le TPanel), ça ne change strictement rien au rendu visuel du memo...
    Je ne comprends absolument pas ce qui se passe,
    EDIT : d'autant plus qu'une recherche dans les sources de Lazarus sur "default 35" n'a rien trouvé.

  3. #3
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 644
    Par défaut
    Bonjour,

    Il semble contradictoire de mettre le TMemo à alNone et s'attendre, en même temps, à ce qu'il s'adapte automatiquement en fonction du BorderSpacing. Essayer avec TMemo à alClient. Avec alNone, il est possible de même mettre les objets en dehors du cadre qui les supporte, il est donc normal que fixer des marges ait peu d'impact.

    La taille minimale en hauteur est vraisemblablement calculée pour pouvoir tenir une ligne de texte. Ce n'est donc pas une valeur par défaut (enfin pas directement) puisqu'elle dépend de la hauteur de la fonte de caractères (qui a, entre autres, une taille par défaut).

    Salutations

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Bonjour,

    et merci pour ce retour.

    Citation Envoyé par Guesset Voir le message
    Essayer avec TMemo à alClient.
    Non, car il me faut le déplacer, lire ci-après :

    L'idée de base, c'est d'avoir un TMemo pour afficher un texte de... démo pour voir à quoi ressemble la police sélectionnée dans la liste des Screen.Fonts, et comme je suis maniaque, j'ai voulu aligner ce texte au milieu de sa zone d'affichage; quelle que soit la taille de police choisie.

    Une première image (sans la liste des polices pour ne pas alourdir) pour montrer le contexte, j'ai donc un TMemo qui affiche du texte, posé sur un TPanel à la couleur clCream pour que je m'y repère.
    Nom : F9.jpg
Affichages : 189
Taille : 29,4 Ko
    (th = Text Height fourni par aCanvas.TextExtent, mh = Memo.Height)
    Et je lui ai mis BorderStyle à bsNone pour l'esthétique, à terme la couleur de dessous sera blanche comme le mémo.

    Et malgré cette histoire de minimum vital à 35, mon plan fonctionne, là c'est tout petit, c'est voulu, on est en taille 4, juste après F9 !
    Mais en montant plus haut c'est mieux :
    Nom : size4to6.jpg
Affichages : 192
Taille : 38,4 Ko
    puis
    Nom : 16.jpg
Affichages : 193
Taille : 74,5 Ko
    puis max120
    Nom : max120.jpg
Affichages : 196
Taille : 88,0 Ko
    toujours avec le texte centré dans la zone clCream,

    Mais en changeant de police, aïe aïe aïe :
    Nom : betty_trop_grande.jpg
Affichages : 202
Taille : 73,7 Ko

    Il me faudra surement surveiller le mmoDemo.ClientHeight et le Text Height, mais là, pause !

    À plus !

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Yep !

    Vit' vit' avant de passer à table et se vider la tête de tout ça (car c'est loooooin d'être fini, à cause des polices qui débordent, ), j'en suis là et je suis assez content :

    Nom : BodoniRecut_en_64.png
Affichages : 186
Taille : 83,9 Ko

    J'agrandis et je réduis sans souci, que du bonheur,

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Bonsoir,

    Après cette chaude journée où j'ai retourné le web pour voir s'il y existait des choses utiles, après avoir installé le RichMemo dans une machine virtuelle qui ne m'a pas avancé, après avoir trifouillé les paramètres du TSynEdit sans avancer, d'un coup j'ai ouvert la boîte de dialogue standard de choix de police de Linux (je voulais faire un autre test, encore un) et là, stupéfaction, je découvre que les problèmes avec lesquels je me bats dans certaines polices est par magie réglé, regardez le gif :

    Nom : program_KC-dialog_OK.gif
Affichages : 176
Taille : 8,5 Ko

    en gris et blanc et le mot "Aperçu", la copie d'écran de la boîte de dialogue configurée avec une police à souci (Aria Script) en taille 56, et en jaune et blanc la copie d'écran de l'outil qui me fait souffrir, basé je le rappelle sur un TMemo (blanc) posé sur un TPanel (jaune pendant la conception), et on voit bien que là, le "f" se fait raboter le sommet, et pour le "D" c'est limite inacceptable.

    On remarque deux choses : le "D" se déplace horizontalement (?), et le caret à droite toute est un poil plus large dans la boite de dialogue que dans le mémo, ce qui n'est pas grave du tout, mais surtout, il est mieux positionné en vertical et ça, ça me plait.

    Enfin, en choisissant une grande taille de fonte, la zone d'aperçu se redimensionne automagiquement.
    Me reste plus qu'à trouver comment tout ça a été fabriqué.


  7. #7
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    La boîte de dialogue de sélection de police semble utiliser un contrôle de type GtkEntry (qui sert de base au composant "TEdit" de Lazarus), tandis que TMemo repose sur un GtkScrolledWindow qui contient un GtkTextView... Ces composants étant deux composants différents d'un point de vue GTK, c'est "logique" qu'ils aient un comportement différent à la fin. Pour info, le code qui crée le composant TMemo dans la LCL (dans lcl/interfaces/gtk2/gtk2wscustommemo.inc):

    De plus, le TEdit semble faire le centrage vertical nativement, mais pas de retour à la ligne en cas de "débordement" du texte.

  8. #8
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Yep !

    Citation Envoyé par supersnail Voir le message
    De plus, le TEdit semble faire le centrage vertical nativement,
    Faudrait que je refasse des essais.

    Mais je me suis récemment demandé s'il ne s'agissait pas d'un TLabeledEdit (bordure bleue de la zone d'édition, coins arrondis, centrage vertical du texte).
    En tout cas, des tests avec ce composant semblent prometteurs mais, poursuivant plusieurs lièvres à la fois, il m'arrive de me prendre les pieds dans le tapis;

    Maintenant, il faut savoir que je remarque aussi des différences avec un code identique entre Windows Seven et Debian Bullseye, et ça, c'est assez déprimant...

Discussions similaires

  1. Maven utilise les .class plutôt que les .java
    Par florianj dans le forum Maven
    Réponses: 0
    Dernier message: 25/01/2013, 10h36
  2. Réponses: 5
    Dernier message: 20/08/2011, 17h00
  3. Réponses: 0
    Dernier message: 26/05/2011, 17h04
  4. Réponses: 4
    Dernier message: 07/07/2006, 15h44
  5. [HTML] utiliser les DIV (meilleur que les tableaux?)
    Par atomic-greg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/04/2006, 12h19

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