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 :

Modifier des propriétés d'objets visuels créés dynamiquement [Lazarus]


Sujet :

Lazarus Pascal

  1. #21
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Effectivement je n avais pas saisi. Je me suis focalise sur le font.size. il existe une getextheigth ou getmetrics un truc dans le genre pour recuperer la hauteur exacte d un caractere. Je peux pas te dire exactement. Je suis au boulot a attendre mes 1er clients. Je jetterai un oeil j ai quelque chose dans le meme style dans une de mes sources.
    • "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

  2. #22
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 044
    Points
    15 044
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    il existe une getextheigth [...]
    Oui, c'est ça que j'utilise

    Te prends pas la tête, faut que j'approfondisse.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #23
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Petite erreur en fait c est
    8 + (2×(nbligne-1)) + (gettextheight × nbligne)

    Oups en plus impossible de modifier mon message sur mon mobile 🤐
    • "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

  4. #24
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bon plus jamais je poste un message ici avec mon portable. C'est la m... ç a bug bref

    voilà un petit test pour toi qui fait ce que tu souhaites. Et ne t'en fais pas je me prend pas la tête. Ca me change un peu car écrire une documentation pour un code source, ben ce n'est pas si simple, c'est long et chi....
    Et là ça me change un peu. Tu verras pour calculer la hauteur et la largeur des textes j'utilises une petite astuce

    Je n'ai pas encore tester sous Linux, mais y a pas de raison que cela ne fonctionne pas

    TestJipeteMemo.zip
    • "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. #25
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 044
    Points
    15 044
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Petite erreur en fait c est
    8 + (2×(nbligne-1)) + (gettextheight × nbligne)
    Mis en place dans le code

    Citation Envoyé par BeanzMaster Voir le message
    Je n'ai pas encore testé sous Linux, mais y a pas de raison que cela ne fonctionne pas
    ouais ouais ouais ouais ouais...

    Merci pour les essais, les idées (il y a des choses sympa), le temps passé, et voilà à quoi j'ai joué -- il reste un souci...

    Scénario :
    je clique sur la combobox pour choisir 8
    je clique sur "créer mémos", ça en crée trois petits
    je clique sur "remplir" --> ils sont mal remplis...
    je reclique sur la combobox, je n'y change rien, au close-up les 3 mémos sont bien redimensionnés.

    Donc je rajoute AdapteHauteurMemo(MemosContainer[i]); dans la boucle de la proc FillMemos et c'est bon (mémo du haut)
    Une taille de police de 6 --> mémo reste trop grand (tout en bas)
    Une taille de police de 16 --> mémo pas assez agrandi (manque une ligne) (au milieu)

    Nom : essai_1.png
