IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

TListView Dynamic Appearance - Impossible de mettre un texte en couleur


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Par défaut TListView Dynamic Appearance - Impossible de mettre un texte en couleur
    J'ai un souci avec TListView en Dynamic Appearance (Delphi Rad Studio 10.4 ----- dev pour Android)

    Lorsque je modifie la couleurs d'un élément de ma ListView en mode Conception le texte reste en noir quand je compile

    Quelqu'un aurait-il une solution ?

    Sinon j'ai essayé aussi de modifier la couleur dans mon code mais je n'arrive pas à ce que ça fonctionne.

    Voici mon code :

    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
    try
     
    ListView1.BeginUpdate;
    ListView1.EditMode := True;
    ListView1.Visible := false;
     
    while (not MySQLQuery1.EOF) do begin
     
    LItem := ListView1.Items.Add;
    LItem.Data['Title'] := 'Bonjour';
     
    AListItemText:=LItem.Objects.FindObjectT<TListItemText>('Title');
    if Assigned(AListItemText) then
    begin
    showmessage('item title trouvé');
    AListItemText.Font.Style:=[TFontStyle.fsBold];
    AListItemText.TextColor := TAlphaColorRec.Dodgerblue;
    end
    else showmessage('impossible de trouver l''item title');
     
    MySQLQuery1.Next;
     
    end;
     
    finally
     
    MySQLQuery1.EnableControls;
     
    ListView1.EndUpdate;
    ListView1.EditMode := False;
    ListView1.Visible := True;
     
    end;
    end;
    Mais je n'ai que le message Item non trouvé .... donc je dois avoir une erreur

    Quelqu'un voudrait-il me venir en aide....

    Par avance Merci MERCI

    Pierre-Jean

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 624
    Billets dans le blog
    65
    Par défaut
    Bonjour ou plutôt rebonjour puisque mail privé il y a eu d'ailleurs je comprends mieux ceci
    Mais je n'ai que le message Item non trouvé .... donc je dois avoir une erreur
    en lisant ce post qu'en lisant le mail privé

    Pour moi l'erreur reste l'utilisation de la boucle "while not eof" d'alleurs ce code est au sein de quelle procédure ?

    "Toucher" à la présentation d'un TListView en fonction de données affichées
    -> bien noter le "affichées", je ne sais toujours pas vraiment obtenir des valeurs directement de la table, autre sujet de recherche à mes heures perdues, peu nombreuses en ce moment
    passe en général par l'évènement onUpdateObjects or OnUpdatingObjects de la liste
    -> j'ai encore des difficultés de choix entre les deux et c'est peut-être là une astuce à vérifier

    Toujours est-il que c'est au sein de ces évènements (un seul des deux) que devrait se situer le code pour obtenir la valeur de l'objet texte ('title')

    juste une proposition non testée il faut que je prenne du temps pour un test
    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
    procedure TForm1.ListView1UpdateObjects(const Sender: TObject;
      const AItem: TListViewItem);
    var AListItemText : TListItemText;
    begin
    if AItem.Purpose=TListItemPurpose.None then  // élement "normal" de liste
     begin
       AListItemText:=LItem.Objects.FindObjectT<TListItemText>('Title');
       If Assigned(AlistItemText) then 
        begin
          .....
        end;
     end;
    end;
     
    procedure TForm1.ListView1UpdatingObjects(const Sender: TObject;
      const AItem: TListViewItem; var AHandled: Boolean);
    begin
    //
    end;


    P.S. pourquoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ListView1.EditMode := True;
    ListView1.Visible := false;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MySQLQuery1.EnableControls;
    Où est le DisableControls ? La liste n'est pas "LiveBindée" ?


    Quoique, en reprenant la lecture du mail privé il y a une allusion à
    En utilisant votre démo Selections
    qui doit faire réference à ce billet peut-être est-ce là le but du code ?
    En aucun cas je n'utilise une boucle sur une table donc j'ai du mal à suivre cette partie code, il va me falloir un peu plus d'explication avec des dessins (images écran) j'ai le cerveau lent

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Par défaut je faisais reference a votre fichier zip qui contient Selections.dproj
    J'ai mis l'Item Text1 couleur Tomato
    Premier ecran il reste noir
    Second ecran apres avoir changé le Mode Edition il reste noir
    Troisième ecran apres avoir re changé le Mode Edition l'affichage est enfin couleur Tomato ....
    Nom : Capture 1.jpg
