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

  1. #61
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonjour,

    scénario du petit matin :
    • je dl la nouvelle archive en passant par le lien du post 1 ;
    • je la décompresse et j'ouvre la démo avec Lazarus ;
    • je modifie la couleur du panel pour l'avoir en blanc ;
    • je compile ;
    • je vais chercher le binaire généré et je l'exécute : il s'affiche avec "fr" en haut à droite, je change en "en", le binaire se ferme, se relance en "en" mais ça n'est toujours pas traduit sauf la combo du bas et le label en haut à droite (pour le label lire + bas) :

    Nom : en.png
Affichages : 198
Taille : 23,0 Ko

    je bascule en "fr" et si la combo bascule, le label reste avec cet affreux "language" :
    Nom : fr.png
Affichages : 179
Taille : 8,9 Ko

    Tu vas me dire que ça c'est l'ihm, oui, mais je ne sais pas où et comment le modifier car ça doit dépendre de ton histoire de traduction, qui ne fonctionne pas sauf pour la combo.
    Et s'il faut suivre le tuto de Gilles pour avoir un système de traduction opérationnel, c'est lourd : 3 lignes d'explication dans un readme_translate seraient les bienvenues.
    D'autant plus que si quelqu'un a besoin de basculer en anglais, il va se retrouver mal devant un tuto tout en français,

    Quant à cette histoire de 259/260, d'accord, sauf que là aussi il y a des soucis de traduc' :
    Nom : erreurs_en.png
