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 :

Couleur transparente avec Bitmap d'un TImageList, et ne marche pas avec un TImage


Sujet :

Composants FMX Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 394
    Points : 165
    Points
    165
    Par défaut Couleur transparente avec Bitmap d'un TImageList, et ne marche pas avec un TImage
    Bonjour,
    J'ai des procédures et fonctions dans le code d'une application pour faire des tris de TStringGrid, et je suis en train de travailler à en faire une unité "outil" générique.
    J'ai quasiment fini, mais je bute sur un petit souci.
    Pour montrer si chaque colonne est triée ou non et si oui dans quel sens, lors du DrawColumnHeader, je dessine un petit bitmap issu d'un TImageList
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var
       size: tsize;
       bm: TCustomBitmapItem;
     
    if ImageList.BitmapItemByName(nom_du_bitmap, bm, size) then
       begin
       // dessine le bitmap du glyph d'ordre 0, 1 ou 2 correspondant au sens de tri de la colonne
       canvas.drawbitmap(ImageList.Bitmap(tsizef.create(size.cx, size.cy),
                                    ordre_du_glyph_dans_ImageList_selon_le_sens),
                                    trectf.create(0, 0, size.cx, size.cy),
                                    trectf.create(0, 0, size.cx, size.cy),
                                    100);
       end;
    Et ça marche très bien.

    Maintenant que je veux insérer cette action dans l'unité, je ne peux plus utiliser un TImageList que je dépose sur la Form.
    J'ai donc créé un fichier .res dans lequel j'ai inséré les ressource bitmap en rcdata (c'est comme ça pour fmx),
    J'ai déclaré ce fichier ressource dans l'unité, j'ai utilisé la section initialization de l'unité pour charger ces images à la compilation, et je les ai affectées à un array of TImage.
    Je n'ai pas trouvé la propriété TransparentColor ailleurs que dans TImage.MultiResBitmap.TransparentColor

    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
     
    // En début d'unité : 
    {$R images.res}
     
    ....
     
    var
          imgs: array[0..2] of TImage;
     ....
     
    procedure LoadBitmapFromResource(Bitmap: TBitmap; const ResName: string);
    var
      ResStream: TResourceStream;
      im: timage;
    begin
      ResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);  
        Bitmap.LoadFromStream(ResStream);
      finally
        ResStream.Free;
      end;
    end;
     
    initialization;
    imgs[0]:=TImage.create(nil);
    imgs[0].MultiResBitmap.TransparentColor:=TColorRec.magenta;
    LoadBitmapFromResource(imgs[0].MultiResBitmap.bitmaps[1.0], 'BITMAP_1');
     
    imgs[1]:=TImage.Create(nil);
    imgs[1].MultiResBitmap.TransparentColor:=TColorRec.magenta;
    LoadBitmapFromResource(imgs[1].MultiResBitmap.Bitmaps[1.0], 'BITMAP_2');
     
    imgs[2]:=TImage.Create(nil);
    imgs[2].MultiResBitmap.TransparentColor:=TColorRec.magenta;
    LoadBitmapFromResource(imgs[2].MultiResBitmap.Bitmaps[1.0], 'BITMAP_3');
     
    finalization;
    imgs[0].free;
    imgs[1].free;
    imgs[2].free;
    Mais lorsque je veux utiliser ces glyphs dans le DrawColumnHeader selon le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // ats[i].sens contient un type énuméré qui donne 0, 1 ou 2
    Canvas.DrawBitmap(imgs[ord(ats[i].sens)].MultiResBitmap.bitmaps[1.0],
                     trectf.create(0, 0, imgs[ord(ats[i].sens)].MultiResBitmap.bitmaps[1.0].Width, 
                                         imgs[ord(ats[i].sens)].MultiResBitmap.bitmaps[1.0].Height),
                     trectf.create(0, 0, imgs[ord(ats[i].sens)].MultiResBitmap.bitmaps[1.0].Width, 
                                         imgs[ord(ats[i].sens)].MultiResBitmap.bitmaps[1.0].Height),
                     100);
    la couleur transparente déclarée comme Magenta s'affiche en ... Magenta ... ! alors qu'elle devrait être considérée comme transparente ?

    J'utilise bien sur les mêmes .bmp dans le TImageList et dans mes TImage.

    Merci de me dire ce que je fais de mal ou oublie de faire. Y a t'il une propriété que j'oublie d'initialiser ?

    Merci d'avance et bien cordialement.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 394
    Points : 165
    Points
    165
    Par défaut
    Bon, ben j'ai trouvé une solution, mais il a fallu que je retouche mes bmp.
    Jusqu'à maintent j'utilisais une méthode que j'utilise depuis delphi 1 (!) qui consistait à utiliser une certaine couleur dans un bitmap qui était définie comme la couleur transparente.
    Si mes souvenirs sont bons, c'était le pixel en bas à gauche qui définissait la couleur transparente.
    Ensuite, il y a eu dans la VCL une option pour définir la couleur transparente, si mes souvenirs sont bons.
    Et il semblerait que cette option existe encore, car quand on ajoute des images dans un TImageList, ça marche aussi.
    Mais en créant un TImageList dans une unité (ce qui est loin d'être simple en FMX ! et c'est un euphémisme), ça ne marche pas, pourtant avec les mêmes images sources et en définissant par programme la couleur transparente. Va comprendre ??
    En fait ma solution a consisté à effacer avec la gomme dans un éditeur bmp la couleur que j'avais définie comme transparente ... et ça marche aussi bien dans un TImageList composant posé sur une Form qu'avec un TImageList créé par programmation dans une unité. Et finalement j'ai trouvé beaucoup plus simple de créer 3 TImage et d'importer les bitmap corrigés depuis un fichier ressource, comme défini ci-dessus, mais sans même définir une couleur transparente !
    Finalement c'est assez simple ... avec les bons bmp source

    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
     
    {$R images.res}
     
    var 
       imgs: array[0..2] of TImage;
     
    procedure LoadBitmapFromResource(Bitmap: TBitmap; const ResName: string);
    var
      ResStream: TResourceStream;
      im: timage;
    begin
      ResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);  
      try
        Bitmap.LoadFromStream(ResStream);
      finally
        ResStream.Free;
      end;
    end;
     
    initialization;
    imgs[0]:=TImage.create(nil);
    LoadBitmapFromResource(imgs[0].bitmap, 'Bitmap_0');
    imgs[1]:=TImage.Create(nil);
    LoadBitmapFromResource(imgs[1].Bitmap, 'Bitmap_1');
    imgs[2]:=TImage.Create(nil);
    LoadBitmapFromResource(imgs[2].Bitmap, 'Bitmap_2');
     
    finalization;
    imgs[0].free;
    imgs[1].free;
    imgs[2].free;

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 207
    Points : 41 457
    Points
    41 457
    Billets dans le blog
    63
    Par défaut
    Franchement, je passerai par des SVG comme ça plus de problèmes d'échelle avec les écrans 4k.
    Bon je n'ai pas tout suivi ce que tu veux exactement niveau dessin (petite image du truc désiré serait un plus)
    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

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 394
    Points : 165
    Points
    165
    Par défaut
    Bonjour Sergio,
    Merci de t'intéresser. En fait, je n'aime pas comprendre pourquoi certaines choses ne fonctionnent pas même si j'ai trouvé une solution de contournement
    Mon problème est résolu pour les écrans "normaux" en effet mais je n'aime vraiment pas les TPath et les svg.
    C'est comme les styles. Hier je me suis pris la tête pour définir une couleur pour un header de TStringGrid ... Je croyais avoir trouvé la branche, mais je ne vois pas la propriété couleur ou fill pour le header donc je ne sais toujours pas comment faire. Ca serait trop simple de pouvoir affecter une couleur à une TStringGrid ou que au Header.

    J'ai déjà utilisé svg pour dessiner des formes spéciales de bouton, mais c'est vraiment pas intuitif comme système et le codage est compliqué.

    En fait voilà ce que j'obtiens avec ma méthode :
    Nom : Capture.JPG