Affichages : 497
Taille : 108,9 Ko
    Nom : Capture 2.jpg
Affichages : 470
Taille : 108,2 Ko
    Nom : Capture 3.jpg
Affichages : 496
Taille : 109,6 Ko

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 624
    Billets dans le blog
    65
    Par défaut
    Là au moins, c'est plus clair quand on met le points sur les i
    Je pensais l'avoir testé sur Androïd, je sais que cela fonctionnait pour IOS (c'était une demande initiale posée sur le forum d'Embacadero ou Praxis)
    néanmoins tout a été fait avec Rio je n'ai pas re tenté avec Sidney du coup est-ce un bogue de Sidney ou de ma part ? Il va falloir que je m'y re-penche

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Par défaut étrangement en ajoutant un OnUpdatingObjects les couleurs apparaissent mais pas celles du OnUpdat
    Je viens de faire quelques essais

    J'ai mis la propriété TextColor de Text1 en bleu en mode conception et j'ai ajouté une procédure OnUpdatingObjects dans laquelle je lui indique de mettre Text1 en rouge

    Et voila le résultat !

    A l'affichage Text1 est bien en bleu

    Mais si je fais un changement d'orientation du smartphone ( portrait --> paysage ) ou Mode Edit / non edit / Edit, cette fois Textt1 est en rouge !

    En revanche :

    en utilisant OnUpdateObjects j'ai bien la couleur indiquée dans la procédure UpdateObjects mais uniquement à condition que je mette une valeur (n'importe laquelle) dans TextColor

    mais Font.Style et Font.Size ne semble pas fonctionner ...

    AListItemInfos.Font.Style := [TFontStyle.fsBold];
    AListItemInfos.Font.Size := 10;

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 624
    Billets dans le blog
    65
    Par défaut
    On irait donc vers un bogue de Sidney ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Par défaut je crains un bogue oui ..
    Je crains en effet un bogue .... donc j essaie de contourner ...

    Pour la couleur s'est résolu : il faut mettre une couleur par défaut puis une procedure UpdateObjects

    En revanche pour le style de Font je ne trouve pas comment faire
    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
     
    procedure TForm1.ListViewUpdateObjects(const Sender: TObject;  const AItem: TListViewItem);
    var
      AListItemBitmap : TListItemImage;
      AListItemText1 : TListItemText;
      AColor : TAlphaColor;
     
    begin
     
    AListItemText1 :=AItem.Objects.FindObjectT<TListItemText>('Text1');
    if Assigned(AListItemText1) then
       begin
          AListItemText1.Font.Style := [TFontStyle.fsBold];
          AListItemText1.Font.Size  := 14;
          AListItemText1.TextColor  := TAlphaColorRec.Tomato;
       end;
    end;
    Affiche bien Text1 en couleur Tomato mais pas en gras

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/12/2014, 12h03
  2. Sur la même ligne mettre du texte à gauche et à droite
    Par Oberown dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 20/06/2007, 15h50
  3. Mettre du texte en couleur
    Par spynux dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/01/2006, 08h04
  4. Mettre du texte sur une vidéo(ou par dessus un tmediaplayer)
    Par souch dans le forum Composants VCL
    Réponses: 9
    Dernier message: 08/07/2004, 13h30
  5. Réponses: 6
    Dernier message: 14/02/2003, 16h52

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