Affichages : 177
Taille : 12,8 Ko

    + le fait qu'in english "an entry invalid" serait plutôt "an invalid entry".
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #62
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut,
    Citation Envoyé par Jipété Voir le message
    Bonjour,

    scénario du petit matin :
    • je dl la nouvelle archive en passant par le lien du post 1 ;
    • je la décompresse et j'ouvre la démo avec Lazarus ;
    • je modifie la couleur du panel pour l'avoir en blanc ;
    • je compile ;
    • je vais chercher le binaire généré et je l'exécute : il s'affiche avec "fr" en haut à droite, je change en "en", le binaire se ferme, se relance en "en" mais ça n'est toujours pas traduit sauf la combo du bas et le label en haut à droite (pour le label lire + bas) :


    je bascule en "fr" et si la combo bascule, le label reste avec cet affreux "language" :
    Ok, bon alors, peux tu ouvrir les fichiers PO (ce sont de simple fichier texte) "en" et voir si les traductions sont présentes. Si ce n'ai pas le cas écrases tout ces fichiers par ceux présent dans l'archive et relance le binaire (sans passer par Lazarus) pour tester.


    Citation Envoyé par Jipété Voir le message
    Tu vas me dire que ça c'est l'ihm, oui, mais je ne sais pas où et comment le modifier car ça doit dépendre de ton histoire de traduction, qui ne fonctionne pas sauf pour la combo.
    Et s'il faut suivre le tuto de Gilles pour avoir un système de traduction opérationnel, c'est lourd : 3 lignes d'explication dans un readme_translate seraient les bienvenues.
    D'autant plus que si quelqu'un a besoin de basculer en anglais, il va se retrouver mal devant un tuto tout en français,
    Pour le readme c'est une bonne idée. Après pour le tuto français ils ont qu'à faire comme nous ; taper sur "google translate" aussi fort qu'ils le peuvent.

    Citation Envoyé par Jipété Voir le message
    Quant à cette histoire de 259/260, d'accord, sauf que là aussi il y a des soucis de traduc' :
    ]

    + le fait qu'in english "an entry invalid" serait plutôt "an invalid entry".
    Ici La traduction a fonctionné ? c'est juste la traduction de l'IHM qui foire ? (EDIT : Ben oui je suis c... j'ai la capture sous les yeux !!!)

    Pour ce qui est du texte j'ai laissé faire "POEdit". J'avais bien remarqué que tout n'était pas très juste. Mais ce n'ai pas la priorité pour le moment

    Merci

    EDIT : En fait il semblerai que chez toi c'est le fichier gifview.en.po qui est réécrit. Alors que chez moi c'était GifViewerStrConsts.en.po. Dans tous les cas avec Lazarus 1.8.4 je n'ai pas eu ce big pour le moment sous Linux. Par contre sous Mac avec la version 1.8.2 idem les fichiers en.po sont modifiés
    • "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

  3. #63
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Alors la le truc chelou je viens d'avoir eu mes fichiers GifViewerStrConsts.xx.po regénérés sous WINDOWS AVEC LAZARUS 1.8.5 j'ai juste fais à un moment un debug en pas à pas
    Pour éviter ce bug j'ai désactivé l'option i18n dans le projet. Ca à l'air d'avoir solutionner le problème et n'empêche pas l'application de pouvoir "s'auto-traduire".

    En plus, petite mise à jour j'ai ajouté une nouvelle propriété AutoRemoveInvalidFrame si définis à TRUE les images corrompues sont automatiquement supprimé de la liste des images pour l'animation

    Nom : 2018-07-04_153228.jpg
Affichages : 202
Taille : 45,1 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

  4. #64
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    En plus, petite mise à jour j'ai ajouté une nouvelle propriété AutoRemoveInvalidFrame si définie à TRUE les images corrompues sont automatiquement supprimées de la liste des images pour l'animation.



    Citation Envoyé par BeanzMaster Voir le message
    Ok, bon alors, peux-tu ouvrir les fichiers PO (ce sont de simples fichiers texte) "en" et voir si les traductions sont présentes.
    Fichiers ouverts mais ça se voyait déjà sur ma copie d'écran d'hier que leurs tailles étaient ridicules et que donc ces fichiers étaient quasiment vides. Je parle là des gifview.xx.po, car les GifViewerStrConsts.xx.po sont identiques entre ce que j'ai et ce qu'il y a dans l'archive.

    Citation Envoyé par BeanzMaster Voir le message
    Si ce n'est pas le cas écrase tous ces fichiers par ceux présents dans l'archive et relance le binaire (sans passer par Lazarus) pour tester.
    Donc acte et là c'est enfin bon.
    Ensuite j'ai recompilé en désactivant i18n, du coup ça n'a pas touché les gifview.xx.po, , mais comme j'ai changé "Language" en "Langage" dans l'IHM, ben quand je bascule en "en" ça m'affiche "Langage", pas top.
    Y a surement un truc à modifier pour ça et je ne sais pas où et mon problème de pompe n'est pas solutionné non plus (peut-être demain...)

    Citation Envoyé par BeanzMaster Voir le message
    Pour ce qui est du texte j'ai laissé faire "POEdit". J'avais bien remarqué que tout n'était pas très juste. Mais ce n'est pas la priorité pour le moment.
    Ben c'est pas glorieux... Parce que traduire "Glissez et déposez un fichier pour l'ouvrir" par "Drag and Drop for open a file", les anglophones vont se bidonner.

    Et si en plus il y a des problèmes différents selon que tu es en 1.8.2, .4 ou .5, ben on n'est pas rendu...
    Faudrait attendre que tout ça soit stabilisé, àmha.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #65
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message


    Fichiers ouverts mais ça se voyait déjà sur ma copie d'écran d'hier que leurs tailles étaient ridicules et que donc ces fichiers étaient quasiment vides. Je parle là des gifview.xx.po, car les GifViewerStrConsts.xx.po sont identiques entre ce que j'ai et ce qu'il y a dans l'archive.

    Donc acte et là c'est enfin bon.
    Ensuite j'ai recompilé en désactivant i18n, du coup ça n'a pas touché les gifview.xx.po, , mais comme j'ai changé "Language" en "Langage" dans l'IHM, ben quand je bascule en "en" ça m'affiche "Langage", pas top.
    Y a surement un truc à modifier pour ça et je ne sais pas où et mon problème de pompe n'est pas solutionné non plus (peut-être demain...)
    Cool, bonne nouvelle Le truc si tu changes un énoncé dans l'IHM il faut "recompiler" les fichiers PO. Sinon l'astuce c'est d'éditer directement les fichiers po relatifs en l'occurence ici gifview.fr.po et gifview.en.po et hop

    Citation Envoyé par Jipété Voir le message
    Ben c'est pas glorieux... Parce que traduire "Glissez et déposez un fichier pour l'ouvrir" par "Drag and Drop for open a file", les anglophones vont se bidonner.
    Oui bon maintenant que le problème est résolu je vais pouvoir me concentrer sur cette traduction et essayé de faire quelques chose de plus juste.

    Citation Envoyé par Jipété Voir le message
    Et si en plus il y a des problèmes différents selon que tu es en 1.8.2, .4 ou .5, ben on n'est pas rendu...
    Faudrait attendre que tout ça soit stabilisé, àmha.
    Je ne sais pas si c'est vraiment un bug, ou si l'option i18n ne sert en fait qu'a générer les POs. Dans tous les cas à mon sens tel quel ici les fichiers PO ne devraient pas être remodifié. Je vais allez faire un tour sur le bugtracker histoire de voir si cela à déja été rapporté. Si non je suis entrain de préparer toute un liste à soumettre

    Merci encore pour tes tests, ça à vraiment fait avancé
    • "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. #66
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Sinon l'astuce c'est d'éditer directement les fichiers po relatifs en l'occurrence ici gifview.fr.po et gifview.en.po et hop

    Dans tous les cas à mon sens tel quel ici les fichiers PO ne devraient pas être remodifiés.
    Tu vois pas comme une opposition, là ?

    Bah, de toute façon, JE N'Y COMPRENDS RIEN !

    Dans gifview.en.po c'est plein de strings en français,
    des fois msgid et msgstr sont remplis, des fois juste msgid
    des fois msgid et msgstr sont remplis avec la même valeur
    des fois msgid contient ---- (ça se traduit, des traits ?), et msgstr contient ""
    bref, pour moi c'est le bazar ce fichier.

    J'ai modifié les lignes 72 et 73 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    msgid "Langage :"
    msgstr "Language:"
    advienne que pourra : ça fonctionne, mais est-ce que ça résistera à une compilation ?
    Citation Envoyé par BeanzMaster Voir le message
    si tu changes un énoncé dans l'IHM il faut "recompiler" les fichiers PO
    Comment ? On a vu que chez moi les .po générés n'étaient pas bons...

    Et je n'ai pas compris, du coup, à quoi servait le gifview.fr.po qui a l'air de faire à moitié doublon avec le ".en" et où je lui ai modifié la ligne 61 : msgid "Langage :".
    Ces trucs en double c'est source d'erreur, ça.

    Et même remarque pour les fichiers GifViewerStrConsts.xx.po.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #67
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Tu vois pas comme une opposition, là ?
    Dans tous les cas à mon sens tel quel ici les fichiers PO ne devraient pas être remodifié
    Ce que je voulais dire c'est modifié par le compilateur.

    Citation Envoyé par Jipété Voir le message
    Bah, de toute façon, JE N'Y COMPRENDS RIEN !

    Dans gifview.en.po c'est plein de strings en français,
    des fois msgid et msgstr sont remplis, des fois juste msgid
    msgid correspond à la chaine principal (en français ici)
    msgstr correspond à la traduction

    Citation Envoyé par Jipété Voir le message
    des fois msgid et msgstr sont remplis avec la même valeur
    oui comme par exemple
    #: tmainform.btnstopanimation.caption
    msgid "Stop"
    msgstr "Stop"
    La traduction est simplement la même. J'aurais pu ne rien mettre dans le msgstr (pour info c'est POEdit qui rempli en faisant des propositions de traduction quand cela est possible)

    Citation Envoyé par Jipété Voir le message
    des fois msgid contient ---- (ça se traduit, des traits ?), et msgstr contient ""
    bref, pour moi c'est le bazar ce fichier.
    Non bien sûr mais vu que toutes les chaines de caractères passent par le traducteur ces lignes doivent être présente. Et vu que msgstr est vide elles restent inchangées

    Citation Envoyé par Jipété Voir le message
    J'ai modifié les lignes 72 et 73 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    msgid "Langage :"
    msgstr "Language:"
    advienne que pourra : ça fonctionne, mais est-ce que ça résistera à une compilation ?
    Normalement si l'option i18n est désactivé cela devrait être bon. Le fichier PO ne devrait pas être modifié.

    Citation Envoyé par Jipété Voir le message
    Comment ? On a vu que chez moi les .po générés n'étaient pas bons...
    Les fichiers po, avant que tu executes l'application pour la première fois depuis l'EDI n'existent pas.
    Lazarus les génère par rapport à ton IHM que tu as défini dans l'EDI. Sinon il faudrait créer les fichiers PO à la main.
    Lorsque les fichiers PO existent et que tu change un libellé, celui-ci n'ai pas enregistré en même temps. Pour ce faire il faut cocher les options de la section i18n des options du projet afin que les fichiers PO soit regénérer soit lorsque tu enregistres ta "Form" soit à la compilation du projet.

    Nom : 2018-07-05_021630.jpg
