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. #1
    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 Modifier des propriétés d'objets visuels créés dynamiquement
    Bonjour,

    je créé dynamiquement un certain nombre de TMemo dans une ScrollBox, et tout se passe bien.
    Ensuite je veux changer la taille du texte, par exemple, et je fais comme ça sur l'événement OnCloseUp d'un comboBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i := 0 to compteur2memos -1 do
      if (sb4memos.Controls[i] is TMemo) then 
         (sb4memos.Controls[i] as TMemo).Font.Size := StrToInt(ComboSize.Text);
    Mais je ne vois rien changer.

    À l'heure actuelle et pour simplifier le troubleshooting, je ne crée qu'un seul TMemo donc les trois lignes ci-dessus ne devraient pas se faire des nœuds, et pourtant, il doit bien y avoir une embrouille quelque part...

    Au tout début, j'avais commencé avec une procédure dédiée (parce qu'il y a d'autres paramètres à adapter), mais on dirait que le TMemo que je passe à la proc n'est pas transmis, c'est en tout cas ce que je peux constater en pas-à-pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.AdapteHauteurMemo(FontName: string; Sender: TObject);
    begin
      if FontName = '' then FontName := (Sender as TMemo).Font.Name; // passe un memo de base, on dirait (font Arial)
    end;
    L'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    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]);
    J'en suis là et j'y tourne en rond.
    Merci pour vos pistes,
    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

  2. #2
    Membre chevronné

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 035
    Points : 2 053
    Points
    2 053
    Par défaut
    Il me semble que si tu veux voir les changements dans un texte déjà affiché dans le memo tu dois le recharger en entier ou faire un truc du genre refresh.

  3. #3
    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
    Yop !
    Citation Envoyé par mm_71 Voir le message
    ou faire un truc du genre refresh.
    J'ai rajouté des .Update par ci par là sans aucun effet...
    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

  4. #4
    Membre chevronné

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 035
    Points : 2 053
    Points
    2 053
    Par défaut
    J'ai rajouté des .Update par ci par là sans aucun effet...
    Difficile de répondre sans avoir le code complet mais si tu fais un truc du genre après avoir changé la taille de la police:

    memo.clear
    memo.recharger le texte

    ça fait quoi ?

    Edit: ERREUR Pas besoin de rafraîchir quoique ce soit.

  5. #5
    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 mm_71 Voir le message
    Difficile de répondre sans avoir le code complet mais si tu fais un truc du genre après avoir changé la taille de la police:

    memo.clear
    memo.recharger le texte

    ça fait quoi ?
    Rien.

    Comme je le disais dans mon 1er post (// passe un memo de base, on dirait (font Arial)), on dirait que les mémos créés ne sont pas pris en compte, puisque lorsque je mets la souris sur Fontname en pas-à-pas après exécution de la ligne (point d'arrêt sur ligne suivante), ça m'affiche Arial alors qu'il y a autre chose, j'en suis sûr,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure TForm1.AdapteHauteurMemo(FontName: string; aMemo: TObject);
    begin
      if FontName = '' then FontName := (aMemo as TMemo).Font.Name; // passe un memo de base, on dirait (font Arial)
    Appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.ComboSizeCloseUp(Sender: TObject);
    var
      i: integer;
    begin
      for i := 0 to compteur2memos -1 do
        if (sb4memos.Controls[i] is TMemo) then begin
          AdapteHauteurMemo((sb4memos.Controls[i] as TMemo).Font.Name, sb4memos.Controls[i]);
    Je ne mets pas plus de code car ça ne présente aucun intérêt, pas la peine d'embrouiller,
    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. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    Salut !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i := 0 to compteur2memos -1 do
      if (sb4memos.Controls[i] is TMemo) then
    Soit sb4memos est une ScrollBox qui ne contient que des Memo dont on lui a attribué la parenté (pour les afficher) [et la possession (je ne sais pas si le Parent d'un Memo est automatiquement attribué comme Owner) ?], auquel cas balayer ses Controls ne doit retrouver que des Memo...

    Soit cette ScrollBox contient d'autres types de Controls, et pour peu qu'ils aient des indices supérieurs à compteur2memos -1, la boucle ne les trouvera pas, sauf à aller jusqu'à ControlCount !
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    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
    Bougez pas, je crois que j'ai trouvé, il y a un autre composant TMemo planqué dans un coin et que j'ai complètement zappé, tests en cours, je reviens !
    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

  8. #8
    Membre chevronné

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 035
    Points : 2 053
    Points
    2 053
    Par défaut
    Tourlourou a raison, remplace la ligne incriminée par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i:=0 to ComponentCount-1

  9. #9
    Membre chevronné

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 035
    Points : 2 053
    Points
    2 053
    Par défaut
    Je viens de faire une essai primaire et je me suis trompé dans mon message précédent, par besoin de rafraîchir le memo, chez moi ( Lazarus 1.8 Linux Mint 18.3 ) un bête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.ComboBox1CloseUp(Sender: TObject);
    begin
      case ComboBox1.ItemIndex of
        0: Memo1.Font.Size:=8;
        1: Memo1.Font.Size:=12;
        2: Memo1.Font.Size:=16;
      end;
    end;
    Change bien la taille des caractères sans rien faire d'autre.

  10. #10
    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
    C'était bien ça, saleté de machin que je mettais à Visible := False et qu'ensuite, obnubilé par le code en cours, j'ai complètement oublié...

    Chuis qu'un !

    Bon, faut dire aussi que je vis des trucs... Au run un memo m'affiche du texte sur 1 ligne quand il lui en faudrait 2. Un coup de Combobox pour changer la taille SANS la changer et c'est bon, il se redessine sur 2 lignes.
    Sauf que la procédure de redessin est aussi appelée lors de la création du mémo, un truc à bouffer son chapeau

    Merci à tous et y a pas besoin d'update pour que ça fonctionne (sauf cette histoire de nombre de lignes, nombre validé par un ShowMessage mais pas pris en compte comme je l'ai décrit)...
    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

  11. #11
    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
    Salut essayes comme ça, cela fonctionne sous winodws

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     TForm1 = class(TForm)
        ComboBox1: TComboBox;
        Memo1: TMemo;
        Memo2: TMemo;
        pnl4memos: TPanel;
        procedure ComboBox1CloseUp(Sender: TObject);
      private
        procedure AdapteHauteurMemo(FontSize: Integer; Sender: TObject);
      public
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.ComboBox1CloseUp(Sender: TObject);
    var
      i, cnt : integer;
      Obj : TObject;
    begin
      cnt := pnl4Memos.ControlCount;
      if cnt>0 then
      begin
        dec(cnt);
        For i:=0 to cnt do
        begin
          Obj := pnl4Memos.Controls[I];
          if (Obj is TMemo) then
          begin
            AdapteHauteurMemo(StrToInt(ComboBox1.Text), Obj);
          end;
        end;
      end;
    end;
     
    procedure TForm1.AdapteHauteurMemo(FontSize: Integer; Sender: TObject);
    begin
      TMemo(Sender).Font.Size:= FontSize;
    end;
    A+

    Que le temps passe vite, piouf, je suis arrivé à la bourre
    • "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

  12. #12
    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
    Allez, une belle image valant mieux qu'un long discours, hop ! :
    (ne pas tenir compte de la zone en haut appelée "Dossiers chargés" qui me sert à autre chose pour le moment)

    Nom : img1.png
Affichages : 370
Taille : 36,2 Ko

    en 1 je clique sur le dossier contenant des fichiers .ttf et .otf (1 de chaque pour le moment), ils s'affichent en 2, et les fonts incluses sont chargées par AddFontResource et affichées en 3 dans autant de TMemo créés dynamiquement.

    Sauf que dans le mémo du haut la police s'appelle "Segoe Print" et on ne voit pas le mot "Print"
    Alors je clique en 4 sur la flèche du Combo pour le dérouler et je reclique pour le refermer, ça génère un événement CloseUp et bingo !, le 1er mémo s'est agrandi en 5.

    Nom : img2.png
Affichages : 376
Taille : 36,7 Ko

    La solution que j'ai trouvée consiste à ne pas appeler AdapteHauteurMemo dans la boucle de création des mémos mais plutôt après, et plutôt ComboSizeCloseUp (qui va appeler la proc AHM).
    Et là c'est tout bon.
    C'est magique l'informatique...

    Bon, faut encore que j'enlève la bordure des mémos, bien pratique pour voir où on campe !

    Merci encore, bonne soirée,
    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

  13. #13
    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
    Bonsoir,
    je sais que t'as coché résolu mais c'est drôle mais dans ton screen n°1 on voit pas "Print" comme tu le dis . Alors que dans le 2 c'est bon.
    Du coup petite question : Est ce que tu configures la propriété WordWrap des TMemos par hasard ? celle ci ne semble pas être prise en compte sur la capture 1 alors que oui avec la capture 2. Je dis ça car les tailles des polices sont les mêmes ? non ?

    Bonne fin de soirée 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

  14. #14
    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
    je sais que t'as coché résolu
    No problémo en ce qui me concerne, on peut discuter jusqu'à la fin des temps,
    Et on va d'ailleurs bientôt discuter du problème de certains fichiers dont la police se charge sans erreur mais est inaccesssible (et donc non affichée dans l'outil : j'ai des copies d'écran, à venir, mais je ne sais pas si je mets ça à la suite ici, ou si j'ouvre une nouvelle discussion, ici, dans Delphi, ou plutôt dans Windows. À suivre...)

    Citation Envoyé par BeanzMaster Voir le message
    Du coup petite question : Est-ce que tu configures la propriété WordWrap des TMemos par hasard ? celle-ci ne semble pas être prise en compte sur la capture 1 alors que oui avec la capture 2.
    WordWrap positionné à True à la création du mémo.

    Citation Envoyé par BeanzMaster Voir le message
    Je dis ça car les tailles des polices sont les mêmes ? non ?
    Yes yes, tous les mémos ont la même taille, c'est pour les comparer rapidement (tiens, d'ailleurs il faudrait que je rajoute un TEdit permettant de changer le texte, l'idée m'en vient maintenant ! Tout sert à tout )
    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. #15
    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
    Citation Envoyé par Jipété Voir le message
    No problémo en ce qui me concerne, on peut discuter jusqu'à la fin des temps,
    Et on va d'ailleurs bientôt discuter du problème de certains fichiers dont la police se charge sans erreur mais est inaccesssible (et donc non affichée dans l'outil : j'ai des copies d'écran, à venir, mais je ne sais pas si je mets ça à la suite ici, ou si j'ouvre une nouvelle discussion, ici, dans Delphi, ou plutôt dans Windows. À suivre...)
    C'est drôle, Cela me fait penser que j'ai toujours ce truc avec freetype à régler. Sous Win pas de soucis et sous Linux, le code de la LCL ne fonctionne pas (plus) pour charger certaines polices ttf.
    Mais je suis plutôt dans la rédaction d'aide en ce moment pour ma librairie vectorielle. Verrai tout ça dans très longtemps....

    Citation Envoyé par Jipété Voir le message
    WordWrap positionné à True à la création du mémo.
    Essayes, de le déplacer après l'assignation du texte. Car c'est comme si c'était les paramètres internes pour l'affichage qui ne semblent pas être mis à jour

    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

  16. #16
    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
    Yop !
    Citation Envoyé par BeanzMaster Voir le message
    Sous Win pas de soucis et sous Linux, le code de la LCL ne fonctionne pas (plus) pour charger certaines polices ttf.
    Explique comment tu fais, car il me semble bien que sous Linux il n'y a d'installeur à proprement parler : il suffit de recopier le fichier quelque part dans /usr/share/fonts/ et c'est tout, la police est aussitôt disponible et opérationnelle.
    En tout cas c'est comme ça que je le vis.

    Citation Envoyé par BeanzMaster Voir le message
    Essayes, de le déplacer après l'assignation du texte. Car c'est comme si c'était les paramètres internes pour l'affichage qui ne semblent pas être mis à jour
    Et pourquoi donc ? C'est une propriété de l'objet, configurable depuis l'EDI, aucune raison pour que sa position dans l'ordre de création intervienne dans son comportement, il me semble.
    Mais je reconnais qu'il y a des comportements bizarres, je sens que je vais tout reprendre à zéro...
    Et tant qu'à être logique, le mécanisme qui calcule et dessine l'affichage dans l'ihm a besoin de savoir ce que vaut WordWrap pour afficher correctement le texte, qui peut varier au gré de l'utilisateur. Non ?
    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

  17. #17
    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
    Citation Envoyé par Jipété Voir le message
    Yop !

    Explique comment tu fais, car il me semble bien que sous Linux il n'y a d'installeur à proprement parler : il suffit de recopier le fichier quelque part dans /usr/share/fonts/ et c'est tout, la police est aussitôt disponible et opérationnelle.
    En tout cas c'est comme ça que je le vis.
    On avait discuter de ce sujet ici A ce moment j'avais testé dans une mv avec linux mint et j'avais la version 1.6.4 de Lazarus. Maintenant j'ai installé Manjaro en dur. Cette distro me va bien et surtout les dépots son bien plus à jour que n'importe quelle distro que j'ai pu testé jusque là. Bref, sous cet unix avec avec Lazarus 1.8 je me prend un gros SIGSEGV dans le fichier TTquelque_chose.pas (je sais plus) lorsque je veux charger une police présente dans le dossier : /usr/share/fonts/TTF/ pour moi. Alors que sous Win pas de problèmes.
    Le truc c'est que Lazarus pour freetype se base sur la v1 alors que dans fpc les en-tête présente sont pour la v2.35. Si je me souviens bien, la LCL elle même utilise les unités de FPC il me semble. (A revérifier, je dis ça de mémoire)


    Citation Envoyé par Jipété Voir le message
    Et pourquoi donc ? C'est une propriété de l'objet, configurable depuis l'EDI, aucune raison pour que sa position dans l'ordre de création intervienne dans son comportement, il me semble.
    Mais je reconnais qu'il y a des comportements bizarres, je sens que je vais tout reprendre à zéro...
    Et tant qu'à être logique, le mécanisme qui calcule et dessine l'affichage dans l'ihm a besoin de savoir ce que vaut WordWrap pour afficher correctement le texte, qui peut varier au gré de l'utilisateur. Non ?
    Ton raisonnement est très logique et c'est ce qui nous viens à l'esprit de suite.
    Je n'ai pas été voir le code source du TMemo. Imagines :
    • Cas n°1 :
      - La propriété WordWrap est déclarée comme ceci : property WordWrap : Boolean read FWordWrap Write FWordWrap Ici on assigne juste la valeur a TRUE ou FALSE directement
      - Lors de l'appel de la procedure d'affichage, celle ci va testé la valeur de WordWrap et faire les calculs et autres en fonction pour enfin afficher le texte
    • Cas n°2 :
      - La propriété WordWrap est déclarée comme ceci : property WordWrap : Boolean read FWordWrap Write SetWordWrap Ici on assigne la valeur a TRUE ou FALSE indirectement en appelant la procedure SetWordWrap
      - La procedure SetWordWrap est décrite comme suit :
      • Possibilité n°1 - Identique au cas N°1. On assigne directement la valeur
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        procedure SetWordWrap(Const Value : Boolean);
            begin
                if Value = FWordWrap then exit;
                FWordWrap := Value;
            end;
      • Possibilité n°2 - On assigne la valeur après avoir effectué un test et on en profite pour faire 2, 3 calculs
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        procedure SetWordWrap(Const Value : Boolean);
            begin
                if Value = FWordWrap then exit;
                if (FLines.Count>0) or (FLines.Text<>'') then  //FLines => TMemo.Lines
                begin
                   FWordWrap := Value;
                   // Calculs de différentes variables pour l'affichage
                   ....
                end; 
            end;

      - Lors de l'appel de la procedure d'affichage, celle-ci NE va PAS tester la valeur de WordWrap, mais simplement utiliser les variables pré-calculées. De plus la variable sera mise à jour seulement si le texte n'est pas vide.


    Dans ton exemples lorsque tu change la tailles il y doit y avoir une mise à jour internes des variables pour l'affichage ou je ne sais quoi. Du coup sur la capture 2 l'affichage est bon.
    Ou c'est simplement que le développeur en charge à oublier de décommenter, ou de rajouter un petit quelques chose, va savoir

    Du coup ça m'énerve de pas savoir....Je vais aller regarder...
    • "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

  18. #18
    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
    Voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TCustomMemo.SetWordWrap(const Value: boolean);
    begin
      if Value <> FWordWrap then
      begin
        {$ifdef DEBUG_MEMO}
        DebugLn(['TCustomMemo.SetWordWrap ',Name,' Old=',FWordWrap,' New=',Value]);
        {$endif}
        FWordWrap := Value;
        if HandleAllocated and (not (csLoading in ComponentState)) then
          TWSCustomMemoClass(WidgetSetClass).SetWordWrap(Self, Value);
      end;    
    end;
    Bref comme d'hab on voit rien et faut creuser dans ces satanés Widgets

    J'ai fais un petit exemple tout fonctionne correctement sous win. J'ai pas testé sous Linux encore. Essayes, et dis moi.

    Je vais allez tester de suite sous Linux pour voir.

    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

  19. #19
    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 je viens de tester mon exemple sous linux avec lazarus 1.8.2 tout fonctionne correctment de mon coté
    • "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

  20. #20
    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
    Bon je viens de tester mon exemple sous linux avec lazarus 1.8.2 tout fonctionne correctement de mon coté
    Testé sous 2 Linux différents avec 2 Laz différents (1.4 et 1.8.2 en MV), ça fonctionne correctement, mais peut-être bien que tu n'as pas saisi ma problématique, qui était d'adapter la hauteur des mémos pour pouvoir voir tout le texte (qui ne fait qu'une ligne ou deux, enfin, ça dépend aussi de la taille de la police ).

    Citation Envoyé par BeanzMaster Voir le message
    [...] je me prend un gros SIGSEGV dans le fichier TTquelque_chose.pas (je sais plus) lorsque je veux charger une police présente dans le dossier : /usr/share/fonts/TTF/ pour moi.
    C'est ça que j'aurais aimé que tu détailles, ou alors on ne se comprend pas, ou ce n'est pas les bons mots.

    Car pourquoi vouloir charger une police qui l'est déjà ? Puisque, comme je le disais, ce qui est dans /usr/share/fonts/ est chargé au démarrage (ainsi qu'en cas d'ajouts/suppressions) et donc disponible aux applications.

    Bon, j'y retourne...
    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 1 sur 4 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