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

Lazarus Pascal Discussion :

Composant TGIFViewer


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut Composant TGIFViewer
    TGIFViewer 👀
    Composant d'animation de GIFs pour Lazarus

    Bonjour à tous,

    Suite à notre discussion, je vous présente le composant TGIFViewer en version 1.0.

    TGIFViewer est un composant visuel pour l'affichage d'animations au format GIF (Graphic Interchange Format) avec Free Pascal et Lazarus.

    Compatibilité : Windows, Linux et MacOS

    Capacités de TGIFViewer :
    • Chargement depuis un stream, un fichier ou une ressource (fonctions LoadFromStream, LoadFromFile, LoadFromResource) ;
    • Extraction des images brutes (**fonction DisplayRawFrame) ;
    • Extraction des images pré-calculées de l'animation (fonction DisplayFrame ) ;
    • Affichage avec ou sans transparence (Transparent) ;
    • Gestion silencieuse de certaines données mal encodées pour permette l'affichage des images sans perturber l'utilisateur ;
    • Gestion des erreurs pour les fichiers mal compressés (OnLoadError) ;
    • Centrage (Center), redimensionnement (Stretch) de l'affichage ;
    • Dimension du composant automatique en fonction de l'image (AutoSize) ;
    • Evénement à la lecture, l'arrêt ou la mise en pause de l'animation (OnStart, OnPause, OnStop) ;
    • Accès aux images et informations du GIF via la propiété Frames.Items[x].
    • Traduction des messages interne via les fichiers po du français à l'anglais à l'aide du composant de Gilles Vasseur TGVTranslate légèrement modifié provenant de son tutoriel Comment internationaliser une application avec Free Pascal/Lazarus (voir demonstration gifview. Notez que vous devez copier le dossier languages dans le dossier de sortie de l'executable )


    Voici une démonstration avec MacOS :




    ℹ️ Contient également deux unités :

    • uFastBitmap : classe pour la manipulation de bitmaps 32 bits au format RGBA ou BGRA suivant l'OS ;
    • TypesHelpers : classes ajoutant des fonctions utiles au type de données (byte, integer, string, double, TDateTime...) les fonctions sont accessibles directement par la complétion du code sous Lazarus.
    • GVTranslate : Classe d'aide pour traduire une application


    ℹ️ Vous pouvez télécharger GIF-ImageTestSuite pour tester avec plusieurs GIFs encodés différemment.

    Installation :
    1. Dans Lazarus, allez dans le menu "Paquet" et sélectionnez "Ouvrir un fichier de paquet (".lpk") ;
    2. Sélectionnez gifviewer_pkg.lpk du dossier Package ;
    3. Cliquez sur le bouton "Compiler" ;
    4. Cliquez sur le bouton "Utiliser" puis "Installer".


    Le composant TGIFViewer sera installé dans la section Beanz Extra.

    Note :
    L'application de démonstration GifView du dossier Demos ne nécessite pas l'installation du composant dans l'EDI pour fonctionner.

    Licence : MPL

    Téléchargement à partir de DVP

    Que pensez-vous de ce composant ?
    Quels outils graphiques souhaiteriez-vous voir développés avec Lazarus ?
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 127
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Bonjour à tous

    Suite à notre discussion, je vous présente le composant TGIFViewer en version 1.0
    Houla, je te trouve bien précipité, là :

    Nom : ballerouge_1er_tour.png
Affichages : 872
Taille : 404 octets Nom : ballerouge_toursuivant.png
Affichages : 803
Taille : 406 octets balle rouge
    1re boucle boucles suivantes
    Nom : 38732719.png
Affichages : 813
Taille : 244,6 Ko 38732719
    Nom : 48487099.png
Affichages : 878
Taille : 54,4 Ko 48487099
    Nom : rotating_earth_2e_tour.png
Affichages : 1811
Taille : 17,3 Ko rotating_earth
    Nom : 769l.png
Affichages : 831
Taille : 51,3 Ko 769l
    Nom : smartfullcolour.png
Affichages : 726
Taille : 7,4 Ko smartfullcolour triangle vert aléatoire
    J'ai arrêté là, il est tard...

  3. #3
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Houla, je te trouve bien précipité, là :
    J'ai arrêté là, il est tard...
    Effectivement je viens de tester sous Linux il y a un problème avec la transparence.

    Précipité ? NON ! même sous Mac TGIFViewer fonctionne nickel. Je vais essayer de voir ce que je peux modifier. Mais ça sent pas bon du côté du TBitmap avec Linux. C'est vraiment aléatoire comme comportement.
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  4. #4
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Vraiment chelou comme bug

    Chargement de la girl nickel. Je visualise l'animation image par image pas de soucis. Arrivé à la 16ème image, je redescends et là paf .

    Le problème se situe avec l'utilisation de TBitmap.MaskHandle (voir la fonction TFastBitmap.BuildBitmap) si tu commentes la ligne "Temp.MaskHandle" toutes les images que tu as postées ci-dessus fonctionnent. Par contre Pen-Gif, le singe, la WikiBall sont en vrac.
    Le plus étrange, c'est que la transparence est bien prise en charge pour la première image de chaque gif mais pas les suivantes (c'est suivant les gif : avec girl, l'animation jouée, la première fois est bonne, mais pas la seconde ). Ce bug ne vient pas de mon code. Sinon si quelqu'un a la solution, on est preneur.

    Pour info, j'ai même forcé la couleur alpha à 255 dans "TFastBitmap.PutImage", même problème. En remplaçant "StretchDraw" par "Draw" dans TGifViewer.Paint, l'incohérence de la transparence est encore plus flagrante . A part utiliser mon projet, vu que je travaille avec les bitmaps différemment et où je n'ai pas ce soucis je ne vois pas comment faire. Ou sinon la solution serait comme dans GifAnim : passer par TLazIntfImage avant de passer les données au TBitmap.

    Bref, c'est vraiment frustrant pour le coup
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Et enfin voilà le test sous Linux :

    [vidéo supprimée]

    C'est quand même fou que d'être obligé de passer par TLazIntfImg sous Linux pour que la transparence soit gérée correctement.

    PS : Les sources ont été mises à jour. Tout roule dans les trois mondes
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  6. #6
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Test sous Windows 10:


    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  7. #7
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 127
    Par défaut
    Salut,

    et bravo !
    Bravo pour avoir trouvé le coup du TLazIntfImage, et bravo également pour tout le reste.

    Hélas, il y a encore deux-trois bricoles et ça va être comme l'ascension du Mont-Blanc, les derniers mètres seront les plus difficiles...

    Je me suis concentré uniquement sur le dossier des good89 (il y a sans doute des petites différences de contenu avec le tien, pour le moment on s'en moque), j'ai examiné 54 fichiers, et il y a des soucis de transparence avec balle :
    Nom : balle_img1.png
Affichages : 656
Taille : 1,5 Ko Nom : balle_zoomée.png
Affichages : 849
Taille : 795 octets zoomé à 800 %

    et Animaux-0 et son problème de barre verticale présente ou absente à gauche dans le trou supérieur du B, zoomé à 800 % aussi : à gauche l'image 1, à droite l'image 0 :
    Nom : animaux_zoom800.png
Affichages : 901
Taille : 4,6 Ko

    Ce problème disparaît en affectant clWhite à la couleur transparente : cela ne devrait-il pas être fait automagiquement ?

    Ensuite un souci avec "adapter dimension" qui ne fonctionne pas comme il faudrait :
    • pour les trop grandes images il faut le cocher sinon on en perd mais regarder une petite image ensuite ça va l'agrandir (avec effet de pixellisation) et il faut donc décocher.
    • pour les petites images il faut être décoché mais examiner ensuite des grandes images les tronque : il faut alors cocher.

    Pour certaines images c'est évident qu'elles sont tronquées :

    Nom : bell.png
Affichages : 920
Taille : 46,0 Ko bell non coché
    donc on coche,

    Nom : sun02_adap_coché.png
Affichages : 790
Taille : 130,7 Ko SUN02 coché

    pour d'autres ça n'est pas visible du tout (le feu d'artifice 38732719) et on ne pensera pas à jouer avec la case à cocher.


    Bon dimanche, ne passe pas la journée là-dessus.

  8. #8
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut,

    et bravo !
    Bravo pour avoir trouvé le coup du TLazIntfImage, et bravo également pour tout le reste.

    Hélas, il y a encore deux-trois bricoles et ça va être comme l'ascension du Mont-Blanc, les derniers mètres seront les plus difficiles...

    Je me suis concentré uniquement sur le dossier des good89 (il y a sans doute des petites différences de contenu avec le tien, pour le moment on s'en moque), j'ai examiné 54 fichiers, et il y a des soucis de transparence avec balle :
    zoomé à 800 %

    et Animaux-0 et son problème de barre verticale présente ou absente à gauche dans le trou supérieur du B, zoomé à 800 % aussi : à gauche l'image 1, à droite l'image 0 :
    Ca je n'y peux rein les images sont comme ça

    Citation Envoyé par Jipété Voir le message
    Ce problème disparaît en affectant clWhite à la couleur transparente : cela ne devrait-il pas être fait automagiquement ?
    Non je ne peux pas le savoir car gif sont marqués comme étant des gifs transparent

    Citation Envoyé par Jipété Voir le message
    Ensuite un souci avec "adapter dimension" qui ne fonctionne pas comme il faudrait :
    • pour les trop grandes images il faut le cocher sinon on en perd mais regarder une petite image ensuite ça va l'agrandir (avec effet de pixellisation) et il faut donc décocher.
    • pour les petites images il faut être décoché mais examiner ensuite des grandes images les tronque : il faut alors cocher.

    Pour
    bell non coché
    donc on coche,
    SUN02 coché

    pour d'autres ça n'est pas visible du tout (le feu d'artifice 38732719) et on ne pensera pas à jouer avec la case à cocher.

    Bon dimanche, ne passe pas la journée là-dessus.
    Ok merci je vais regardé, car j'ai modifié les formules. C'est 3x rien ça juste un petit réajustement à faire

    Bon dimanche

    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  9. #9
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    En passant merci Gilles pour la mise en page et la mise en avant.

    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  10. #10
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 127
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Non je ne peux pas le savoir car les gif sont marqués comme étant des gifs transparent


    Voilà ce que je trouve dans le fichier gif89a.txt, concernant le Graphic Control Extension ligne 1218 et suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      4  |               |       Transparent Color Index       Byte
         +---------------+
         +---------------+
      0  |               |       Block Terminator              Byte
         +---------------+
    
          <Packed Fields>  =     Reserved                      3 Bits
                                 Disposal Method               3 Bits
                                 User Input Flag               1 Bit
                                 Transparent Color Flag        1 Bit
    Cela ne suffirait-il pas à notre bonheur ?



    Pendant qu'on y est, ça concerne l'IHM mais je le mets ici quand même :

    j'ai testé (va savoir pourquoi) le message d'erreur de FormDropFiles, et ça donne ça :
    Nom : test_messagedlg.png
Affichages : 682
Taille : 16,7 Ko

    Tu vois écrit "Ok", toi ? Et "Abandonner" ? Moi pas.

    Je suggère ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          MessageDlg('Erreur Inconnue : ' +
          //  #13 + #10 + 'Ok pour continuer' + #13 + #10 + 'Abandonner pour quitter l''application', mtError, [mbOK, mbAbort], 0);
            #13 + #10 + 'Valider pour continuer' + #13 + #10 + 'Annuler pour quitter l''application', mtError, [mbOK, mbCancel], 0);
          // TODO : if MessageDlg.Result = mbCancel then Application.Halt;
    J'ai mis un TODO et un pseudo-code car F1 sur MessageDlg m'envoie dans les choux, donc je ne sais pas détecter le clic sur le bouton...


    Et enfin, un mystère pour moi dans l'unité uFastBitmap :
    le compilateur n'est pas content : Warning: Local variable "ColorRGB24" does not seem to be initialized et ça concerne la ligne 5 (312 du code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TColor32.Create(Color: TColor);
    Var
      ColorRGB24 : TColorRGB24;
    Begin
      ColorRGB24.Create(Color); // là !
      Create(ColorRGB24);
    End;
    Alors je tente ça, comme je le ferais pour une TStringlist par ex. (sl := TStringlist.Create;) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TColor32.Create(Color: TColor);
    Var
      ColorRGB24 : TColorRGB24;
    Begin
    //  ColorRGB24.Create(Color);
      ColorRGB24 := TColorRGB24.Create(Color);
      Create(ColorRGB24);
    End;
    mais là ça ne compile plus du tout : Error: Incompatible types: got "untyped" expected "TColorRGB24" sur la ligne 6.
    Pourquoi ?

    Précisions :
    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
    Type
      { TColorRGB24 : Définition d'un pixel sur 24 bits au format RGB }
      TColorRGB24Type = packed array[0..2] of byte;
      TColorRGB24 = packed record
        { Creation de la couleur }
        procedure Create(R,G,B : Byte); Overload;
        procedure Create(Color:TColor); Overload;
     
        { Conversion vers un TColor }
        function ToColor : TColor;
     
        Case Integer of
         0 : (V:TColorRGB24Type);    // Acces via Tableau
         1 : (Red,Green,Blue: Byte); // Acces via Composantes
      end;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Procedure TColorRGB24.Create(Color : TColor);
    Var
      lr,lg,lb : Byte;
    Begin
      lr := Color;
      lg := Color shr 8;
      lb := Color shr 16;
      Create(lr,lg,lb);
    End;
    Merci les gourous,

  11. #11
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Le bug du stretch est corrigé et le github mise à jour

    Nom : 2018-06-24_104850.jpg
Affichages : 3916
Taille : 53,9 Ko
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  12. #12
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message


    Voilà ce que je trouve dans le fichier gif89a.txt, concernant le Graphic Control Extension ligne 1218 et suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      4  |               |       Transparent Color Index       Byte
         +---------------+
         +---------------+
      0  |               |       Block Terminator              Byte
         +---------------+
    
          <Packed Fields>  =     Reserved                      3 Bits
                                 Disposal Method               3 Bits
                                 User Input Flag               1 Bit
                                 Transparent Color Flag        1 Bit
    [/code]
    Cela ne suffirait-il pas à notre bonheur ?
    Malheureusement non, Transparent Color Flag indique si l'image est transparente ou pas. Si l'image est transparente on a un indice pour la couleur transparente. On a aussi un indice pour la couleur de fond. Souvent lorsque l'image est transparente les 2 indices sont identiques. Ensuite pour l'affichage tout dépend de comment est encodé le GIF prend le singe en exemple c'est nickel avec ou sans transparence. Le resultat diffère suivant Disposal Method

    Citation Envoyé par Jipété Voir le message
    Pendant qu'on y est, ça concerne l'IHM mais je le mets ici quand même :

    j'ai testé (va savoir pourquoi) le message d'erreur de FormDropFiles, et ça donne ça :

    Tu vois écrit "Ok", toi ? Et "Abandonner" ? Moi pas.

    Je suggère ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          MessageDlg('Erreur Inconnue : ' +
          //  #13 + #10 + 'Ok pour continuer' + #13 + #10 + 'Abandonner pour quitter l''application', mtError, [mbOK, mbAbort], 0);
            #13 + #10 + 'Valider pour continuer' + #13 + #10 + 'Annuler pour quitter l''application', mtError, [mbOK, mbCancel], 0);
          // TODO : if MessageDlg.Result = mbCancel then Application.Halt;
    [/code]
    J'ai mis un TODO et un pseudo-code car F1 sur MessageDlg m'envoie dans les choux, donc je ne sais pas détecter le clic sur le bouton...
    Ok c'est noté, mais petite question comment tu as fais pour lever cette exception car c'est quasiment impossible qu'elle apparaisse. Car la vérification de la signature du fichier court-circuite le processus.

    Citation Envoyé par Jipété Voir le message
    Et enfin, un mystère pour moi dans l'unité uFastBitmap :
    le compilateur n'est pas content : Warning: Local variable "ColorRGB24" does not seem to be initialized et ça concerne la ligne 5 (312 du code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TColor32.Create(Color: TColor);
    Var
      ColorRGB24 : TColorRGB24;
    Begin
      ColorRGB24.Create(Color); // là !
      Create(ColorRGB24);
    End;
    C'est normale elle n'est pas initialisé, elle l'ai via la procedure Create

    je vais rajouté pou empêcher l'affichage de ce message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {$push}
    {$warn 5057 off}
     ColorRGB24.Create(Color); 
    {$pop}
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {%H-}ColorRGB24.Create(Color);
    Citation Envoyé par Jipété Voir le message
    Alors je tente ça, comme je le ferais pour une TStringlist par ex. (sl := TStringlist.Create;) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TColor32.Create(Color: TColor);
    Var
      ColorRGB24 : TColorRGB24;
    Begin
    //  ColorRGB24.Create(Color);
      ColorRGB24 := TColorRGB24.Create(Color);
      Create(ColorRGB24);
    End;
    mais là ça ne compile plus du tout : Error: Incompatible types: got "untyped" expected "TColorRGB24" sur la ligne 6.
    Pourquoi ?

    Précisions :
    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
    Type
      { TColorRGB24 : Définition d'un pixel sur 24 bits au format RGB }
      TColorRGB24Type = packed array[0..2] of byte;
      TColorRGB24 = packed record
        { Creation de la couleur }
        procedure Create(R,G,B : Byte); Overload;
        procedure Create(Color:TColor); Overload;
     
        { Conversion vers un TColor }
        function ToColor : TColor;
     
        Case Integer of
         0 : (V:TColorRGB24Type);    // Acces via Tableau
         1 : (Red,Green,Blue: Byte); // Acces via Composantes
      end;
    L'erreur est normal sur ColorRGB24 := TColorRGB24.Create(Color); Create est une Procedure et non une fonction elle ne retourne pas de résultat

    Citation Envoyé par Jipété Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Procedure TColorRGB24.Create(Color : TColor);
    Var
      lr,lg,lb : Byte;
    Begin
      lr := Color;
      lg := Color shr 8;
      lb := Color shr 16;
      Create(lr,lg,lb);
    End;
    Ici le create est appliqué sur lui même SELF.Create(lr,lg,lb) à la place, j'aurais pu écrire 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
    Procedure TColorRGB24.Create(Color : TColor);
    Var
      lr,lg,lb : Byte;
    Begin
      lr := Color;
      lg := Color shr 8;
      lb := Color shr 16;
      With Self do
      begin
         Red := lr;
         Green := lg;
         Blue := lb;
      end;
    End;
    Pour la création de ce genre type, je ne sais pas pourquoi mais je préfère utiliser des procédures que des fonctions

    je préfère, comme ci-dessous. Sémantiquement ça me parait plus logique

    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
     
    Const 
     clRed24 : TColorRGB24= (Red:255;Green:0;Blue:0); // ou clRed24 : TColorRGB24= (v:(255,0,0));
    Var
     MaCouleur : TColorRGB24
     
    begin
      // Je préfère
      MaCouleur.Create(255,0,0) // couleur rouge
     
     //à MaCouleur := TColorRGB24.Create(255,0,0)
     
      // Car si on veux assigner une autre couleur on fait simplement
      MaCouleur := clRed24;
    end;
    c'est un choix personnel après tu peux très bien modifier les procédures Create en fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function TColorRGB24.Create(r,g,b):TColorRGB24;
    begin
      With Result do
      begin
         Red := r;
         Green := g;
         Blue := b;
      end;
    end;
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  13. #13
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Je viens de refaire une petite mise à jour. J'avais fais un truc stupide. Mauvais copier-coller d'un bout de code
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  14. #14
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 127
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Ok c'est noté, mais petite question comment tu as fais pour lever cette exception car c'est quasiment impossible qu'elle apparaisse. Car la vérification de la signature du fichier court-circuite le processus.
    Tout simple !
    J'ai copié/collé les deux lignes concernées à la fin de TMainFormCreate et hop !, la boîte de message s'est affichée,

    Citation Envoyé par BeanzMaster Voir le message
    c'est un choix personnel après tu peux très bien modifier les procédures Create en fonctions :
    Je ne modifie rien du tout tant qu'on n'en a pas parlé d'abord, et validé par toi ensuite, car sinon ça va générer deux codes différents avec joyeuse prise de tête à l'arrivée de chaque modif, comme par exemple ce qui suit, que j'ai testé et qui ne pose pas de problèmes (puisque j'utilise couramment cette construction et qu'il me semble que c'est recommandé) : pour détruire des objets d'une liste, faut partir d'en haut, donc
    dans uGifViewer ligne 750
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Procedure TGIFImageList.Clear;
    Var
      anItem: TGIFImageListItem;
      i:      Integer;
    Begin
      Inherited Clear;
      If Count > 0 Then
      Begin
    //jpt    For i := 0 To Count - 1 Do
        For i := Count - 1 Downto 0 Do
    et ligne 1860
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Procedure TGIFRenderCacheList.Clear;
    Var
      anItem: TGIFRenderCacheListItem;
      i:      Integer;
    Begin
      If Count > 0 Then
      Begin
    //jpt    For i := 0 To Count - 1 Do
        For i := Count - 1 DownTo 0 Do
    et dans uFastBitmap ligne 480
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TColor32List.Clear;
    Var
      anItem: TColor32Item;
      i : Integer;
    Begin
      inherited Clear;
      If Count > 0 then
      begin
    //jpt    For i := 0 to Count -1 do
        For i := Count -1 DownTo 0 do
    De ce que j'ai compris suite lectures sur SO et autres, si tu détruis en partant de zéro, les objets bien faits vont tout faire descendre d'un cran (pour ne pas avoir liste[0] vide), je te laisse imaginer le temps perdu pour rien, surtout avec les grandes listes.


    Citation Envoyé par BeanzMaster Voir le message
    L'erreur est normale sur ColorRGB24 := TColorRGB24.Create(Color); Create est une Procedure et non une fonction elle ne retourne pas de résultat
    Et quand c'est un constructor comme pour la TStringList, c'est quoi, alors ?

  15. #15
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 127
    Par défaut Besoin d'explication à propos de PutImage
    Yep !

    J'ai une question, mais d'abord le contexte :
    quand je regarde les petites lignes d'aide à propos de cette procédure, je lis, à peine récrit :
    Citation Envoyé par PutImage
    Copie (en utilisant Scanline) une image source "Src" depuis la position "SrcX,SrcY" et de dimensions "SrcWidth,SrcHeight" dans le TFastBitmap à la position "DstX,DstY en suivant le "Mode" TFastBitmapDrawMode :
    - dmSet : Copie brute de l'image
    - dmAlpha : Copie les pixels de l'image source en mixant les couleurs avec celles du TFastBitmap en fonction de leur valeur Alpha
    - dmAlphaCheck : Copie les pixels de l'image source seulement si le pixel n'est pas invisible. Les autres pixels sont copiés de la façon que le mode dmAlpha
    Note : les dimensions et les positions entre le TFastBitmap et l'image source sont automatiquement ajustées si besoin.
    Reprenons le 3e cas du "Mode" :
    - dmAlphaCheck : Copie les pixels de l'image source seulement si le pixel n'est pas invisible. Les autres pixels sont copiés de la façon que le mode dmAlpha

    Transformons ça en deux phrases (puisqu'il y a un point au milieu) :
    1- Copie les pixels de l'image source seulement si le pixel n'est pas invisible.

    Dit autrement (en enlevant les deux négations) :
    1- Copie les pixels de l'image source seulement si le pixel est visible.

    Ce qui revient à dire, pour la phrase 2 :
    2- Les autres pixels (les invisibles) sont copiés de la (même [?]) façon que le mode dmAlpha

    Question : c'est quoi un pixel invisible ? Ceux présents dans une partie de l'image non visible (recouverte par une autre fenêtre par ex.) ?

    Ce qui reviendrait à dire que s'il y avait un bouton avec TFastBitmap.SaveToFile et que la moitié de l'image en question ne soit pas visible, le fichier généré n'aurait pas toutes les données correctes ?

    Je ne comprends pas bien, merci pour le retour.

  16. #16
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Yep !

    J'ai une question, mais d'abord le contexte :
    quand je regarde les petites lignes d'aide à propos de cette procédure, je lis, à peine récrit :

    Reprenons le 3e cas du "Mode" :
    - dmAlphaCheck : Copie les pixels de l'image source seulement si le pixel n'est pas invisible. Les autres pixels sont copiés de la façon que le mode dmAlpha

    Transformons ça en deux phrases (puisqu'il y a un point au milieu) :
    1- Copie les pixels de l'image source seulement si le pixel n'est pas invisible.

    Dit autrement (en enlevant les deux négations) :
    1- Copie les pixels de l'image source seulement si le pixel est visible.

    Ce qui revient à dire, pour la phrase 2 :
    2- Les autres pixels (les invisibles) sont copiés de la (même [?]) façon que le mode dmAlpha

    Question : c'est quoi un pixel invisible ? Ceux présents dans une partie de l'image non visible (recouverte par une autre fenêtre par ex.) ?

    Ce qui reviendrait à dire que s'il y avait un bouton avec TFastBitmap.SaveToFile et que la moitié de l'image en question ne soit pas visible, le fichier généré n'aurait pas toutes les données correctes ?

    Je ne comprends pas bien, merci pour le retour.
    Invisible = 100% transparent = Composante Alpha = 0

    Cette phrase me convient bien : Copie les pixels de l'image source seulement si le pixel est visible (Alpha <> 0) je vais modifié le commentaire. Merci.

    A tellement vouloir essayé de bien expliqué j'embrouille le monde

    Comme le disais mon père
    "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre.
    Et il rajoute :
    Et donner des explications peut-être beaucoup plus difficile qu'il y parait
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  17. #17
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 127
    Par défaut
    Yep !

    Citation Envoyé par BeanzMaster Voir le message
    Cette erreur est normale si tu avais déjà installé le paquet.
    Quand j'ai vu arriver la 1re version et l'info comme quoi on n'était pas obligé d'installer le compo pour utiliser la démo, j'ai dit "chouette !" et en avant. D'où la surprise ce matin.
    Bon, c'est anecdotique.


    Citation Envoyé par BeanzMaster Voir le message
    Tu n'as pas fait attention mais l'état de la checkbox "Adapter" change.
    Exact, désolé.


    Citation Envoyé par BeanzMaster Voir le message
    Idem chez moi sous Linux en mode débogage l'application ne se relance pas automatique.
    Ça on le savait.

    Citation Envoyé par BeanzMaster Voir le message
    C'est bon si je lance le programme manuellement.
    Pas chez moi : je lance le prog manuellement, il affiche "fr", je change en "en" il se ferme et se relance en "fr", et je viens de re-tester à l'instant, c'est confirmé.





    Citation Envoyé par BeanzMaster Voir le message
    Invisible = 100% transparent = Composante Alpha = 0

    Cette phrase me convient bien : Copie les pixels de l'image source seulement si le pixel est visible (Alpha <> 0) je vais modifié le commentaire. Merci.
    Désolé mais je ne comprends absolument rien, au contraire...

    Tu n'as répondu qu'à moitié à ma question demandant ce qu'est un pixel invisible : oui, ça peut être un pixel présent dans le dispositif d'affichage avec sa composante alpha à 0, mais ça peut aussi être un pixel dont alpha est <> de 0 donc visible, mais masqué par une autre fenêtre.
    En résumé, masqué ou alpha à 0 --> pixel invisible mais pour le code ce n'est pas pareil.
    Pour prendre une image, un fantôme dans une pièce est invisible, et quelqu'un en chair et en os caché sous le lit est également invisible. Tu vois le truc ? Ce mot ayant deux sens, il ne faudrait plus l'utiliser : je propose pixel caché (derrière une autre fenêtre) et pixel transparent.
    Ce qui fait qu'on pourra avoir des pixels transparents et cachés, ce qui sera quand même mieux que des pixels invisibles et invisibles, nan ?

    Copie les pixels de l'image source seulement si le pixel n'est pas invisible... -->
    Copie le(s) pixel(s) de l'image source seulement s'il(s) est(sont) visible(s), sinon utilise le mode dmAlpha.
    C'est ça ?
    Si oui, les pixels avec alpha à 0 vont être copiés en mixant leur byte alpha avec le byte alpha du TFastBitmap et donc risquer de les faire apparaître, et les autres pixels avec alpha <> 0 vont être copiés comment ? Sans tenir compte de leur alpha ?

    Tu vois bien que rien n'est clair.

    D'un autre côté, je n'ai peut-être pas besoin de comprendre ça, mais
    1- je n'ai pas trouvé cette info dans les specs GIF ;
    2- si j'utilise ton compo et qu'un jour il faut remettre les mains dans le cambouis, j'ai besoin de tout comprendre.

    Car c'est suffisamment le bazar comme ça, avec des compos qui ne suivent pas les specs.

    Pour la question de l'autre sujet, va me falloir un peu de temps...

  18. #18
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Bonjour à tous, je vous notifie que les sources de TGifViewer ont été mises à jour.

    Des modifications mineurs qui concernaient des fuites de mémoire ont été corrigées.

    Vous pouvez télécharger ce composant dans la section de téléchargement de Lazarus
    ou sur Github

    TGifViewer est également installable directement depuis Online Package Manager (Gestionnaire de paquets en ligne) de Lazarus

    Nom : 2020-02-08_133158.png
Affichages : 197
Taille : 22,3 Ko

    N'hésitez pas à évaluer ce composant sur github et dans OPM

    Merci d'avance

    Cordialement

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  19. #19
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 127
    Par défaut
    Ola !

    Bug : à la première ouverture du projet Démo, bim :
    Nom : paquet_manquant.png
Affichages : 372
Taille : 14,7 Ko

    Bon, j'ai supprimé la dépendance dans l'inspecteur de projet et ça le fait, mais ça surprend,

    Bug : après avoir ouvert une trop grande image (qui s'adapte automatiquement, parfait ! ), ouvrir une petite image qui n'a donc pas besoin d'adaptation l'adapte quand même,
    Nom : balle_agrandie.png
Affichages : 343
Taille : 74,5 Ko

    Pour moi, un fonctionnement normal et automatique serait le mode "Les plus grandes", en fait.
    Mais il manque toujours cette information comme quoi l'image trop grande a été stretchée, ou une image normale est affichée en 1/1 ; du coup ça m'oblige à contrôler chaque image avec le viewer de Linux (qui m'affiche les tailles) et ça n'est pas pratique du tout.

    Tu penseras à rajouter un "s" aux 2 items de la combo d'adaptation ? Merci,

    Et tu nous a gardé cet affreux "Languages" en haut à droite...

    Bug : et à propos de langages, ça ne fonctionne toujours pas chez moi : hors EDI je choisis "en", le binaire se ferme et se relance, il est en "fr"...
    Tu t'embrouilles avec ce truc qui n'a rien à faire avec les gif, tu devrais le virer.

  20. #20
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut
    Citation Envoyé par Jipété Voir le message
    Ola !

    Bug : à la première ouverture du projet Démo, bim :

    Bon, j'ai supprimé la dépendance dans l'inspecteur de projet et ça le fait, mais ça surprend,
    Cette erreur est normale si tu avais déjà installer le paquet. Juste une re-compilation du paquet suffit. C'est un oubli de ma part ici, je l'avais rajouter pour régénérer les fichier PO pour la traduction. Ici les objets sont créé dynamiquement donc pas besoin d'avoir la paquet dans les dépendances.

    Citation Envoyé par Jipété Voir le message
    Bug : après avoir ouvert une trop grande image (qui s'adapte automatiquement, parfait ! ), ouvrir une petite image qui n'a donc pas besoin d'adaptation l'adapte quand même,

    Pour moi, un fonctionnement normal et automatique serait le mode "Les plus grandes", en fait.

    Ce n'est pas un bug, le "Automatique" comme terme est mal choisi. J'ai remplacé la propriété "smAutomatic" par "smStretchAll" .
    Citation Envoyé par Jipété Voir le message
    Mais il manque toujours cette information comme quoi l'image trop grande a été stretchée, ou une image normale est affichée en 1/1 ; du coup ça m'oblige à contrôler chaque image avec le viewer de Linux (qui m'affiche les tailles) et ça n'est pas pratique du tout.
    Tu n'as pas fait attention mais l'état de la checkbox "Adapter" change. Après comme je te l'ai dis c'est une démo pas un outils final. Fais les changement comme tu le souhaites.

    Citation Envoyé par Jipété Voir le message
    Tu penseras à rajouter un "s" aux 2 items de la combo d'adaptation ? Merci,

    Et tu nous a gardé cet affreux "Languages" en haut à droite...
    Merci j'ai corrigé. Merci.

    Citation Envoyé par Jipété Voir le message
    Bug : et à propos de langages, ça ne fonctionne toujours pas chez moi : hors EDI je choisis "en", le binaire se ferme et se relance, il est en "fr"...
    Tu t'embrouilles avec ce truc qui n'a rien à faire avec les gif, tu devrais le virer.
    Idem chez moi sous Linux en mode débogage l'application ne se relance pas automatique. C'est bon si je lance le pogramme manuellement.
    La traduction pour en anglais reste une bonne chose et l'appliquer avec le composant de Gilles simplifie grandement la vie.
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

Discussions similaires

  1. Réponses: 18
    Dernier message: 03/06/2010, 10h09
  2. Réponses: 18
    Dernier message: 03/06/2010, 10h09
  3. Réponses: 18
    Dernier message: 03/06/2010, 10h09
  4. [Tests] Annonces de composants, extensions, frameworks etc.
    Par Community Management dans le forum Bibliothèques et frameworks
    Réponses: 12
    Dernier message: 06/01/2009, 13h33
  5. [Joomla!] Composant Joomla pour annonces de ventes
    Par young077 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 07/08/2007, 02h32

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