Affichages : 190
Taille : 31,3 Ko

    Citation Envoyé par Jipété Voir le message
    Et je n'ai pas compris, du coup, à quoi servait le gifview.fr.po qui a l'air de faire à moitié doublon avec le ".en" et où je lui ai modifié la ligne 61 : msgid "Langage :".
    Ces trucs en double c'est source d'erreur, ça.

    Et même remarque pour les fichiers GifViewerStrConsts.xx.po.
    Quand tu passes de l'anglais au français il faut lui fournir ce fichier sinon l'interface resterai en anglais. et vice et versa. Il faut donc 1 fichier PO par langue.

    Après tu peux aisément copier le projet effacer tout ce qui est relatif à la traduction, tu en n'as pas vraiment besoin. Je l'ai rajouté à la demande d'un message de retour sur le forum anglais. Ils trouvaient GifViewer trop "Frenchie"
    Il te suffira juste de remplacer les unité uGifViewer et uFastBitmap en cas de mise à jour.
    • "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

  8. #68
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    J'ai remarqué un bug d'affichage avec Animaux-0.gif sur la dernière image de l'animation du coup

    j'ai corrigé le problème et ai fait une nouvelle mise à jour des sources sur github
    • "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. #69
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Salutations,
    Citation Envoyé par BeanzMaster Voir le message
    J'ai remarqué un bug d'affichage avec Animaux-0.gif sur la dernière image de l'animation du coup
    Ah oui, l'outil en C l'avait vu aussi.

    Le souci, c'est que cet outil voit également une erreur dans welcome2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    block_type: 33
    global_color_table_size: 256
    block_type: 33
    global_color_table_size: 256
    block_type: 44
    global_color_table_size: 256
    block_type: 33
    global_color_table_size: 256
    block_type: 44
    global_color_table_size: 256
    block_type: 8
    Bailing on unrecognized block type 08
    et dans spinner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    block_type: 33
    global_color_table_size: 64
    block_type: 33
    global_color_table_size: 64
    block_type: 44
    global_color_table_size: 64
    block_type: 33
    global_color_table_size: 64
    block_type: 44
    Malformed GIF (early stop code)
    du peu que j'ai testé...

    Bon, pour la traduc', j'ai renommé le dossier "Languages" en autre chose, rendu invisibles le label et le combo, le problème est réglé, en ce qui me concerne.

    Sinon, il reste un dernier bug avec la taille des images, que je n'arrive pas à cerner car même en forçant la combo à "les plus grandes", si je commence avec une petite image elle est agrandie,
    Nom : logo_au_firstrun.png
Affichages : 225
Taille : 85,6 Ko

    Mais j'ai une pompe qui m'attend...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #70
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut
    Citation Envoyé par Jipété Voir le message
    Salutations,


    Ah oui, l'outil en C l'avait vu aussi.

    Le souci, c'est que cet outil voit également une erreur dans welcome2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    block_type: 33
    global_color_table_size: 256
    block_type: 33
    global_color_table_size: 256
    block_type: 44
    global_color_table_size: 256
    block_type: 33
    global_color_table_size: 256
    block_type: 44
    global_color_table_size: 256
    block_type: 8
    Bailing on unrecognized block type 08
    et dans spinner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    block_type: 33
    global_color_table_size: 64
    block_type: 33
    global_color_table_size: 64
    block_type: 44
    global_color_table_size: 64
    block_type: 33
    global_color_table_size: 64
    block_type: 44
    Malformed GIF (early stop code)
    du peu que j'ai testé...
    Dans welcome2 je trouve également des blocs de type inconnu. On pourrait presque le passer dans les "bad"

    le spinner lequel ? Loading.gif je suppose ou loading2, loading3 ? pour lui je ne detecte rien d'anormal. Aurais tu les sources de ton outil que je puisse jeter un oeil je suis intrigué.

    Citation Envoyé par Jipété Voir le message
    Sinon, il reste un dernier bug avec la taille des images, que je n'arrive pas à cerner car même en forçant la combo à "les plus grandes", si je commence avec une petite image elle est agrandie,
    Fait un "Nettoyer et compiler" ou sinon c'est que utilise une ancienne version de l'unité uGifViewer car j'ai corrigé ce probleme. Dans TGifViewer.Paint tu devrais avoir ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      if FAutoStretchMode <> smManual then
      begin
        Case FAutoStretchMode of
         smStretchAll : FStretch := True;
         smOnlyStretchBigger : if (PicWidth > ImgWidth) or (PicHeight > ImgHeight) then FStretch := True else FStretch := False;
         smOnlyStretchSmaller : if (PicWidth < ImgWidth) and (PicHeight < ImgHeight) then FStretch := True else FStretch := False;
        end;
        if Assigned(FOnStretchChanged) then FOnStretchChanged(Self,FStretch);
      End;
    Mais j'ai une pompe qui m'attend...[/QUOTE]

    Toujours cette pompe, prend un arrosoir, fait une petite balade dans ton jardin, au moins avec tu sera sur que l'arrosoir ne tombera pas en panne. Mais porte un chapeau faudrait pas que tu te prenne une insolation et que ce soit toi qui ne marche plus
    • "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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    le spinner lequel ?
    This one : Nom : spinner.gif