Affichages : 183
Taille : 31,4 Ko

    essai 2 : rajout de l'appel au closeup dans AdapteFontSizeMemo

    je clique sur la combobox pour choisir 8
    je clique sur "créer mémos", ça en crée trois moyens
    je clique sur "remplir" --> ils sont bien remplis !
    Une taille de police de 6 --> mémo reste trop grand (tout en bas)
    Une taille de police de 16 --> mémo pas assez agrandi (manque une ligne) (au milieu)

    Pas d'image, c'est + ou - la même que l'autre.

    On notera dans le bas du mémo du centre, sous le "o" du mot "pour" un point noir qui doit être le point du "i" de la partie manquante, "un gros soupir".

    @ pluche,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #26
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Maintenant faut adapter les marges et le nombre de pixels entre chaque ligne on dirait bien.
    Dans la formule je prend clientHeight mais ce n'est pas vraiment le bon nombre. En plus il faudrait prendre en compte les marges intérieures gauche et droite . Largeur de la scrollbar a prendre en compte, même si invisible ?
    une trentaine de pixels ça peux tout changer.

    L'espace entre les lignes dépend-t-il de la font ? ou trouver cette informations, on peux essayer en choppant le TextMetric mais je ne sais pas encore comment ni ou le trouver.

    Bonne nuit
    • "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. #27
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    (J'arrive pas à dormir) ça a réveiller ma curiosité

    le seul changement que j'ai fais de mon coté c'est çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.FillMemos;
    var
      i:integer;
    begin
      For i:=0 to 2 do
      begin
        With MemosContainer[i] do
        begin
          Lines.Text := cText;
        end;
        ComboBox1CloseUp(MemosContainer[i])
      end;
    end;
    En suivant le même chemin que toi voilà le résultat sous windows que j'obtiens (la marge en bas des mémos est 3 poils trop grandes).

    Nom : 2018-03-17_002810.jpg
Affichages : 183
Taille : 69,7 Ko
    • "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

  8. #28
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Je vais te rassurer mais aussi te faire pester (encore une fois) et là ma foie je suis avec toi (je vais voir comment soumettre ce petit BUG d'affichage sur le forum anglois)

    Nom : Screenshot_20180317_010102.png
Affichages : 158
Taille : 32,7 Ko

    Comme tu le vois idem dans mon monde linuxien
    • "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. #29
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Après quelques vérifications à grand coup de showmessage et quelques changement voila le resultat

    Nom : Screenshot_20180317_021306.png
Affichages : 169
Taille : 33,0 Ko

    Pour le memo du bas rien à faire la taille mini pour le memo est fixé par défaut à 40 pixels.

    Bon je retourne sous windows et te refais un petit Zlip
    • "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

  10. #30
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Je suis de retour et voila le coupable c'est Canvas.GetTextHeight qui semble erroné sous Linux

    Tu verras j'ai un peu remanié le code et laisser tout mes polluants "showmessage"

    Resultat sous linux :

    Nom : Screenshot_20180317_023823.png
Affichages : 167
Taille : 33,2 Ko

    Resultat sous windows :

    Nom : 2018-03-17_013058.jpg
Affichages : 182
Taille : 67,6 Ko

    et le code : TestJipeteMemo.zip

    Allez cette fois c'est la bonne je vais me coucher

    EDIT : j'y suis presque je viens de penser à un truc tout bête pourquoi ne pas utilser de simple TLabel en mettant Constraint.maxwidth := scrollbox.clientwidth; wordwrap:=true et align:=alTop; autosize := true; Borderspacing.around:=4
    • "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

  11. #31
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 044
    Points
    15 044
    Par défaut
    Salut,

    Après avoir remplacé dans Button3Click, ta ligne compliquée nbLigne := round((GetVirtualTextWidth(Text, Font) / ClientWidth)+0.5); par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nbLigne := Lines.Count;
    Form1.caption := inttostr(nbligne);
    force est de constater qu'en jouant juste avec la taille de la police (8, 10, 16) j'obtiens sous Linux toujours 1 (et quelque part ça semble logique, il n'y a qu'une ligne de texte) et sous Windows 2, 4, 2 !, ce dernier 2 étant complètement dingue.
    Alors je recommence, les mêmes 3 boutons, d'autres valeurs (6, 11, 22) et là ça devient tout bon.
    Et à partir du moment où ça l'est, ça le reste : doit y avoir une variable mal initialisée quelque part.

    Nom : sous_XP.png
Affichages : 170
Taille : 31,0 Ko

    Ajout : bah nan, c'est toujours pas bon : je testais avec le mémo du haut, en changeant le nom et la taille de la police, avec TNR à 24 c'était tout bon, je le passe à 26 et paf !, manque la dernière ligne :

    Nom : pb_tnr_sous_xp.png
Affichages : 177
Taille : 30,9 Ko

    En résumé y a rien de fiable (pi ton code est embrouillé : y a deux procs quasi identiques [Button3 et ComboBox1CloseUp] où tu calcules le nombre de lignes et la hauteur qui en découle : il ne le faudrait qu'une fois).

    Quant à remplacer les TMemo par des TLabel, je pense que c'est in fine la même chose : du point de vue du binaire généré il s'agit de bêtes zones rectangulaires où seront dessinées des courbes représentant pour nous du texte intelligible.
    Mais j'ai peur que les calculs dessous ne soient identiques.
    Et flemme de tester.

    HS : il te reste deux espaces entre "service" et "selon",
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    L'espace entre les lignes dépend-t-il de la font ?
    Oui.

    Citation Envoyé par BeanzMaster Voir le message
    ou trouver cette informations, on peux essayer en choppant le TextMetric...
    C'est exactement ça. L'interligne (les talus haut/bas) est inclus dans tmHeight.

    Pour ma part, j'avais besoin de récupérer une position depuis une app externe, d'où la récupération d'un hFont par WM_GETFONT.

    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
    function GetLineHeight(aWnd :hWnd) :integer;
    var
      DC   :hDC;
      Font :hFont;
      TM   :TTextMetric;
     
    begin
      try
        DC   := GetDC(aWnd);
        Font := SendMessage(aWnd, WM_GETFONT, 0, 0);
     
        if Font <> 0 then
          SelectObject(DC, Font);
     
        GetTextMetrics(DC, TM);
        Result := TM.tmHeight;
     
      finally
        ReleaseDC(aWnd, DC);
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo1.ClientHeight := Memo1.Lines.Count *GetLineHeight(Memo1.Handle);
     
      if Memo1.BorderStyle <> bsNone then
        Memo1.ClientHeight := Memo1.ClientHeight +GetSystemMetrics(SM_CYBORDER) *2;
    end;

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Mais pour l'application courante, on peut aussi passer par un TControlCanvas (testé sous Delphi) :
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Canvas :TControlCanvas;
      R      :TRect;
      s      :string;
     
    begin
      Canvas := TControlCanvas.Create;
     
      try
        Canvas.Control := Memo1;
        Canvas.Font    := Memo1.Font;
     
        s := Memo1.Lines.Text;
        R := Memo1.ClientRect;
     
        Canvas.TextRect(R, s, [tfCalcRect, tfWordBreak]);
        Memo1.ClientHeight := R.Height;
     
        if Memo1.BorderStyle <> bsNone then
          Memo1.ClientHeight := Memo1.ClientHeight +GetSystemMetrics(SM_CYBORDER) *2;
     
      finally
        Canvas.Free;
      end;
    end;

  14. #34
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 044
    Points
    15 044
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Mais pour l'application courante, on peut aussi passer par un TControlCanvas (testé sous Delphi)
    Oui, pour ma part j'ai utilisé en mode bourrin un TPanel pour ces calculs de hauteur et largeur.

    Citation Envoyé par Andnotor Voir le message
    Pour ma part, j'avais besoin de récupérer une position depuis une app externe, d'où la récupération d'un hFont par WM_GETFONT.

    Ce que j'aime bien quand Andnotor poste, c'est qu'il y a toujours quelque chose à apprendre

    De mon côté je vois le bout du tunnel :
    Nom : loadfont_ok.png
Affichages : 167
Taille : 15,1 Ko

    Ces 8 mémos ont été remplis par des fichiers .ttf et .otf stockés dans 6 dossiers différents dont les contenus ont été installés à la volée et déchargés à la clôture de l'appli.
    Exactement ce que j'avais écrit en VB4 d'abord il y a 20 ans environ, puis D3 et enfin D7 : quel chemin !

    Bon là, la copie d'écran est encore en mode tests (bordures visibles, pas le bon texte), mais ça avance bien et dans la bonne direction, c'est le pied.
    Là les mémos sont tous en taille 12, vous noterez les différences de tailles selon la police...

    Le seul souci c'est Linux mais ce n'est pas dramatique dans le sens où cet outil n'est pas prévu pour tourner dans cet environnement.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #35
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 044
    Points
    15 044
    Par défaut
    Bon, allez, maintenant, le mystère !

    La procédure ComboSizeCloseUp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.ComboSizeCloseUp(Sender: TObject);
    var
      i: integer;
    begin
      for i := 0 to compteur2memos -1 do
        if (sb4memos.Controls[i] is TMemo) then 
          AdapteHauteurMemo((sb4memos.Controls[i] as TMemo).Font.Name, sb4memos.Controls[i] as TMemo);
    end;
    Donc je lance mon logiciel, je clique sur un dossier contenant des .ttf qui se retrouvent chargés, disponibles et affichés en taille 12, vous avez vu l'image.

    Si je clique sur cette ComboBox de taille pour choisir 24 par exemple, les fonts dans les mémos s'agrandissent, ainsi que les mémos, mais eux pas assez !
    Nom : 1er_clic.png
Affichages : 164
Taille : 8,5 Ko

    Il me faut réouvrir et refermer la combo pour que les mémos passent à la bonne taille !
    Nom : 2e_clic.png
Affichages : 162
Taille : 12,6 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    AdapteHauteurMemo(FontName: string; Sender: TObject);
    begin
      TMemo(Sender).Font.Size := StrToInt(ComboSize.Text);
      TMemo(Sender).Update;
      nbrelignes := TMemo(Sender).Lines.Count;
      TMemo(Sender).Height := hcar * nbrelignes; // hcar calculé (juste ! J'ai un indicateur) au-dessus, pas mis pour ne pas alourdir
    end;
    C'est bien le Lines.Count qui n'est pas bon au 1er passage.

    Si quelqu'un a une idée pour ça, parce que dans l'autre sens (réduction), ça fonctionne bien !
    Je n'y comprends rien...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    C'est OnChange qu'il faut traiter. A la fermeture de la liste, le nouvel élément n'est pas encore sélectionné.

  17. #37
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 044
    Points
    15 044
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    C'est OnChange qu'il faut traiter. A la fermeture de la liste, le nouvel élément n'est pas encore sélectionné.
    Désolé mais c'est pareil, et même pire, puisque là, si je choisis 24 je peux toujours ensuite cliquer sur la flèche pour dérouler la liste, comme je ne change pas de valeur, il ne se passe rien...

    Nom : 1er_clic.png
Affichages : 167
Taille : 8,5 Ko

    Cependant, ta remarque m'ayant mis la puce à l'oreille (ça ne s'invente pas, des choses pareilles, et les aides indigentes ne précisent pas ce genre de détail), j'ai décidé de créer une variable globale "FontSize" remplie par StrToInt(ComboSize.Text) suivi d'un Application.ProcessMessages et crois-le si tu veux mais ça ne fonctionne pas mieux...

    En fait ça fonctionne sur trois pattes : des fois ça passe et ça le fait, des fois ça casse et il manque une ligne. Invraisemblable !

    Et il me faut utiliser CloseUp à la souris, parce que si je mets 2 appels qui se suivent dans le code, ça ne sert à rien.

    Fouhhh, j'en ai marre, là,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  18. #38
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 044
    Points
    15 044
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    A la fermeture de la liste, le nouvel élément n'est pas encore sélectionné.
    En fait c'est pas clair du tout ce que tu dis.

    J'ai fait l'expérience suivante : je rajoute un bête ShowMessage(ComboSize.Text); je lance le prog, je change la valeur (juste pour voir que c'est pris en compte car sinon ce n'est pas nécessaire, suffit de refermer la liste) et le ShowMessage m'affiche bien la valeur que j'ai choisie et qui est bien positionnée dans la zone de texte de ComboSize.

    Nom : shmess24.png
Affichages : 158
Taille : 6,9 Ko

    On est bien d'accord que le ShowMessage est une fenêtre modale, donc bloquante, hein ? Alors que veux-tu dire exactement ?


    De plus, il y a un comportement très bizarre des événements avec ce simple ShowMessage rajouté :
    1- je clique sur la flèche du combo et même sans changer de valeur, un autre clic pour refermer la liste fait afficher le ShowMessage, ok.
    2- je clique ensuite n'importe où ailleurs (bouton d'aide, bouton de sortie, un bouton bidon de test sans code dans son OnClick, une checkbox dont je bascule l'état, etc.) et ça me réaffiche le ShowMessage, pourquoi donc ?
    Et si je veux vraiment l'aide (ou autre), il me faut recliquer sur le bouton concerné, comme si le premier clic avait été "trappé" par le ComboSize
    C'est quoi ce délire ?

    C'est sûr que si les événements sont gérés comme ça, je ne vais pas aller bien loin...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.ComboSizeCloseUp(Sender: TObject); // c'est tout, pour CE test
    begin
      ShowMessage(ComboSize.Text);
    end;
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Tu chipotes, Tu chipotes !

    OnCloseUp survient à la fermeture de la liste. Peu importe pourquoi elle s'est fermée : sélection d'un élément, nouveau clique sur le bouton ou clique hors liste n'importe où sur le bureau.

    OnChange, lui, est généré uniquement à la sélection d'un nouvel élément. Mets ce ShowMessage dans OnChange et contrôle !

    ps: je teste sous Delphi évidemment et l'aide est claire le concernant (et c'est ce que je constate).

    Vcl.StdCtrls.TCustomCombo.OnCloseUp
    ...
    Remarque : Un élément est sélectionné après la fermeture de la liste déroulante.

  20. #40
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 044
    Points
    15 044
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Tu chipotes, Tu chipotes !
    Ben oui, parce que c'est un vrai brouillard (ou foutoir, au choix) : j'ai attaqué direct avec le OnChange, passer de 12 à 22 n'a pas fonctionné, j'ai choisi 24 ça a fonctionné, j'ai continué vers le + grand ça a toujours fonctionné, je suis descendu à 8 toujours ok, j'ai voulu remonter à 26 et bim bam boum !

    Nom : essai_raté.png
Affichages : 156
Taille : 8,9 Ko

    Le nombre de lignes renvoyé par le système n'est pas bon à ce moment-là. Pourquoi ? Le souci est là.
    Je sens que je vais abandonner ce Lines.Count et le gérer à la main...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Exporter des propriétés d'objets dans Excel
    Par chancelier eric dans le forum Visio
    Réponses: 1
    Dernier message: 12/06/2008, 10h40
  2. modifier des propriétés dans vba
    Par 4rocky4 dans le forum VBA Access
    Réponses: 12
    Dernier message: 05/02/2008, 12h42
  3. [Réflection] Lister et modifier des propriétés
    Par s.n.a.f.u dans le forum VB.NET
    Réponses: 12
    Dernier message: 26/04/2007, 11h01
  4. Réponses: 1
    Dernier message: 28/03/2007, 16h12
  5. Comment appliquer des propriétés à mes objets ?
    Par Alexino2 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/02/2007, 18h20

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