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 :

SKIA TSkSvg Image avec caractères spéciaux


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Points : 14
    Points
    14
    Par défaut SKIA TSkSvg Image avec caractères spéciaux
    Bonsoir,

    J'utilise SKIA sur Delphi 11 pour pouvoir importer et afficher des images faites en svg via Inkscape.

    J'ai un problème d'affichage sur mon application Delphi avec l'affichage des accents français (é, à, etc.).

    J'ai beau potasser le github du projet, je ne trouve rien sur cette histoire d'encodage.

    Quelqu'un sait si c'est supporté ou juste pas possible ? La solution pour contourner le problème pour le moment c'est de "convertir" le texte en objet sur Inkscape avant la sauvegarde du fichier svg mais je suis obligé de garder un backup pour pouvoir modifier les textes si besoin donc c'est pas optimal comme solution...

    Edit : je précise le test que j'ai fait, j'ai créé une image sous inkscape avec uniquement un texte avec un accent "français" et je l'ai exportée en format svg. L'ouverture du fichier sur n'importe quel navigateur m'affiche correctement l'accent. Mais l'ouverture du fichier avec un TSkSvg affiche des caractères bizarres en lieu et place du caractère accentué. J'ai utilisé la police "Segoe UI Variable".

    Merci

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    1 791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 1 791
    Points : 5 757
    Points
    5 757
    Par défaut
    Ces dernières années, Delphi n'a pas brillé par sa préoccupation d'être compatible à l'international...

    Par exemple, FMX, le prédécesseur de SKIA, ne prend toujours pas en compte la possibilité de fonctionner avec des langues lus et écrits de droite à gauche (exemple l'arabe ou l'hébreu mais il y en a d'autres); ce qui représente 2,3 milliards de personnes dans le monde!

    Alors que SKIA ne gère pas les accents de la langue française ne m'étonnerait pas outre mesure

    Vu que SKIA n'a été introduit que dans la dernière version de Delphi, peu de monde a une vraie expérience de SKIA. Pose la question directement au support de Embarcadero?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 133
    Points
    13 133
    Par défaut
    Je n'ai pas la réponse concernant les SVG mais

    Citation Envoyé par Anselme45 Voir le message
    Ces dernières années, Delphi n'a pas brillé par sa préoccupation d'être compatible à l'international...
    SKIA n'est clairement pas orienté localisation (et je ne pense pas que Delphi y puisse grand chose), je m'étonnais aussi du manque de facilité d'internationalisation à sa sortie. Le principe de mise en évidence par bloc de texte est juste impossible à traduire facilement sans recréer/réordonner les blocs. Ça va pour un titre et un paragraphe (2 blocs clairement définis) mais simplement souligner un mot dans ce paragraphe nous fait déjà passer à 4 blocs !

    Imaginez le livre vert (2 blocs) traduit en anglais The green book (3 blocs)

    Je plains les traducteurs, comme les développeurs qui devront localiser après-coup...

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Pour répondre à Anselme45 SKIA n'est pas un produit Embarcardero mais un projet open source de deux frères brésiliens, les frères Vinicius. S'il a été inclus dans Embarcadero c'est qu'il apporte (entre autre) une gestion des SVG beaucoup moins catastrophique que ce qui était proposé par Embarcadero le FMX.TPath (j'ai écrit plusieurs posts sur ce sujet).

    Je suis feignant en ce moment et n'ai donc pas vraiment creusé le sujet, mais je pense que le problème vient en partie du fait du passage en SVG du texte.
    pour preuve le TSKLabel
    Nom : Capture.PNG
Affichages : 89
Taille : 37,4 Ko

    Pour répondre tout de suite à Anselme, par contre, effectivement, si SKIA permet l'affichage des langues écrites de droite à gauche, voire de mixer l'ensemble, il n'est pas prévu pour la saisie.
    Toutefois, Anselme, as-tu lu ce paragraphe ? Et en particulier le point 3.
    Les contrôles de saisie au clavier tels que TEdit et TMemo doivent être corrigés par Embarcadero. En attendant, comme solution de contournement, définissez la propriété ControlType de ces contrôles sur Platform..
    Pour en revenir au problème posé, je changerai la démarche en utilisant un SkiaCanvas mais bon, comme je le dis, en ce moment, je suis en mode peu curieux de nouveautés. Je conseille de lire cette partie https://github.com/skia4delphi/skia4...cuments/SVG.md
    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

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    1 791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 1 791
    Points : 5 757
    Points
    5 757
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Pour répondre tout de suite à Anselme, par contre, effectivement, si SKIA permet l'affichage des langues écrites de droite à gauche, voire de mixer l'ensemble, il n'est pas prévu pour la saisie.
    Toutefois, Anselme, as-tu lu ce paragraphe ? Et en particulier le point 3.
    Non, comme écrit plus haut, je n'ai pas eu le temps de me frotter à SKIA jusqu'à maintenant.

    Par contre, merci pour le lien qui donne un peu plus d'info sur les capacités de SKIA.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    J'ai remarqué que cela fonctionne correctement depuis l'éditeur de form, mais pas depuis le code.

    Ci-dessous un projet de test avec 2 Image SVG dont une a été importé depuis l'éditeur de form. L'autre est chargé depuis le code en appuyant sur le bouton.

    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
    unit Unit1;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Skia, Vcl.Skia, System.IOUtils, Vcl.StdCtrls;
     
    type
      TForm1 = class(TForm)
        SkSvg1: TSkSvg;
        Button1: TButton;
        SkSvg2: TSkSvg;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      SkSvg2.Svg.Source := TFile.ReadAllText('image.svg');
      SkSvg2.Svg.WrapMode := TSkSvgWrapMode.Stretch;
    end;
     
    end.
    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
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 824
      ClientWidth = 1184
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -12
      Font.Name = 'Segoe UI'
      Font.Style = []
      TextHeight = 15
      object SkSvg1: TSkSvg
        Left = 0
        Top = 25
        Width = 1184
        Height = 392
        Align = alTop
        Svg.Source = 
          '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'#13#10'<!-- Cre' +
          'ated with Inkscape (http://www.inkscape.org/) -->'#13#10#13#10'<svg'#13#10'   wi' +
          'dth="228.10127mm"'#13#10'   height="115.0991mm"'#13#10'   viewBox="0 0 228.1' +
          '0127 115.0991"'#13#10'   version="1.1"'#13#10'   id="svg1"'#13#10'   xmlns:inkscap' +
          'e="http://www.inkscape.org/namespaces/inkscape"'#13#10'   xmlns:sodipo' +
          'di="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"'#13#10'   xmln' +
          's="http://www.w3.org/2000/svg"'#13#10'   xmlns:svg="http://www.w3.org/' +
          '2000/svg">'#13#10'  <sodipodi:namedview'#13#10'     id="namedview1"'#13#10'     pa' +
          'gecolor="#ffffff"'#13#10'     bordercolor="#000000"'#13#10'     borderopacit' +
          'y="0.25"'#13#10'     inkscape:showpageshadow="2"'#13#10'     inkscape:pageop' +
          'acity="0.0"'#13#10'     inkscape:pagecheckerboard="0"'#13#10'     inkscape:d' +
          'eskcolor="#d1d1d1"'#13#10'     inkscape:document-units="mm" />'#13#10'  <def' +
          's'#13#10'     id="defs1" />'#13#10'  <g'#13#10'     inkscape:label="Calque 1"'#13#10'   ' +
          '  inkscape:groupmode="layer"'#13#10'     id="layer1"'#13#10'     transform="' +
          'translate(-33.549453,-23.836985)">'#13#10'    <text'#13#10'       xml:space=' +
          '"preserve"'#13#10'       style="font-size:68.1676px;font-family:'#39'Segoe' +
          ' UI Variable'#39';-inkscape-font-specification:'#39'Segoe UI Variable, @' +
          'opsz=36.0,wght=325'#39';font-variation-settings:'#39'opsz'#39' 36, '#39'wght'#39' 32' +
          '5;fill:#ff0000;stroke-width:1.59767"'#13#10'       x="28.831324"'#13#10'    ' +
          '   y="113.65623"'#13#10'       id="text1"><tspan'#13#10'         id="tspan1"' +
          #13#10'         style="font-style:normal;font-variant:normal;font-wei' +
          'ght:normal;font-stretch:normal;font-size:119.293px;font-family:'#39 +
          'Segoe UI Variable'#39';-inkscape-font-specification:'#39'Segoe UI Variab' +
          'le, @opsz=36.0,wght=325'#39';font-variant-ligatures:normal;font-vari' +
          'ant-caps:normal;font-variant-numeric:normal;font-variant-east-as' +
          'ian:normal;font-variation-settings:'#39'opsz'#39' 36, '#39'wght'#39' 325;stroke-' +
          'width:1.59767"'#13#10'         x="28.831324"'#13#10'         y="113.65623"'#13#10 +
          '         sodipodi:role="line">'#233#224#249#231'</tspan></text>'#13#10'  </g>'#13#10'</svg' +
          '>'
      end
      object SkSvg2: TSkSvg
        Left = 0
        Top = 417
        Width = 1184
        Height = 407
        Align = alBottom
        ExplicitLeft = 456
        ExplicitTop = 560
        ExplicitWidth = 50
        ExplicitHeight = 50
      end
      object Button1: TButton
        Left = 0
        Top = 0
        Width = 1184
        Height = 25
        Align = alTop
        Caption = 'Load SVG'
        TabOrder = 0
        OnClick = Button1Click
        ExplicitLeft = 464
        ExplicitTop = 24
        ExplicitWidth = 75
      end
    end
    Nom : SVG.png
Affichages : 41
Taille : 36,0 Ko

    Apparement, il est pas possible d'importer les svg sur le forum donc j'ai mis le format en png, mais en gros c'est une simple image faite sous Inkscape avec un morceau de texte

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 393
    Points : 637
    Points
    637
    Par défaut
    tu devrais essayer un code du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SkSvg2.Svg.Source := TFile.ReadAllText('image.svg',TEncoding.UTF8);

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par exoseven Voir le message
    tu devrais essayer un code du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SkSvg2.Svg.Source := TFile.ReadAllText('image.svg',TEncoding.UTF8);
    Problème résolu, merci !

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

Discussions similaires

  1. Problème d'image avec DirectX9 et c# VS.net...
    Par lilly_lilly dans le forum DirectX
    Réponses: 1
    Dernier message: 02/03/2004, 14h02
  2. Passer des Image avec SOAP
    Par pef421 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 01/03/2004, 21h32
  3. Economie de mémoire pour plusieur images avec la même source
    Par neness dans le forum Composants VCL
    Réponses: 5
    Dernier message: 18/01/2004, 10h56
  4. PB affichage d'image avec IE
    Par arturo dans le forum Modules
    Réponses: 6
    Dernier message: 25/09/2003, 17h28
  5. [VB6] Affichage d'image avec qlq contraintes
    Par youri dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h44

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