Affichages : 164
Taille : 7,4 Ko

    Citation Envoyé par BeanzMaster Voir le message
    Aurais-tu les sources de ton outil que je puisse jeter un oeil je suis intrigué.
    Le code de gif.c :
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    #include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>
     
    #include <string.h>
    #include <unistd.h>
     
    #define EXTENSION_INTRODUCER   0x21
    #define IMAGE_DESCRIPTOR       0x2C
    #define TRAILER                0x3B
     
    #define GRAPHIC_CONTROL        0xF9
    #define APPLICATION_EXTENSION  0xFF
    #define COMMENT_EXTENSION      0xFE
    #define PLAINTEXT_EXTENSION    0x01
     
    typedef struct
    {
      unsigned short width;
      unsigned short height;
      unsigned char fields;
      unsigned char background_color_index;
      unsigned char pixel_aspect_ratio;
    }
    screen_descriptor_t;
     
    typedef struct
    {
      unsigned char r;
      unsigned char g;
      unsigned char b;
    }
    rgb;
     
    typedef struct
    {
      unsigned short image_left_position;
      unsigned short image_top_position;
      unsigned short image_width;
      unsigned short image_height;
      unsigned char fields;
    }
    image_descriptor_t;
     
    typedef struct
    {
      unsigned char byte;
      int prev;
      int len;
    }
    dictionary_entry_t;
     
    typedef struct
    {
      unsigned char extension_code;
      unsigned char block_size;
    }
    extension_t;
     
    typedef struct
    {
      unsigned char fields;
      unsigned short delay_time;
      unsigned char transparent_color_index;
    }
    graphic_control_extension_t;
     
    typedef struct
    {
      unsigned char application_id[ 8 ];
      unsigned char version[ 3 ];
    }
    application_extension_t;
     
    typedef struct
    {
      unsigned short left;
      unsigned short top;
      unsigned short width;
      unsigned short height;
      unsigned char cell_width;
      unsigned char cell_height;
      unsigned char foreground_color;
      unsigned char background_color;
    }
    plaintext_extension_t;
     
    // ajout jpt
    int frame_count = 0;
     
    /* int uncompress( int code_length, */
    void uncompress( int code_length,
                    const unsigned char *input,
                    int input_length,
                    unsigned char *out )
    {
    //  int maxbits;
      int i, bit;
      int code, prev = -1;
      dictionary_entry_t *dictionary;
      int dictionary_ind;
      unsigned int mask = 0x01;
      int reset_code_length;
      int clear_code; // This varies depending on code_length
      int stop_code;  // one more than clear code
      int match_len;
     
      clear_code = 1 << ( code_length );
      stop_code = clear_code + 1;
      // To handle clear codes
      reset_code_length = code_length;
     
      // Create a dictionary large enough to hold "code_length" entries.
      // Once the dictionary overflows, code_length increases
      dictionary = ( dictionary_entry_t * ) 
        malloc( sizeof( dictionary_entry_t ) * ( 1 << ( code_length + 1 ) ) );
     
      // Initialize the first 2^code_len entries of the dictionary with their
      // indices.  The rest of the entries will be built up dynamically.
     
      // Technically, it shouldn't be necessary to initialize the
      // dictionary.  The spec says that the encoder "should output a
      // clear code as the first code in the image data stream".  It doesn't
      // say must, though...
      for ( dictionary_ind = 0; 
            dictionary_ind < ( 1 << code_length ); 
            dictionary_ind++ )
      {
        dictionary[ dictionary_ind ].byte = dictionary_ind;
        // XXX this only works because prev is a 32-bit int (> 12 bits)
        dictionary[ dictionary_ind ].prev = -1;
        dictionary[ dictionary_ind ].len = 1;
      }
     
      // 2^code_len + 1 is the special "end" code; don't give it an entry here
      dictionary_ind++;
      dictionary_ind++;
     
      // TODO verify that the very last byte is clear_code + 1
      while ( input_length )
      {
        code = 0x0;
        // Always read one more bit than the code length
        for ( i = 0; i < ( code_length + 1 ); i++ )
        {
          // This is different than in the file read example; that 
          // was a call to "next_bit"
          bit = ( *input & mask ) ? 1 : 0;
          mask <<= 1;
     
          if ( mask == 0x100 )
          {
            mask = 0x01;
            input++;
            input_length--;
          }
     
          code = code | ( bit << i );
        }
     
        if ( code == clear_code )
        {
          code_length = reset_code_length;
          dictionary = ( dictionary_entry_t * ) realloc( dictionary,
            sizeof( dictionary_entry_t ) * ( 1 << ( code_length + 1 ) ) );
     
          for ( dictionary_ind = 0; 
                dictionary_ind < ( 1 << code_length ); 
                dictionary_ind++ )
          {
            dictionary[ dictionary_ind ].byte = dictionary_ind;
            // XXX this only works because prev is a 32-bit int (> 12 bits)
            dictionary[ dictionary_ind ].prev = -1;
            dictionary[ dictionary_ind ].len = 1;
          }
          dictionary_ind++;
          dictionary_ind++;
          prev = -1;
          continue;
        }
        else if ( code == stop_code )
        {
          if ( input_length > 1 )
          {
            fprintf( stderr, "Malformed GIF (early stop code)\n" );
            exit( 0 );
          }
          break;
        }
     
        // Update the dictionary with this character plus the _entry_
        // (character or string) that came before it
        if ( ( prev > -1 ) && ( code_length < 12 ) )
        {
          if ( code > dictionary_ind )
          {
            fprintf( stderr, "code = %.02x, but dictionary_ind = %.02x\n",
              code, dictionary_ind );
            exit( 0 );
          }
     
          // Special handling for KwKwK
          if ( code == dictionary_ind )
          {
            int ptr = prev;
     
            while ( dictionary[ ptr ].prev != -1 )
            {
              ptr = dictionary[ ptr ].prev;
            }
            dictionary[ dictionary_ind ].byte = dictionary[ ptr ].byte;
          }
          else
          {
            int ptr = code;
            while ( dictionary[ ptr ].prev != -1 )
            {
              ptr = dictionary[ ptr ].prev;
            }
            dictionary[ dictionary_ind ].byte = dictionary[ ptr ].byte;
          }
     
          dictionary[ dictionary_ind ].prev = prev;
     
          dictionary[ dictionary_ind ].len = dictionary[ prev ].len + 1;
     
          dictionary_ind++;
     
          // GIF89a mandates that this stops at 12 bits
          if ( ( dictionary_ind == ( 1 << ( code_length + 1 ) ) ) &&
               ( code_length < 11 ) )
          {
            code_length++;
     
            dictionary = ( dictionary_entry_t * ) realloc( dictionary,
              sizeof( dictionary_entry_t ) * ( 1 << ( code_length + 1 ) ) );
          }
        }
     
        prev = code;
     
        // Now copy the dictionary entry backwards into "out"
        match_len = dictionary[ code ].len;
        while ( code != -1 )
        {
          out[ dictionary[ code ].len - 1 ] = dictionary[ code ].byte;
          if ( dictionary[ code ].prev == code )
          {
            fprintf( stderr, "Internal error; self-reference." );
            exit( 0 );
          }
          code = dictionary[ code ].prev;
        }
     
        out += match_len;
      }
    }
     
    static int read_sub_blocks( int gif_file, unsigned char **data )
    {
      int data_length;
      int index;
      unsigned char block_size;
     
      // Everything following are data sub-blocks, until a 0-sized block is
      // encountered.
      data_length = 0;
      *data = NULL;
      index = 0;
     
      while ( 1 )
      {
        if ( read( gif_file, &block_size, 1 ) < 1 )
        {
          perror( "Invalid GIF file (too short): " );
          return -1;
        }
     
        if ( block_size == 0 )  // end of sub-blocks
        {
          break;
        }
     
        data_length += block_size;
        *data = realloc( *data, data_length );
     
        // TODO this could be split across block size boundaries
        if ( read( gif_file, *data + index, block_size ) <
             block_size )
        {
          perror( "Invalid GIF file (too short): " );
          return -1;
        }
     
        index += block_size;
      }
     
      return data_length;
    }
     
    static int process_image_descriptor( int gif_file,
                                         rgb *gct,
                                         int gct_size,
                                         int resolution_bits )
    {
      image_descriptor_t image_descriptor;
      int disposition;
      int compressed_data_length;
      unsigned char *compressed_data = NULL;
      unsigned char lzw_code_size;
      int uncompressed_data_length = 0;
      unsigned char *uncompressed_data = NULL;
     
      // TODO there could actually be lots of these
      if ( read( gif_file, &image_descriptor, 9 ) < 9 )
      {
        perror( "Invalid GIF file (too short)" );
        disposition = 0;
        goto done;
      }
     
      // TODO if LCT = true, read the LCT
     
      disposition = 1;
     
      if ( read( gif_file, &lzw_code_size, 1 ) < 1 )
      {
        perror( "Invalid GIF file (too short): " );
        disposition = 0;
        goto done;
      }
     
      compressed_data_length = read_sub_blocks( gif_file, &compressed_data );
     
      uncompressed_data_length = image_descriptor.image_width *
                                  image_descriptor.image_height;
      uncompressed_data = malloc( uncompressed_data_length );
     
      uncompress( lzw_code_size, compressed_data, compressed_data_length, 
        uncompressed_data );
     
    done:
      if ( compressed_data )
        free( compressed_data );
     
      if ( uncompressed_data )
        free( uncompressed_data );
     
      return disposition;
    }
     
    static int process_extension( int gif_file )
    {
      extension_t extension;
      graphic_control_extension_t gce;
      application_extension_t application;
      plaintext_extension_t plaintext;
      unsigned char *extension_data = NULL;
    //  int extension_data_length;
     
      if ( read( gif_file, &extension, 2 ) < 2 )
      {
        perror( "Invalid GIF file (too short): " );
        return 0;
      }
     
      switch ( extension.extension_code )
      {
        case GRAPHIC_CONTROL:
          if ( read( gif_file, &gce, 4 ) < 4 )
          {
            perror( "Invalid GIF file (too short): " );
            return 0;
          }
     
          break;
        case APPLICATION_EXTENSION:
          if ( read( gif_file, &application, 11 ) < 11 )
          {
            perror( "Invalid GIF file (too short): " );
            return 0;
          }
          break;
        case 0xFE:
          // comment extension; do nothing - all the data is in the
          // sub-blocks that follow.
          break;
        case 0x01:
          if ( read( gif_file, &plaintext, 12 ) < 12 )
          {
            perror( "Invalid GIF file (too short): " );
            return 0;
          }
          break;
        default:
          fprintf( stderr, "Unrecognized extension code.\n" );
          exit( 0 );
      }
     
      // All extensions are followed by data sub-blocks; even if it's
      // just a single data sub-block of length 0
    //  extension_data_length = 
      read_sub_blocks( gif_file, &extension_data );
     
      if ( extension_data != NULL )
        free( extension_data );
     
      return 1;
    }
     
    /**
     * @param gif_file the file descriptor of a file containing a
     *  GIF-encoded file.  This should point to the first byte in
     *  the file when invoked.
     */
    static void process_gif_stream( int gif_file )
    {
    //  unsigned char header[ 7 ];
      char header[ 7 ];
      screen_descriptor_t screen_descriptor;
      int color_resolution_bits;
      
      int global_color_table_size;  // number of entries in global_color_table
      rgb *global_color_table;
      
      unsigned char block_type = 0x0;
     
      // A GIF file starts with a Header (section 17)
      if ( read( gif_file, header, 6 ) != 6 )
      {
        perror( "Invalid GIF file (too short)" );
        return;
      }
      header[ 6 ] = 0x0;
     
      // XXX there's another format, GIF87a, that you may still find
      // floating around.
      if ( strcmp( "GIF89a", header ) )
      {
        fprintf( stderr, 
          "Invalid GIF file (header is '%s', should be 'GIF89a')\n",
          header );
        return;
      }
     
      // Followed by a logical screen descriptor
      // Note that this works because GIFs specify little-endian order; on a
      // big-endian machine, the height & width would need to be reversed.
     
      // Can't use sizeof here since GCC does byte alignment; 
      // sizeof( screen_descriptor_t ) = 8!
      if ( read( gif_file, &screen_descriptor, 7 ) < 7 )
      {
        perror( "Invalid GIF file (too short)" );
        return;
      }
     
      color_resolution_bits = ( ( screen_descriptor.fields & 0x70 ) >> 4 ) + 1;
     
      if ( screen_descriptor.fields & 0x80 )
      {
        // If bit 7 is set, the next block is a global color table; read it
        global_color_table_size = 1 << 
          ( ( ( screen_descriptor.fields & 0x07 ) + 1 ) );
     
        global_color_table = ( rgb * ) malloc( 3 * global_color_table_size );
     
        // XXX this could conceivably return a short count...
        if ( read( gif_file, global_color_table, 3 * global_color_table_size ) <
                3 * global_color_table_size )
        {
          perror( "Unable to read global color table" );
          return;
        }
      }
     
    //  while ( block_type != TRAILER )
      while ( ( block_type != TRAILER ) && ( block_type != '\n' ) )
      {
        if ( read( gif_file, &block_type, 1 ) < 1 )
        {
          perror( "Invalid GIF file (too short)" );
          return;
        }
     
        fprintf( stderr, "block_type: %d\n", block_type );
        switch ( block_type )
        {
         case IMAGE_DESCRIPTOR:
            // ajout jpt
            frame_count = frame_count + 1;
     
            if ( !process_image_descriptor( gif_file, 
                    global_color_table, 
                    global_color_table_size,
                    color_resolution_bits ) )
            {
              return;
            }
            break;
          case EXTENSION_INTRODUCER:
            if ( !process_extension( gif_file ) )
            {
              return;
            }
            break;
          case TRAILER:
            break;
          default:
            fprintf( stderr, "Bailing on unrecognized block type %.02x\n",
              block_type );
            return;
        }
        fprintf( stderr, "global_color_table_size: %d\n", global_color_table_size );
      }
    }
     
    int main( int argc, char *argv[] )
    {
      int gif_file;
     
      if ( argc < 2 )
      {
        fprintf( stderr, "Usage: %s <path-to-gif-file>\n", argv[ 0 ] );
        exit( 0 );
      }
     
      gif_file = open( argv[ 1 ], O_RDONLY );
     
      if ( gif_file == -1 )
      {
        fprintf( stderr, "Unable to open file '%s'", argv[ 1 ] );
        perror( ": " );
      }
     
      process_gif_stream( gif_file );
     
      close( gif_file );
     
      // ajout jpt
      fprintf( stderr, "frame_count: %d\n", frame_count );
     
      return 0;
    }
    Citation Envoyé par BeanzMaster Voir le message
    Fais un "Nettoyer et compiler" ou sinon c'est que tu utilises une ancienne version de l'unité uGifViewer car j'ai corrigé ce problème. Dans TGifViewer.Paint tu devrais avoir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      if FAutoStretchMode <> smManual then
      begin
        Case FAutoStretchMode of
         smStretchAll : FStretch := True;
         smOnlyStretchBigger : if (PicWidth > ImgWidth) or (PicHeight > ImgHeight) then FStretch := True else FStretch := False;
         smOnlyStretchSmaller : if (PicWidth < ImgWidth) and (PicHeight < ImgHeight) then FStretch := True else FStretch := False;
        end;
        if Assigned(FOnStretchChanged) then FOnStretchChanged(Self,FStretch);
      End;
    Là ça relève du paranormal, car chaque fois que tu dis que tu as sorti une nouvelle version, c'est elle que je télécharge (comme ce matin à la fraîche) et que je décompresse après avoir renommé la précédente version, et je n'ai absolument pas ce que tu dis que je devrais avoir :
    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
    procedure TGIFViewer.Paint;
     
      Procedure DrawFrame;
      Begin
        With Inherited Canvas Do
        Begin
          Pen.Color := clBlack;
          Pen.Style := psDash;
          MoveTo(0, 0);
          LineTo(Self.Width - 1, 0);
          LineTo(Self.Width - 1, Self.Height - 1);
          LineTo(0, Self.Height - 1);
          LineTo(0, 0);
        End;
      End;
     
    Var
      R:     TRect;
      C:     TCanvas;
      ARect: TRect;
      w:     Integer;
    Begin
     
      If csDesigning In ComponentState Then DrawFrame;
     
      C         := Inherited Canvas;
      FPainting := True;
      R         := DestRect;
      Try
        C.Lock;
        // Fond
        If (FColor <> clNone) Then //and Not(FTransparent)
        Begin
          With C Do
          Begin
            Brush.Style := bsSolid;
            Brush.Color := FColor;
            FillRect(0, 0, ClientWidth, ClientHeight);
          End;
        End;
     
        // Bitmap
        FCurrentView.Transparent := FTransparent;
        C.StretchDraw(R, FCurrentView);
     
        // Bordures
        If FBorderShow Then
        Begin
          ARect := rect(0, 0, ClientWidth, ClientHeight);
          w     := FBevelWidth;
          If (FBevelInner <> bvNone) And (w > 0) Then C.Frame3d(ARect, w, BevelInner); // Note: Frame3D inflates ARect
          InflateRect(ARect, -(FBorderWidth + 1), -(FBorderWidth + 1));
          If (FBevelOuter <> bvNone) And (w > 0) Then C.Frame3d(ARect, w, BevelOuter);
     
          If FBorderWidth > 0 Then With C Do
            Begin
              Pen.Style   := psSolid;
              Pen.Width   := FBorderWidth;
              Pen.Color   := FBorderColor;
              Brush.Style := bsClear;
              Rectangle(0, 0, ClientWidth, ClientHeight);
            End;
        End;
     
        C.UnLock;
      Finally
        FPainting := False;
      End;
     
      Inherited Paint;
    End;

    Citation Envoyé par BeanzMaster Voir le message
    Toujours cette pompe, prend un arrosoir, fais une petite balade dans ton jardin, au moins avec tu seras sûr que l'arrosoir ne tombera pas en panne.
    Oui, mais il ne me fera pas mal au bras, puisqu'il est vide pour cause de défaillance de la pompe censée le remplir.
    Demain aprème le plombier...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #72
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message

    Là ça relève du paranormal, car chaque fois que tu dis que tu as sorti une nouvelle version, c'est elle que je télécharge (comme ce matin à la fraîche) et que je décompresse après avoir renommé la précédente version, et je n'ai absolument pas ce que tu dis que je devrais avoir
    J'ai eu quelques difficultés il y a 2 jours lors d'une des mise à jour avec Github. J'ai dû avoir une branche qui n'a pas été traité correctement.

    Bref je viens de refaire une mise à jour forcée cf : https://github.com/jdelauney/TGIFVie...uGifViewer.pas

    Sinon j'en ai profité :
    Nouveauté :
    • Ajout de la propriété RawFrames[Index:Integer] - Permet d'accéder aux informations directement extraites du GIF
    • Mise à jour de la demo GifView et visualisation des commentaires du GIF si il y en a


    Citation Envoyé par Jipété Voir le message
    Oui, mais il ne me fera pas mal au bras, puisqu'il est vide pour cause de défaillance de la pompe censée le remplir.
    Demain aprème le plombier...
    Ah ! c'est cette pompe là !!!. Mais des tonneaux et récupères l'eau de pluie pour alimenter ton arrosoir. C'est pas ça qui manque cet été

    PS : Merci pour le code et le spinner je vais jeter un coup d'oeil
    • "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. #73
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    J'ai eu quelques difficultés il y a 2 jours lors d'une des mise à jour avec Github. J'ai dû avoir une branche qui n'a pas été traitée correctement.

    Bref je viens de refaire une mise à jour forcée cf : https://github.com/jdelauney/TGIFVie...uGifViewer.pas
    Calme-toi, calme-toi, y a tout qui part en sucette : parce que, que je compare la procédure Paint dans le uGifViewer.pas du .zip que je viens de télécharger à l'instant avec celle venant du lien ci-dessus, elles sont identiques et ne contiennent pas ce que tu disais cet aprème.
    Les 2 fichiers font 2645 lignes et sont datés du 17/06.

    Hallucinant, cette histoire. Ou alors tu te prends les pieds dans le tapis...
    Citation Envoyé par BeanzMaster Voir le message
    Dans TGifViewer.Paint tu devrais avoir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      if FAutoStretchMode <> smManual then
      begin
        Case FAutoStretchMode of
         smStretchAll : FStretch := True;
         smOnlyStretchBigger : if (PicWidth > ImgWidth) or (PicHeight > ImgHeight) then FStretch := True else FStretch := False;
         smOnlyStretchSmaller : if (PicWidth < ImgWidth) and (PicHeight < ImgHeight) then FStretch := True else FStretch := False;
        end;
        if Assigned(FOnStretchChanged) then FOnStretchChanged(Self,FStretch);
      End;
    À l'heure actuelle, ce code je le trouve dans Function TGIFViewer.DestRect: TRect;.


    Citation Envoyé par BeanzMaster Voir le message
    Ah ! c'est cette pompe-là !!!. Mets des tonneaux et récupère l'eau de pluie pour alimenter ton arrosoir. C'est pas ça qui manque cet été
    Ben, ça dépend où, et par chez moi ça fait des mois qu'on n'a pas vu une vraie pluie...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  14. #74
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Calme-toi, calme-toi, y a tout qui part en sucette : parce que, que je compare la procédure Paint dans le uGifViewer.pas du .zip que je viens de télécharger à l'instant avec celle venant du lien ci-dessus, elles sont identiques et ne contiennent pas ce que tu disais cet aprème.
    Les 2 fichiers font 2645 lignes et sont datés du 17/06.

    Hallucinant, cette histoire. Ou alors tu te prends les pieds dans le tapis...

    À l'heure actuelle, ce code je le trouve dans Function TGIFViewer.DestRect: TRect;.
    Oups, c'est moi qui me suis pris les pied dans le tapis, c'est bien dans destrect

    Pour les dates ça serait bien que je trouve un moyen pour changer celle dans les commentaires de l'unité automatiquement

    Bonne nuit, ce soir je ne fait pas long je suis un peu plus fatigué que d'habitude

    Citation Envoyé par Jipété Voir le message
    Ben, ça dépend où, et par chez moi ça fait des mois qu'on n'a pas vu une vraie pluie...
    Tu es d'ou en France ? de Corse ?. Il n'y a pas beaucoup de région ou il n'a pas plu.
    • "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

  15. #75
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Oups, c'est moi qui me suis pris les pied dans le tapis, c'est bien dans destrect
    D'accord, donc je suis bien en phase avec la nouvelle version (d'ailleurs on le voit à la nouvelle zone "Commentaires"), et donc le problème est bien vivant :
    1er lancement après compil (la combo annonce "Toutes"), 1er fichier ouvert, il est agrandi :
    Nom : last_version.png