Affichages : 106
Taille : 8,4 Ko
    La colonne integer est non triée, la deuxième colonne string est triée selon le premier critère de tri en décroissant, la troisième float est triée en deuxième critère en croissant, la quatrième en décroissant, les autres ne font pas l'objet d'un tri.
    J'ai bien pensé à un moment utiliser les svg, mais les glyph sont tellement simples à utiliser quand tu as trouvé le truc.
    Images attachées Images attachées  

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 207
    Points : 41 457
    Points
    41 457
    Billets dans le blog
    63
    Par défaut
    OK, je vois le sujet.
    J'avais fait un premier jus "test" sur à peu près le même truc sans toutefois finaliser.
    Le fait que le header soit désormais accessible plus facilement change la donne. Même si cela reste dans ma liste des todos (qui s'allonge car "mes siestes" sont de plus en plus longues) ce n'est pas resté une priorité

    J'ai bien pensé à un moment utiliser les svg, mais les glyph sont tellement simples à utiliser quand tu as trouvé le truc.
    je retourne l'argument "les SVG sont tellement plus simple à utiliser une fois le truc compris"
    mon argument le plus percutant des SVGs restant qu'il n'y a pas besoin de décliner un png en plusieurs échelles.
    La publication de mon "ouvrage" sur les SVG n'est jamais parue car : trop volumineux, sans correcteurs techniques et l'offre évoluant (dans le bon sens) trop vite (de FMX.TPath à Skia en passant par des bibliothèques tiers puis Ethea-TSVGIcon) en deux ou trois ans
    Enfin il y a l'argument de poids un SVG restera à mon avis toujours moins couteux en octet qu'un ensemble de PNG mais ça, ça n'a de "prix" que pour les vieux
    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

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 394
    Points : 165
    Points
    165
    Par défaut
    Si j'ai le temps j'essayerai de faire une version svg, mais en terme de poids, mon fichier res pèse 1720 octets, ce qui est fort acceptable je pense !
    La méthode que j'utilise fonctionne aussi bien sur le pc que sur le mobile.

    Je suis aussi un vieux et j'ai travaillé au début sur des machines avec processeur 8 bits qui avaient 64Ko de RAM ! Donc tout devait être pesé. Perso, chaque boolean était stocké sur un bit d'un octet et je traitais avec des and, or, xor !

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 394
    Points : 165
    Points
    165
    Par défaut
    Je dois être neuneu car je n'ai pas trouvé dans la doc comment faire un rectangle en svg
    J'ai essayé les sites décrivant comment faire des rectangle en svg en html mais le code ne fonctionne pas dans la fenêtre data du tpath

    Est ce qu'il est possible d'afficher le résultat d'un fichier svg dans un Timage par exemple ?

    Je n'arrive pas à faire un TPath avec 2 ou 3 couleurs ?

    Tu aurais un exemple ?

    J'ai encore dû rien comprendre ...

    Merci d'avance.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 394
    Points : 165
    Points
    165
    Par défaut
    Bon impossible de comprendre comment dessiner mes glyph en svg (sur quel support ? comment faire plusieurs couleurs sur un TPath ? trop de questions sans réponses)

    Mais finalement, l'évocation de dessin vectoriel svg m'a donné l'idée de dessiner les glyphs par programmation.
    Comme ce ne sont que des rectangles tout simples, voire des traits, j'ai créé une routine de dessin qui s'adapte à toutes les tailles et en fonction de la hauteur du Header de la StringGrid et du ppi détecté par la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function Pixels : integer;
    var D : IFMXDeviceMetricsService;
        Q : TDeviceDisplayMetrics;
    begin
    result:=96; // valeur par défaut windows
    if TPlatformServices.Current.SupportsPlatformService(IFMXDeviceMetricsService, D) then
       begin
       Q:=D.GetDisplayMetrics;
       result:=Q.PixelsPerInch;
       end;
    end;
    Ca marche très bien pour dessiner très rapidement mes 3 glyphs à la création et de les stocker dans un tableau de Bitmap.
    Ca ne prend quasiment rien en mémoire et je m'en sers partout où j'en ai besoin avec DrawBitmap

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 207
    Points : 41 457
    Points
    41 457
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    désolé de n'avoir répondu au post précédent et là je reprends un post qu'une malhencontreuse manip (fermeture de Firefox) m'a fait perdre

    Je dirais qu'il y a plusieurs manières de faire :
    La plus simple obtenir des SVG gratuits via le net


    Ensuite, comme j'aime bien comprendre un peu de lecture sur le SVG sensu stricto
    https://developer.mozilla.org/fr/doc...l/Introduction
    https://svground.fr/paths.php (ici tu trouveras le rectangle "M 100,100 H 200 V 200 H 100 Z" )

    un peu de notepad++ ou autre pour comprendre comment sont mis les divers attributs (couleurs, remplissages etc..) et pouvoir les modifier, et, "la messe sera dite"
    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
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 394
    Points : 165
    Points
    165
    Par défaut
    Merci pour ces références.
    Le format SVG, j'ai à peu près compris. Le Path aussi. Pour définir une couleur dans un SVG natif, je pense avoir compris aussi.
    Ce que je n'ai pas compris c'est comment afficher un svg natif (en format HTML tel que les liens fournis) dans un Tbitmap d'une application delphi.

    Je sais je dois être très con mais je n'ai pas trouvé d'exemple ni sur le wiki (qui marche mal) ni sur internet.
    Je n'ai trouvé que les commandes basiques à insérer dans un pathdata (M10,10 L30,30 L50,50 Z etc ...) pour lesquelles je n'ai pas trouvé comment changer la couleur une fois le premier rectangle dessiné par exemple ou définir une épaisseur de trait ou un rectangle ?

    Ou bien si tu as un site qui explique comment remplir le pathdata d'un Tpath de delphi en faisant plusieurs rectangle de couleurs différentes je suis preneur.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 394
    Points : 165
    Points
    165
    Par défaut
    Alors je viens de découvrir sur github un projet Serge-Girard/TPath qui me paraît très intéressant (peut-être connais-tu ? ), avec un pdf très instructif, mais qui semble confirmer ce que je pressentais : TPath = couleur du fond et couleur du crayon mais pas plusieurs couleurs de crayons dans le même TPath ?

    Je vais quand même potasser tout ça ... au boulot !

    Mais c'est pour le plaisir car je viens de tester mon système sur mon téléphone, dont la résolution est bien supérieure à mon écran pc et ça marche très bien

    Mais j'aime bien comprendre

  12. #12
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 207
    Points : 41 457
    Points
    41 457
    Billets dans le blog
    63
    Par défaut
    FMX.TPath oui, mais désormais, il y a des composants plus "efficaces" sur base de SKIA avec TSKSvg et/ou installer les Ethea déjà cités.
    je viens de découvrir sur github un projet Serge-Girard/TPath qui me paraît très intéressant (peut-être connais-tu ? ), avec un pdf très instructif,
    Lol oui c'est mon dépôt mais je ne voulais pas me citer, ce travail a été fait bien avant Skia et Ethea
    En projet il y avait une comparaison des diverses alternatives a un FMX.TPath plus que limité même si mes différents travaux (il faudra que tu recherches dans le forum FMX, mes histoires de drapeaux et de starwar qui poussaient les limites du dit TPath
    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

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 394
    Points : 165
    Points
    165
    Par défaut
    Alors skia je n'avais pas vu l'intérêt jusqu'à maintenant
    Là aussi peu d'explication et je n'ai pas réussi à mettre en œuvre
    Ethea j'ai installé mais je n'ai pas réussi à le mettre en œuvre
    Ça fait un peu usine à gaz ... je n'ai pas su remplir le composant...
    Je verrai pour m'y remettre
    Pour l'instant j'essaye de transformer mon unité ajoutant le tri d'une tsringgrid en une classe ... c'est une première et j'ai du mal mais j'ai bien compris qu'il valait mieux que je m'y mette car je suis en train de lire le pavé de Marco Cantu (550 pages en anglais c'est aussi une première !)

  14. #14
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 207
    Points : 41 457
    Points
    41 457
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par navyg Voir le message
    Alors skia je n'avais pas vu l'intérêt jusqu'à maintenant
    Là aussi peu d'explication
    Ethea j'ai installé mais je n'ai pas réussi à le mettre en œuvre
    ça me donne envie de me remettre à, ou plutôt reprendre, l'écriture du tutoriel

    Pour l'instant j'essaye de transformer mon unité ajoutant le tri
    C'est une des choses qui m'avait arrêté dans mon élan, quoique Firedac permette ces choses assez facilement pour ce qui est du tri

    N.B. j'avais oublié mon billet blog et le super pdf que j'avais trouvé à l'époque
    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

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 394
    Points : 165
    Points
    165
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    N.B. j'avais oublié mon billet blog et le super pdf que j'avais trouvé à l'époque
    Ca je l'avais vu aussi mais je n'ai pas assez bossé dessus.
    Je vais faire chantier par chantier pour éviter de me disperser ...
    Je vais d'abord terminer ma première class

  16. #16
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 207
    Points : 41 457
    Points
    41 457
    Billets dans le blog
    63
    Par défaut
    Curieux et acharné, je suis, cela me maintient en forme, du moins niveau cerveau

    voilà une version avec Skia

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    unit GrilleUnit;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Rtti,
      FMX.Grid.Style, FMX.Grid, FMX.Controls.Presentation, FMX.ScrollBox,
      FMX.StdCtrls, System.Skia, FMX.Skia;
     
    type
      TForm5 = class(TForm)
        Grid1: TGrid;
        Column1: TColumn;
        Column2: TColumn;
        StyleBook1: TStyleBook;
        Button1: TButton;
        SkSvg1: TSkSvg;
        procedure Button1Click(Sender: TObject);
        procedure Grid1DrawColumnHeader(Sender: TObject; const Canvas: TCanvas;
          const Column: TColumn; const Bounds: TRectF);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form5: TForm5;
     
    implementation
     
    {$R *.fmx}
     
    uses FMX.Header;
     
    procedure TForm5.Button1Click(Sender: TObject);
    var
      Header: THeader;
    begin
      Header:= THeader(Grid1.FindStyleResource('header'));
      Header.Height := 40;
    end;
     
     
    procedure TForm5.Grid1DrawColumnHeader(Sender: TObject; const Canvas: TCanvas;
      const Column: TColumn; const Bounds: TRectF);
    var
      Header: THeader;
      HeaderItem: THeaderItem;
     
    const svg1 = '''
         <svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48">
         <g fill="#D1C4E9">
         <path d="M38,7H10C8.9,7,8,7.9,8,9v6c0,1.1,0.9,2,2,2h28c1.1,0,2-0.9,2-2V9C40,7.9,39.1,7,38,7z"/>
         <path d="M38,19H10c-1.1,0-2,0.9-2,2v6c0,1.1,0.9,2,2,2h28c1.1,0,2-0.9,2-2v-6C40,19.9,39.1,19,38,19z"/>
         <path d="M38,31H10c-1.1,0-2,0.9-2,2v6c0,1.1,0.9,2,2,2h28c1.1,0,2-0.9,2-2v-6C40,31.9,39.1,31,38,31z"/>
         </g>
         <circle fill="#43A047" cx="38" cy="38" r="10"/>
         <polygon fill="#DCEDC8" points="42.5,33.3 36.8,39 34.1,36.3 32,38.5 36.8,43.3 44.6,35.5"/>
         </svg>
         ''';
     
    begin
      Header:= THeader(Grid1.FindStyleResource('header'));
      if assigned(Header) then HeaderItem:= Header.Items[column.index];
     
    case Column.Index of
      0 : begin
       if HeaderItem.ComponentCount>1 then HeaderItem.Components[1].Destroy;
     
       with TSKSvg.Create(HeaderItem) do
       begin
         Margins.Right:=2;
         Margins.Top:=1;
         Margins.Bottom:=1;
         Height:=Header.Height-2;
         Width:=Height;
         Align:=TalignLayout.Right;
         Parent:=HeaderItem;
         HeaderItem.TextSettings.HorzAlign := TTextAlign.Leading;
         SVG.Source:=svg1;
         Width:=Header.Height;
    //     OnClick:=ClickSort;
       end;
      end;
      1 : begin
     
      end;
     
    end;
    end;
     
    end.
    Nom : Capture.PNG
Affichages : 51
Taille : 9,8 Ko

    Bien sûr ce n'est pas encore une version définitive, juste un essai. Si on me connait, on sait que je n'en resterai pas là
    en voilà déjà une version avec 2 svgs bien qu'ils ne me plaisent qu'à moitié car uniquement Alpha
    Nom : Capture.PNG
Affichages : 48
Taille : 5,5 Ko
    Bien sûr il va falloir ajouter un tagobject pour savoir ce qu'il en sera de la suite (ascendant, descendant, inactif ? ) et de l'ordre
    à propos de l'ordre (dans un rond rouge) j'ai déjà l'idée SVG qu'il me faut peaufiner

    quelque chose comme ça
    Nom : Capture.PNG
Affichages : 47
Taille : 1,8 Ko
    dont on comprendra "facilement" que l'ordre peut devenir une variable en regardant le source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 511.993 511.993" xml:space="preserve" fill="#000000">
    <g> 
    <rect x="0.000" y="438.594" style="fill:#00A1A7;" width="300.000" height="73.038"></rect>
    <rect x="0.000" y="292.519" style="fill:#00A1A7;" width="250.000" height="73.038"></rect>
    <rect x="0.000" y="146.444" style="fill:#00A1A7;" width="150.000" height="73.038"></rect>
    <rect x="0.000" y="0.362" style="fill:#00A1A7;" width="100.000" height="73.038"></rect> 
    </g>
    <circle cx="400" cy="100" r="100" 
               style="font: 20px sans-serif; white-space: pre-line;
               text-anchor: middle;">1</text>
    <g>
    </g>
    </svg>
    et peut-être même ne pouvoir utiliser qu'un seul SVG pour tout est une idée qui vient de me traverser l'esprit en jouant sur les x y du cercle et les width des rectangles
    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

  17. #17
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 207
    Points : 41 457
    Points
    41 457
    Billets dans le blog
    63
    Par défaut
    Je vais continuer ce "travail" dans cette discussion https://www.developpez.net/forums/d2...itre-colonnes/
    (tout en y laissant l'adresse de celle-ci) pour rebondir sur mon idée de helper.

    En nota bene j'ajouterais qu'il sera aussi necessaire de pouvoir changer les couleurs du SVG car, suite à une utilisation d'un style je me suis retrouvé avec des barres quasi invisibles
    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

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 394
    Points : 165
    Points
    165
    Par défaut
    Wowwwww !
    Je vais de ce pas sur le fil que tu as créé.

    A la lumière de ton travail, je viens d'essayer avec un TSkSvg1 et j'ai enfin compris comment ça marchait !

    Merci.

  19. #19
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 207
    Points : 41 457
    Points
    41 457
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par navyg Voir le message
    A la lumière de ton travail, je viens d'essayer avec un TSkSvg1 et j'ai enfin compris comment ça marchait !
    Merci.
    Super et merci à toi pour m'avoir remis le pied à l'étrier, je sors de mon hibernation de néo retraité car ce sujet m'a (re)motivé
    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

Discussions similaires

  1. GDI+ et affichage d'image avec couleurs transparentes
    Par le petit dernier dans le forum MFC
    Réponses: 4
    Dernier message: 06/03/2009, 15h08
  2. Réponses: 0
    Dernier message: 11/03/2008, 15h02
  3. Dessiner une image avec une couleur transparente
    Par FabaCoeur dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 10/02/2008, 20h38
  4. texture avec couleurs transparente
    Par AlKoLiK dans le forum OpenGL
    Réponses: 3
    Dernier message: 13/01/2008, 22h55
  5. [100% GDI] DC avec une couleur transparente....
    Par cyber_N dans le forum MFC
    Réponses: 6
    Dernier message: 20/11/2005, 11h41

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