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

 Delphi Discussion :

[FMX] Liste d'Images et index d'image


Sujet :

Delphi

  1. #1
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 370
    Points : 625
    Points
    625
    Billets dans le blog
    1
    Par défaut [FMX] Liste d'Images et index d'image
    Bonjour,
    Je suis totalement débutant sur Delphi (Version Rio 10.3.3 Comunity)
    Sous Firemonkey (Windows, Android, iOS)
    J'aimerais mettre un composant imagelist ou virtualimagelist sur mon datamodule.
    (Je n'ai pas encore choisit le composant car j'aimerais utiliser toutes les dpi.)
    J'aimerais connaitre la liste des composants ainsi que le nom de la propriété qui accepte l'index d'image.
    En effet, j'ai essayé Timage mais sauf erreur de ma part , il prend une image a partir du disque et l’intègre a la fiche.
    J'aimerais éviter les boutons car j'ai lu qu'ils acceptent que du 16 x 16.
    Donc désolé pour une question aussi simple.
    Merci d'avance de vos réponses.

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Hello

    Alors déjà je te suggère de passer à la nouvelle Community Edition sortie ce mois-ci (équivalente à la 10.4.2 Sydney). Pour les smartphones et tablettes tu seras globalement plus à jour de SDK et de règles de publication.

    Pour les images et les listes d'images dans FMX c'est quelque peu le foutoir (oui, je sais, j'devrais pas dire ça comme ça).

    Concernant le TImage tu as une propriété MultiResBitmap dessus, tu peux t'en servir pour lui fournir toutes les versions de l'image que tu désires afficher.

    Le TGlyph en revanche prend son affichage depuis un TImageList (que je te recommande de centraliser dans un module de données pour alléger tes fiches).

    Ca, ce sont les grandes lignes. Si tu nous dis plus précisément où tu veux afficher ton image on pourra peut-être t'indiquer un autre composant plus adapté ? Par exemple le TSpeedButton à la place du TButton ou directement une forme (mais ça ne gèrera pas la multirésolution).

  3. #3
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 370
    Points : 625
    Points
    625
    Billets dans le blog
    1
    Par défaut solution générique
    Je te remercie pour ta réponse rapide.
    Oui leTglyph me paraît bien
    Cependant pour une raison obscure, il n'as pas sauf erreur de propriété anchor.
    Mon but n'est que de regrouper les images dans le datamodule .
    Une autre solution est de mettre les images dans ma base SQLite ce qui fonctionne très bien avec les images du Tlistview .
    N'y a t'il pas un composant acceptant aussi bien le binaire et l'index?
    Je cherche une solution la plus générique possible.

  4. #4
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par popoy Voir le message
    Je te remercie pour ta réponse rapide.
    Oui leTglyph me paraît bien
    Cependant pour une raison obscure, il n'as pas sauf erreur de propriété anchor.
    Mon but n'est que de regrouper les images dans le datamodule .
    Une autre solution est de mettre les images dans ma base SQLite ce qui fonctionne très bien avec les images du Tlistview .
    N'y a t'il pas un composant acceptant aussi bien le binaire et l'index?
    Je cherche une solution la plus générique possible.
    veux-tu le faire depuis le concepteur de fiches ou par programmation ?

    Concernant la propriété Anchors du TGlyph, effectivement c'est étrange qu'elle ne soit pas publiée, je ne l'avais jamais vu. Je viens de faire une demande sur QP. Tu peux y accéder par code, même si elle n'est pas disponible dans l'IDE.

  5. #5
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 370
    Points : 625
    Points
    625
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pprem Voir le message
    veux-tu le faire depuis le concepteur de fiches ou par programmation ?

    Concernant la propriété Anchors du TGlyph, effectivement c'est étrange qu'elle ne soit pas publiée, je ne l'avais jamais vu. Je viens de faire une demande sur QP. Tu peux y accéder par code, même si elle n'est pas disponible dans l'IDE.
    Pour l'instant, je suis en phase d'apprentissage.
    Donc, je cherche à faire les choses aussi bien dans le concepteur et par programmation.
    C'est comme par exemple les requêtes paramétré, on peut les faire aussi bien avec TQuery ou execSQL .
    Pour revenir à ma question de départ.
    Je un composant, même si il faut l'acheter qui me permet d'afficher une image multi dpi aussi par chargement du binaire ou par index .
    Que ce composant ai les propriétés d'ancrage , align position taille.
    Un composant standard, je ne compte pas faire du dessin avec.
    Pour l'instant je suis obligée d'avoir les composants Timage et Tglyph dans les mêmes fiches .
    J'aurais voulu en avoir qu'un seul.

  6. #6
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    doit-on pouvoir cliquer ou interagir avec l'image ou est-elle juste affichée ?

  7. #7
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 370
    Points : 625
    Points
    625
    Billets dans le blog
    1
    Par défaut
    Il est vrai que le clic serait un plus
    Je veux juste éviter d'avoir trop de composants dans ma fiche.
    Donc une image qui s'affiche avec le clic que l'on charge ou que l'on affecte par index dans le concepteur et par programmation.
    Hors sujet : Je ne comprends pas qu'il y ait autant de composants pour les images et que je n'arrive pas à en trouver un qui me convienne

  8. #8
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par popoy Voir le message
    Hors sujet : Je ne comprends pas qu'il y ait autant de composants pour les images et que je n'arrive pas à en trouver un qui me convienne
    C'est vrai que sur ce coup là, ils se sont amusés. Surtout si en plus on regarde les formes qui permettent d'afficher un bitmap en fond.

    Là, je n'ai pas de solution clé en main. Je dirais TGlyph dans un TRectangle.
    TGlyph associé à ta liste d'images, aligné en Client ou Contents.
    TRectangle dont tu élimines les rebords avec la propriété Stroke et change le Fill pour le passer en Bitmap, dont tu laisses le HitTest actif pour avoir le onClick déclenché quand tu cliques.

    Tu alimentes ton TGlyph à l'écran ou par code via une liste d'images.

    Tu alimentes fill.Bitmap.Bitmap du TRectangle si tu préfères travailler avec un bitmap par code. (en pensant à masquer le TGlyph dans ce cas en mettant à false sa propriété Visible).

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    @pprem Pas mal du tout comme solution (TRectangle, TGlyph). Sans trop réfléchir (vacances obligent) si tout ça est dans un style où même un composant "simple", un peu comme j'ai pu déjà le proposer dans un tuto (note : je vais pas faire l'indication de celui-ci car je passe juste en coup de vent) ça peut vraiment faire quelque chose de sympa.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    sous FMX il y a deux logiques utilisables, les Style (qui ne sont qu'un assemblage de composants utilisé pour faire le rendu), et les empilements de composants qui sont possibles dans un peu tous les sens contrairement à la VCL

    dans un projet j'utilise notamment un TRectangle contenant un TText et un TGlyph pour faire des boutons personnalisés

    et pour ne pas avoir à gérer le onclick sur chaque rectangle j'ai ajouté dans une unité ceci

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
      TRectangle = class(FMX.Objects.TRectangle)
      private
        FFillColor: TAlphaColor;
      public
        ArticleID: Integer;
        RuptureLine: TLine;
        procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override;
        procedure DoMouseLeave; override;
        procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override;
        procedure Click; override;
        procedure SetFillColor(Value: TAlphaColor);
      end;
     
    { TRectangle }
     
    procedure TRectangle.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
      Y: Single);
    begin
      inherited;
      if Assigned(OnClick) then // s'il est cliquable
      begin
        FFillColor := Fill.Color; // sauvegarder la couleur
        Fill.Color := ((FFillColor and $FEFEFE) shr 1) or $FF000000; // la rendre un peu plus sombre
      end;
    end;
     
    procedure TRectangle.Click;
    begin
      if FFillColor <> 0 then
        Fill.Color := FFillColor; // restaurer la couleur d'origine
      inherited;
    end;
     
    procedure TRectangle.DoMouseLeave;
    begin
      inherited;
      if FFillColor <> 0 then
        Fill.Color := FFillColor; // restaurer la couleur d'origine
    end;
     
    procedure TRectangle.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
      Y: Single);
    begin
      if FFillColor <> 0 then
        Fill.Color := FFillColor; // restaurer la couleur d'origine
      inherited;
    end;
     
    procedure TRectangle.SetFillColor(Value: TAlphaColor);
    begin
      FFillColor := Value; // utilisé pour changer la couleur du bouton - même s'il est enfoncé, par exemple dans OnClick
      Fill.Color := Value;
    end;
    voilà ce que ça donne dans l'appli, quand je clique sur "Hamburger" qui est défini comme ceci
    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
     
    object rtBurger5: TRectangle
      Tag = 5
      Align = Top
      Fill.Color = xFFEDB35D
      Position.Y = 375.000000000000000000
      Size.Width = 150.000000000000000000
      Size.Height = 75.000000000000000000
      Size.PlatformDefault = False
      OnClick = rtBurger0Click
      object txBurger5: TText
        Align = Bottom
        HitTest = False
        Position.Y = 50.000000000000000000
        Size.Width = 150.000000000000000000
        Size.Height = 25.000000000000000000
        Size.PlatformDefault = False
        Text = 'Hamburger'
        TextSettings.Font.Family = 'Arial'
        TextSettings.Font.Size = 14.000000000000000000
        TextSettings.Font.StyleExt = {00070000000000000004000000}
      end
      object Glyph38: TGlyph
        Align = Client
        Size.Width = 150.000000000000000000
        Size.Height = 50.000000000000000000
        Size.PlatformDefault = False
        ImageIndex = 7
        Images = DM.ImageList
      end
    end
    Nom : Capture-1.png