Affichages : 179
Taille : 52,9 Ko

    Le drame, c'est que même en faisant cbxStretchMode.ItemIndex := 2;//1; dans FormShow, recompil, exécution, drag'n'drop du léopard et il est agrandi alors que la combo écrit bien "Les plus grandes".


    Et même en déplaçant les instructions de FormShow à FormCreate ça a ce comportement bizarre...

    EDIT : une solution se fait jour :
    uGifViewer.pas ligne 2380 : if FAutoStretchMode <> smManual then <<< la piste !

    Point d'arrêt sur cette ligne, F9, d'n'd petit fichier, souris sur FAutoStretchMode --> l'infobulle affiche SMSTRETCHALL donc le code se tamponne de la valeur de la combobox...

    Et comment est-ce possible alors que le uGifViewer.Create stipule : FAutoStretchMode := smManual; ?

    À cause du FormCreate ! Presque tout en bas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        AutoStretchMode := smStretchAll;
      End;
    Je m'en sors avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        AutoStretchMode := TGifAutoStretchMode(cbxStretchMode.itemindex);//smStretchAll;
      End;
    mais est-ce que c'est correct par rapport au reste ?
    D'autant plus qu'il faut alors conserver l'initialisation de la combo dans le FormCreate plutôt que dans le FormShow.

    Bien sûr ça contrevient à l'idée de l'autostretch mais ce truc m'importune dans la mesure où il n'est pas désactivable depuis l'IHM.
    Je te laisse réfléchir à cet aspect des choses.
    /EDIT


    Citation Envoyé par BeanzMaster Voir le message
    Tu es d'où en France ? de Corse ?. Il n'y a pas beaucoup de région où il n'a pas plu.
    Non, sur le continent, mais oui, presque au bord de la grande Bleue et je n'en dirai pas plus, qu'après je vais me faire géolocaliser,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  16. #76
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    le composant cbxStretchMode n'as pas de methode onchange ?
    normalement c'est ici que tu devrais initialiser ta variable global
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  17. #77
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    D'accord, donc je suis bien en phase avec la nouvelle version (d'ailleurs on le voit à la nouvelle zone "Commentaires"), et donc le problème est bien vivant :
    1er lancement après compil (la combo annonce "Toutes"), 1er fichier ouvert, il est agrandi :

    Le drame, c'est que même en faisant cbxStretchMode.ItemIndex := 2;//1; dans FormShow, recompil, exécution, drag'n'drop du léopard et il est agrandi alors que la combo écrit bien "Les plus grandes".


    Et même en déplaçant les instructions de FormShow à FormCreate ça a ce comportement bizarre...

    EDIT : une solution se fait jour :
    uGifViewer.pas ligne 2380 : if FAutoStretchMode <> smManual then <<< la piste !

    Point d'arrêt sur cette ligne, F9, d'n'd petit fichier, souris sur FAutoStretchMode --> l'infobulle affiche SMSTRETCHALL donc le code se tamponne de la valeur de la combobox...

    Et comment est-ce possible alors que le uGifViewer.Create stipule : FAutoStretchMode := smManual; ?

    À cause du FormCreate ! Presque tout en bas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        AutoStretchMode := smStretchAll;
      End;
    Je m'en sors avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        AutoStretchMode := TGifAutoStretchMode(cbxStretchMode.itemindex);//smStretchAll;
      End;
    mais est-ce que c'est correct par rapport au reste ?
    D'autant plus qu'il faut alors conserver l'initialisation de la combo dans le FormCreate plutôt que dans le FormShow.

    Bien sûr ça contrevient à l'idée de l'autostretch mais ce truc m'importune dans la mesure où il n'est pas désactivable depuis l'IHM.
    Je te laisse réfléchir à cet aspect des choses.
    /EDIT
    Bon au moins on est synchro maintenant

    Pour traiter ce point : Dans le FormCreate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    With GifViewer do
      Begin
        Parent := pnlView;
        Align := alClient;
        Top := 10;
        Left := 10;
        Center := True;
        AutoSize := true;
        OnLoadError := @DoOnBitmapLoadError;
        OnFrameChange := @DoOnFrameChange;
        OnStretchChanged := @DoOnStetchChanged;
        AutoStretchMode := smStretchAll; //------> LIGNE A MODIFIEE
      End;
    Puis dans le FormShow

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      with cbxStretchMode.Items do
      begin
        clear;
        Add(rsStretchManual);           // Index 0
        Add(rsStretchAll);                  // Index 1
        Add(rsStretchOnlyBigger);      // Index 2
        Add(rsStretchOnlySmaller);    // Index 3
      End;
      cbxStretchMode.ItemIndex := 1; // A MODIFIER SUIVANT LE PARAMETRE DANS LE ONCREATE
    Citation Envoyé par anapurna Voir le message
    salut

    le composant cbxStretchMode n'as pas de methode onchange ?
    normalement c'est ici que tu devrais initialiser ta variable global
    En effet le changement se fait par l'évènement OnSelect car sinon utiliser OnChange changerai également la propriété "AutoStretchMode" ce qui provoque une erreur car au changement de celle-ci un appel à Invalidate est effectué. (si je me souviens bien)
    Changer cbxStretchMode.ItemIndex léve l'évènement OnChange mais pas OnSelect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Procedure TMainForm.cbxStretchModeSelect(Sender: TObject);
    Begin
      Case cbxStretchMode.ItemIndex of
        0 : GifViewer.AutoStretchMode := smManual;
        1 : GifViewer.AutoStretchMode := smStretchAll;
        2 : GifViewer.AutoStretchMode := smOnlyStretchBigger;
        3 : GifViewer.AutoStretchMode := smOnlyStretchSmaller;
      End;
     
      chkStretchGIF.Enabled := (GifViewer.AutoStretchMode = smManual);
     
    end;
    la checkbox "Adapter" elle, est mise à jour par l'évènement OnStretchChanged du composant TGifViewer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Procedure TMainForm.DoOnStetchChanged(Sender: TObject; IsStretched: Boolean);
    Begin
      chkStretchGIF.Checked := IsStretched;
    End;

    Citation Envoyé par Jipété Voir le message
    Non, sur le continent, mais oui, presque au bord de la grande Bleue et je n'en dirai pas plus, qu'après je vais me faire géolocaliser,
    • "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

  18. #78
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    c't'un peu la pagaille, question "noms des choses" :
    voyant que cbxStretchMode.Items peut contenir rsStretchAll ou rsStretchOnlyBigger (ou d'autres) et que je ne veux pas AutoStretchMode := smStretchAll; je me suis dit que j'allais remplacer ce smStretchAll par un smStretchOnlyBigger puisque la construction orthographique est similaire à sm/rsStretchAll, ce que j'ai fait et donc erreur de compil car smStretchOnlyBigger est inconnu, il m'a donc fallu farfouiller pour découvrir qu'il fallait utiliser smOnlyStretchBigger, totalement illogique !
    Je le résume ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rsStretchAll        / smStretchAll
    rsStretchOnlyBigger / smOnlyStretchBigger
    Ça saute aux yeux qu'il y a un truc faussé, là.
    Bon, ceci étant mis en place, ça fonctionne correctement, on devrait donc voir le bout du tunnel (pas comme avec ma pompe...)

    Mais d'un point de vue "rédaction", ce n'est pas tout :
    Citation Envoyé par BeanzMaster Voir le message
    la checkbox "Adapter" elle, est mise à jour par l'évènement OnStretchChanged du composant TGifViewer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Procedure TMainForm.DoOnStetchChanged(Sender: TObject; IsStretched: Boolean);
    Si on fait une recherche du mot OnStretchChanged on ne va jamais trouver la procédure, il lui manque un "r"

    Idem avec le compo chkTansparent qui a perdu son "r".

    Je te laisse corriger ces points et je retéléchargerai ensuite, histoire de continuer à être en phase.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  19. #79
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    c't'un peu la pagaille, question "noms des choses" :
    voyant que cbxStretchMode.Items peut contenir rsStretchAll ou rsStretchOnlyBigger (ou d'autres) et que je ne veux pas AutoStretchMode := smStretchAll; je me suis dit que j'allais remplacer ce smStretchAll par un smStretchOnlyBigger puisque la construction orthographique est similaire à sm/rsStretchAll, ce que j'ai fait et donc erreur de compil car smStretchOnlyBigger est inconnu, il m'a donc fallu farfouiller pour découvrir qu'il fallait utiliser smOnlyStretchBigger, totalement illogique !
    Je le résume ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rsStretchAll        / smStretchAll
    rsStretchOnlyBigger / smOnlyStretchBigger
    Ça saute aux yeux qu'il y a un truc faussé, là.
    Bon, ceci étant mis en place, ça fonctionne correctement, on devrait donc voir le bout du tunnel (pas comme avec ma pompe...)

    Mais d'un point de vue "rédaction", ce n'est pas tout :


    Si on fait une recherche du mot OnStretchChanged on ne va jamais trouver la procédure, il lui manque un "r"

    Idem avec le compo chkTansparent qui a perdu son "r".

    Je te laisse corriger ces points et je retéléchargerai ensuite, histoire de continuer à être en phase.
    C'est que connaissant mon code je n'ai pas fait attention à ces petits détails . Je vais modifié dans sens. Bien vu
    Pour ce qui est de la touche r ce n'est pas la première fois, je vais lui taper dessus plus fort

    C'est grâce à des personnes comme toi qui test et qui donne des retours constructifs et pertinents qu'on évolue c'est très agréable.

    • "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

  20. #80
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Mise à jour :
    • Amélioration de la traduction anglaise
    • Amélioration du système traduction dans la démo GifView. Plus besoin de redémarrage. (modification des fichiers PO)
    • Corrections des éléments mal orthographiés dans le code


    Téléchargement Direct

    TGIFViewer est également disponible depuis "Online Package Manager" (Gestionnaire de paquets en ligne)
    • "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