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 :

Rafraichir une image dans un stylesdata d'une listbox [Windows]


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2012
    Messages : 92
    Par défaut Rafraichir une image dans un stylesdata d'une listbox
    bonjour à tous,

    petite question :
    sur XE7, comment supprime t-on le contenu de l'image dans un stylesdata ?

    j'ai définis un style à ma listbox ou j'ai rajouté une image.
    lorsque je veux la charger, je fais ceci, et ça s'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var
    FLbxItem : TListBoxItem;
    begin
        ....
        FLbxItem.StylesData['img'] := sThumbFilename;
    mais pour l'effacer, comment fait-on ? (un chemin vide ne fonctionne pas )

    merci

  2. #2
    Membre Expert
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Par défaut
    Bonjour,

    Quel est le type 'Img' dans le style ? un TImage ?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2012
    Messages : 92
    Par défaut
    bonsoir Thierry,

    le type est un timage
    le chemin pour sThumbFilename pointe sur un jpg

    petite précision : le debugger me donne parfois pour FLbxItem.StylesData['img'] soit qu'il est de type string, soit qu'il est du type TBitmapOfItem.
    je n'ai pas fait attention si il y avait un contexte particulier

    cdt

    jerome

  4. #4
    Membre Expert
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Par défaut
    Donc en fait, si il n'y a que la partie visuelle qui nous intéresse on peut faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (FLbxItem.FindStyleResource('img') as TImage).Bitmap.Clear(TAlphaColorRec.Null);
    Par contre dans ce cas là on ne pourra pas tester par exemple sur le Bitmap la propriété IsEmpty car l'image existera bien, car on a simplement créé une image transparente. Par contre comme je l'ai dit cela fonctionne pour le côté visuel puisqu'on ne voit plus d'image.

    Le mieux serait donc de faire plutôt ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (FLbxItem.FindStyleResource('img') as TImage).MultiResBitmap.Delete(0)
    Car en fait même si on est d'accord que sur un composant TImage FMX on peut accéder à l'image via la propriété Bitmap, on a en fait une propriété MultiResBitmap qui me permet d'avoir plusieurs images (Pour pouvoir gérer les cas des différentes tailles d'écrans), et donc il suffit de supprimer l'image avec l'index 0 (Qui est donc la première, et la seule si dans notre cas on a qu'une seule image) pour la supprimer. Et du coup contrairement à la solution précédente on pourra correctement utiliser ensuite la propriété IsEmpty pour savoir si on a une image ou pas.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2012
    Messages : 92
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (FLbxItem.FindStyleResource('img') as TImage).MultiResBitmap.Delete(0)
    nickel, ça marche. je n'ai pas du tout penser à ça.

    question subsidiaire, liée avec mon style, mon image, et un ttext :
    habitué à faire tout moi même au niveau graphique sur la vcl, j'ai voulu me simplifier la vie avec firemonkey, mais je n'ai pas dû faire les choses correctement.
    ( c'est ma 1ére appli firemonkey )

    mon pb, toujours avec le FLbxItem, j'assigne un événement onclick sur un ttext

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LbxItem.StylesData['textnom.OnClick'] := TValue.From<tNotifyEvent>(txtnomClick);
    et dans txtnomClick, je change la présentation de mon lbxitem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      .... 
      if LbxItem.StyleLookup = 'listboxitemstylepresentation1' then
         LbxItem.StyleLookup := 'listboxitemstylepresentation2'
      else
         LbxItem.StyleLookup := 'listboxitemstylepresentation1';

    nota : les 2 styles sont identiques en taille , juste la presentation qui change

    à la sortie de l’événement onclick, j'ai une violation d’accès parce qu’apparemment le contrôle n'existe plus ( à cause de l'assignation du nouveau style )
    j'ai contourné le pb en fusionnant mes styles et maintenant je fais ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if LbxItem.StylesData['rectanglestylepresentation1.visible'].AsBoolean then
        begin
          LbxItem.StylesData['rectanglestylepresentation1.visible'] := False;
          LbxItem.StylesData['rectanglestylepresentation2.visible'] := true;
        end
        else
        begin
          LbxItem.StylesData['rectanglestylepresentation2.visible'] := False;
          LbxItem.StylesData['rectanglestylepresentation1.visible'] := true;
        end;
    en tapant mon message, je me demande si je n'ai pas fait du n'importe quoi cette nuit avec mes rectangles (mais ça marche)

    mon style est assigné comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          LbxItem.StyleLookup := 'listboxitemstylepresentation';
    et il est fait ainsi :
    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
     
     
      object TLayout
        StyleName = 'listboxitemstylepresentation'
        Padding.Left = 2.000000000000000000
        Padding.Top = 2.000000000000000000
         ....
        object TRectangle
          StyleName = 'rectanglestylepresentation1'
          Align = Client
          Fill.Color = xFF505050
          Visible = True
          ...
        end
        object TRectangle
          StyleName = 'rectanglestylepresentation2'
          Align = Client
          Fill.Color = xFF505050
          Visible = False
          ...
       end
       ....
    end
    jerome

  6. #6
    Membre Expert
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Par défaut
    Le plus simple serait peut être de nous montrer quel est le but escompté visuellement. Ce que vous souhaitez faire et avoir comme résultat visuel. Ça sera plus simple pour voir quel peut être la meilleure solution.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/05/2010, 12h45
  2. Réponses: 7
    Dernier message: 22/01/2009, 09h39
  3. inserer une image dans le fond d'une shape
    Par cortex59 dans le forum Visio
    Réponses: 26
    Dernier message: 16/07/2008, 09h53
  4. Inserer une Image dans l'entête d'une feuille Excel
    Par l0quito dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 10/07/2008, 15h46
  5. modifier une image dans un axe d'une interface Matlab
    Par sacoux dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 26/03/2008, 17h12

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