Affichages : 267
Taille : 82,3 Ko

    le prix est ajouté par 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
     
    begin
        tx := TText.Create(rt);
        tx.Align := TAlignLayout.Contents;
        tx.HitTest := False;
        tx.Text := CurrToStr(Prix);
        tx.Font.Family := 'Arial';
        tx.Font.Size := 10;
        tx.Margins.Top := 2;
        tx.Margins.Right := 2;
        tx.TextSettings.HorzAlign := TTextAlign.Trailing;
        tx.TextSettings.VertAlign := TTextAlign.Leading;
        tx.Parent := rt;
    end;
    notez que, contrairement à la VCL, on peut mettre le composant par dessus les autres, le simple fait de désactiver HitTest le rend insensible à la souris et on peut cliquer sur le parent en dessous sans problème.
    TGlyph n'a pas de HitTest mais il est de fait insensible à la souris
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    J'ai fait un mini essai FMX dernièrement et ce HitTest m'a vraiment plu. Dommage qu'il n'existe pas en VCL, ça serait pourtant simple à implémenter.

  12. #12
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    J'ai fait un mini essai FMX dernièrement et ce HitTest m'a vraiment plu. Dommage qu'il n'existe pas en VCL, ça serait pourtant simple à implémenter.
    uniquement pour les TGraphicControl, pour les TWinControl ils choppent l'évènement qu'il faudrait propager sur le parent...c'est imaginable mais pas simple

    sous FMX tous les composant sont dessinés par Delphi (sauf quand on active les composants système) et c'est en fait TForm qui chope le clic et le propage dans les composants, c'est d'ailleurs très pratique pour debuger

    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
     
    type
      Tform1 = class(TForm)
      ...
      public
        procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override;
      ...
      end;
     
    procedure TForm1.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
      Y: Single);
    {$IFDEF DEBUG}
    var
      Obj: IControl;
      Ctl: TFmxObject;
    {$ENDIF}
    begin
    {$IFDEF DEBUG}
      Obj := ObjectAtPoint(ClientToScreen(TPointF.Create(X, Y)));
      if Obj <> nil then
      begin
        AllocConsole;
        Ctl := Obj.GetObject;
        WriteLn('click on ', Ctl.Name, ':', Ctl.ClassName, ' from ' + Ctl.UnitName);
      end;
    {$ENDIF}
      inherited;
    end;
    avec ce code (pour Windows uniquement) tu as une console (Winapi.Windows) qui s'ouvre pour indiquer le nom et l'unité (cf les Frames) du composant sur lequel on clique
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Les messages souris (ou pointeurs) sont postés. Ne penses-tu pas qu'on pourrait les interceptés dans WndProc et conditionner le dispatch, un peu comme un KeyPreview pour les touches mais au niveau TControl ?

    edit: ça pourrait poser des problèmes avec WM_SETFOCUS, oui c'est peut-être plus compliqué que cela... tout du moins, il y aurait un certains nombre de messages à traiter autres que ceux de la souris. Mais sur les TGraphicControl ce serait déjà bien. C'est de toute façon moins logique sur les TWinControl

  14. #14
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Les messages souris (ou pointeurs) sont postés. Ne penses-tu pas qu'on pourrait les interceptés dans WndProc et conditionner le dispatch, un peu comme un KeyPreview pour les touches mais au niveau TControl ?

    edit: ça pourrait poser des problèmes avec WM_SETFOCUS, oui c'est peut-être plus compliqué que cela... tout du moins, il y aurait un certains nombre de messages à traiter autres que ceux de la souris. Mais sur les TGraphicControl ce serait déjà bien. C'est de toute façon moins logique sur les TWinControl
    en fait ça doit être possible

    https://stackoverflow.com/questions/...ough-windows-c
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  15. #15
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 370
    Points : 625
    Points
    625
    Billets dans le blog
    1
    Par défaut Merci
    Merci à tous de m'avoir répondu
    Paul TOTH merci pour ta solution toute prête. Je m'y attendait pas.
    On peut considéré mon sujet comme résolu.
    Nb : Je ne sais pas comment on met le sujet en résolu sur le forum.

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

Discussions similaires

  1. list-style-image riquiqui a l'impression
    Par speedev dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 20/10/2006, 13h57
  2. Liste d'images jpg, gif, bmp
    Par kurkaine dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/09/2006, 15h32
  3. [C#] Comment créer une liste d'image dynamiquement ?
    Par gwenhael dans le forum ASP.NET
    Réponses: 3
    Dernier message: 08/09/2006, 11h30
  4. Comment faire une liste d'image de choix ?
    Par poussinphp dans le forum Composants VCL
    Réponses: 4
    Dernier message: 01/10/2005, 00h34
  5. Réponses: 4
    Dernier message: 14/10/2003, 08h58

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