[Résolu][Basic] Images liées des boites de dialogues.

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
Sébastien C
Membre hOOnoraire
Membre hOOnoraire
Messages : 157
Inscription : 28 avr. 2008 23:21
Localisation : Meymac (19250)

[Résolu][Basic] Images liées des boites de dialogues.

Message par Sébastien C »

Bonjour à tous,

Le sujet est peut être passé sur ce forum mais même une recherche sur le Web m’est apparue infructueuse. Je reste évidemment preneur de tous lien.

Je développe actuellement une petite boite de dialogue d’une macro incluse dans un fichier Calc et qui sera publié ici si j’arrive à mes fins. Dans ce dialogue, j’insère des images, autant dans des contrôles picto, que directement sur des boutons.

Ces images trouvent bien entendu leur origine sur mon disque dur. Lors du déplacement de mon fichier sur une autre machine, j’ai été surpris de constater que ces images ne sont pas incluses dans le fichier mais liées sur le disque dur. Or c’est un fichier que je voudrais évidement pouvoir partager, dans la mesure du possible sans avoir à donner une explication sur la localisation des images constituantes (PNG très légers).
boiteDialSMCJ.png
Je n’ai pas trouvée la moindre propriété ou case à cocher pour spécifier que je voulais inclure les images à l’archive zip que forme tout ODT. Alors je me suis dit que ce serait bien d’ouvrir le capot (dont je ne connais que très peu des arcanes). Avant cela, suivant la logique inspirée par Alain de la Chaume dans un récent post, j’ai inséré une image quelconque dans la grille de mon tableur.

J’ai renommé mon fichier comme une archive zip et extrait son contenu dans un répertoire dédié.
Dans le répertoire « Pictures », j’ai bien sûr retrouvé mon image insérée mais sous un nom très rigolo (100002000000002000000020DEB785F0.png) . Dans ce même répertoire, j’ai rajouté une image nommée « plouf.png »...

Consultant le fichier « content.xml » dans un éditeur de texte et faisant une recherche sur le nom de fichier très rigolo, j’ai découvert la balise XML

Code : Tout sélectionner

<draw:image xlink:href="Pictures/100002000000002000000020DEB785F0.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
Fort de cette instruction, je suis donc descendu dans les dossiers « /Dialogs/Standard/ » pour y trouver mon très cher « Dialog1.xml ». Rebelote pour l’édition ; la découverte de :

Code : Tout sélectionner

<dlg:img dlg:style-id="0" dlg:id="icon_01" dlg:tab-index="2" dlg:left="5" dlg:top="65" dlg:width="17" dlg:height="22" dlg:scale-image="false" dlg:src="file:///home/[...]/icon_01.png"/>
ma bien démontré la relativité de la prose...
J’ai imposé :

Code : Tout sélectionner

<dlg:img dlg:style-id="0" dlg:id="icon_01" dlg:tab-index="3" dlg:left="5" dlg:top="39" dlg:width="17" dlg:height="22" dlg:scale-image="false" dlg:src="../../Pictures/plouf.png"/>
J’ai recompilé et renommé mon archive zip correctement pour en recréer un fichier ODS. J’ai ouvert la bête et me suis pris dans la figure un air de ravi de la crèche à l’appel de mon dialogue avec ma bonne image (plouf.png) au bon endroit...

Je suis retourné à l’éditeur de boite pour afficher les propriétés du contrôle. L’extase était à son comble, provoquée par la mention « <image-incorporée> :
imageIncorporee.png
Je n’ai touché à rien et suis parti sous un autre système d’exploitation (Wouindo$e)  ; vérification faite, je pleure toutes les larmes de mon petit corps : ça marche pô. De plus, même sous Linux, le fait de réenregistrer le fichier opéré au scalpel corrompt la boite de dialogue qui ne veut plus s’afficher (alors qu’une autopsie prouve qu’elle est encore là)...

Auriez-vous des pistes ou dois-je directement cocher [issue] ?
;-)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Sébastien C le 31 déc. 2009 15:09, modifié 1 fois.
LibreOffice 3.5.3.2 sous GNU-Linux Mageia 2.
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: [Basic] Images liées des boites de dialogues.

Message par Pierre-Yves Samyn »

Bonjour
Sébastien C a écrit :une petite boite de dialogue d’une macro incluse dans un fichier Calc...Dans ce dialogue, j’insère des images, autant dans des contrôles picto, que directement sur des boutons.

Ces images trouvent bien entendu leur origine sur mon disque dur. Lors du déplacement de mon fichier sur une autre machine, j’ai été surpris de constater que ces images ne sont pas incluses dans le fichier mais liées sur le disque dur.
Pourquoi ne pas simplement insérer les images dans le classeur cf. par exemple : http://user.services.openoffice.org/fr/ ... 75&start=0
Avatar de l’utilisateur
Sébastien C
Membre hOOnoraire
Membre hOOnoraire
Messages : 157
Inscription : 28 avr. 2008 23:21
Localisation : Meymac (19250)

Re: [Basic] Images liées des boites de dialogues.

Message par Sébastien C »

Merci beaucoup Pierre-Yves. Je n’étais pas tombé sur le fil que tu me fais lire mais j’avais imaginé (entre autres) cette solution. La lecture, dans ce fil, du fait qu’il faille aller dans Edition -> Liens et déconnecter les images pour que ça marche (donc, je suppose, à chaque ouverture de fichier) me confirme que j’ai eu raison d’essayer de trouver une autre solution, évidemment plus compliquée qu’une simple ligne de code mais pas forcément inintéressante sur le principe...

Parce que la perspective d’imaginer expliquer à des gens où placer des fichiers quand on sait qu’il y en a qui savent à peine ce qu’est un répertoire m’a rendu, l’espace d’un instant, un rien ronchon.... Mais il était clair que les fichier ODF ne sont pas encore prévu pour cela et que ma moue n’y changerait rien. Alors, allant bouder dans mon coin, je me suis mis à réfléchir moi aussi...

Stocker une image binaire dans un code de script ne peut se faire qu’en mode texte et, pour cela, il n’y a pas trente-six solutions mais une seule (ou presque) : la base 64. Cela présente un inconvénient majeur pour les gros fichiers puisque l’on sait bien que l’inflation en termes de poids-octets est de l’ordre de 33%. Mais cette inflation est négligeable dans le cas des petits fichiers, ceux qui font entre un et dix kilo octets. Il existe une foison d’utilitaires pour coder n’importe quel fichier en base 64 et dans tous les systèmes d’exploitation possibles et imaginables. Ainsi, parmi d’autres, on pourra consulter cette page pour les possesseurs de PC (Unix et w.). La commande est très simple à exprimer :

Code : Tout sélectionner

base64 fichierSource.png > fichierCible.txt
et produit sans problème le fichier escompté. Du reste, point n’est vraiment besoin d’installer un logiciel puisqu’encore des wagons de sites Web offrent également ce service en ligne.

La manipulation correcte du copier/coller alliée au bon usage du rechercher/remplacer de n’importe quel éditeur de texte permet de monter très facilement ce type de code :

Code : Tout sélectionner

 ' Flèche haut (fleche_01.png).
 b64 (0) = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAqxQTFRFWgAC"
 b64 (1) = "BS5jBjBqBjFuBjNyBDR6BjR3BjV7BTaEBjeBE0mhEUmqB0zOG0ycEU2zBlO2B1W3CVa6FVO/FlWr"
 b64 (2) = "DFi8JlWbGVmwFFfTDlu+FVjTFljTF1u2GluyEF3AG1y2El/CGV3VHV7KHV3VFWLEF2TGGGbKGWbI"
 b64 (3) = "OWGcIGTXGmjLHGjIHWvOKmjXIG3PKGvWKW3ZInDRJXLTLXDTJXTXDHj+L3LWSW+qKXXVMHTYEHv+"
 b64 (4) = "K3fXMnbbQ3PHPHXbLnrZFH7+FX7+MX3bGIH+GYH+GoL+HYT+MILiKoPrHoX+H4X+IYf+Iof+Ioj+"
 b64 (5) = "I4j+PYPjI4n+JIn+Jor+Jov+J4v+KIz+Ko3+K47+LI7+LI/+VobcLY/+VoffbYamZIe7L5D+ZIe+"
 b64 (6) = "bYepL5H+bYerMJH+ZIi/ZIjCPZDsMZL+ZInFbYmtbYmvMpP+R4/oZYrIbYqyM5T+NJT+ZYvKbYu0"
 b64 (7) = "ZYvMbYu3NJX+NZX+NpX+ZYzPbYy5Npb+Yo3YcY20N5f+OJf+OZf+OZj+Opj+Y4/hOpn+O5n+PJr+"
 b64 (8) = "PZr+PZv+Ppv+Ppz+P5z+QJz+UJrsQJ3+QZ3+Qp7+Q5/+RJ/+TJ7yRKD+RaD+Tp/yRqH+SKL+SKP+"
 b64 (9) = "SaP+SqT+cpvkS6T+WKLwS6X+Tab+Tqf+T6f+fJ7ZT6j+hJ7GUKj+Uaj+U6r+jaC4fKHlVKv+Vav+"
 b64(10) = "Wqv4Vaz+Vqz+Yaz0Wa7+Wq/+W7D+XrL+X7L+X7P+YLP+Z7L3YbT+ZLb+Zbb+Zbf+Zrf+Zrj+Z7j+"
 b64(11) = "abj8bLj6la/cabr/arr/nrDJnrDLa7v/nrHNnrHPlLLpbLz/b7z8bb3/cL7/cb//csD/nrbinrfj"
 b64(12) = "c8H/nrfldMH/nrjnq7/gq8Ltvczkvc/wzNfo0NnlzNryztvx2eHt2eP04+nx4+r15+7z5+71dgi8"
 b64(13) = "WgAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH"
 b64(14) = "2QwdFjMJC3qHUgAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAFCSURBVDjL"
 b64(15) = "Y2AYeiA6Er98k75eNT75lRqn9ysuwi1/UuHA2UNrhA7ikr8uuf3c4Z2bJ/Fdwy5/U3z9uWO7tmxY"
 b64(16) = "nsZ9A5v8Ham554/t3rph+fzpbly3MOXvK/WcP7Vn28ZVC2b0txnz3kOXf6iTc+nU3m0bVy+cOaG9"
 b64(17) = "NltL9AGq/GNbvytn9u3YtHbxzIkdddlRIdLqj1AUzOaxtjA1mrpu6azJnfXucjJiwqw1KAruXr18"
 b64(18) = "8YKN47I5U7oa8tXMThw/euQ2pjsr7OZN6W4siFOpxBFQxVbTeptLE0OVS3AoKDTvaylLDguUL8Kh"
 b64(19) = "INewtTw5LMhLNg+HggyDqvTwYG9XiSwcClJ10yOCfVydRDJxKEjRjgrx9XC2F0zCoSBeM8Tfw8XB"
 b64(20) = "UiABh4JY1QBPoLwJfwwOBUs4ONnZWJiZGFcMubwGACnycFlGseiWAAAAAElFTkSuQmCC"

 ' Flèche bas (fleche_02.png).
 b64 (0) = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAq9QTFRFOb1q"
 b64 (1) = "BjiADTyBDT2EEkCDDUGJEUWSEEWVEEabEEiTEUijHEiIBknCA0nNCEvIEE6hCEzNFU2rCE7RD1Kq"
 b64 (2) = "ClDWC1LcHFS2DFXhFlmzLFaQDVfmEFu8F1q0GVu1GVy4EGLLL12mJ1/COWCZEWnYPmWaJ2jOJ2rQ"
 b64 (3) = "J2rWKGvUE3DjNGvMInTZFXbtJXbaL3TaMHXWF3rzKHjbHHzwMnjZK3rcMnnZGH75THa3LXzdIn7r"
 b64 (4) = "NHvcM3zcGYH8J3/nLH/jT3m7Nn3gG4L+MH/eV3mnMX/eG4P+R3rXHIP+HIT+HYT+WXupUnu/M4Hg"
 b64 (5) = "HoX+OYHiIIb+NoPgU37CIYf+KYfyIoj+PIPkI4j+OIXiJYn+O4bjJYr+V4HGJor+Jov+J4v+P4fn"
 b64 (6) = "Ko3+WoTKQonqK47+LI7+LI/+XIbMLpD+L5H+MJH+RY3tMZL+X4nQR47uQpHqM5T+NJT+YYvTY4vV"
 b64 (7) = "NJX+NZX+Npb+OJf+OZj+Opj+Opn+O5n+dZC1PJr+Ppv+Ppz+P5z+QJz+QJ3+QZ3+eZS6Qp7+Q5/+"
 b64 (8) = "RKD+RaD+RqH+R6L+SKL+SaP+SqT+S6T+S6X+TKX+Tab+Tqf+T6f+T6j+UKj+Uaj+Uan+Uqn+U6r+"
 b64 (9) = "VKv+Vav+Vaz+Vqz+gaPce6PufaPsV63+f6TqjKTHWK7+Wa7+gqXpWq/+hKbnW7D+kabGkqfEXbH+"
 b64(10) = "hqjlXrL+kqjJX7L+iKnkYLP+iqrik6rLjavhYrX+Y7X+lazOZLb+Zbf+Zrf+j67oaLn/abr/arr/"
 b64(11) = "arv/a7v/br3/n7TTb77/cL7/cL//cb//dcL/dsP/d8P/nrvyesX+rLzRfMf/fcf/p77ngMn+qcDp"
 b64(12) = "q8Hrg8z/scLdq8Pshc3+vcrcwMzcwM7lzdns0Nrm2OLw3eTt3ebt3ebx3uf14Ojz5evx5+zy6O71"
 b64(13) = "mlX31wAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJ"
 b64(14) = "TUUH2QwdFjE6hpyExgAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAFISURB"
 b64(15) = "VDjLY2AYUuCUlLioiJAAH89cHArm5V67cPr4wT2RhTgUzM+6fPb44T1bw3NwKFiYdO7Ekb3bVgek"
 b64(16) = "4VCwNP7k0X071i72ScShYHnosf071i6Z4RKNQ8EavwM71y+ZMcEiEIeCDQ67Ni6bObHLxBuHgk1W"
 b64(17) = "G5fNmtTdamiPQ8EW4xWzJ3e31uqaY8o9uHrp4vki/TlTetrqyrQVtm9et/I6ioLdvOoaaqp5U3vb"
 b64(18) = "68vzg+VkZSQYvVAU3HfT27Z6wbS+joaKgvSECH9HacnHqHY80TJdPL2/o7GyOCMhyt9Vnvsuuise"
 b64(19) = "KlpP6GyqKslMjglyV2a5jenOO2JOLTWlmcmxQR6aTDew+fKWoF1pdkpciKcO8xns4XCTyzYVKG/A"
 b64(20) = "ugpXkrrCYRnma8ZZjTvRHWI3suF3xpcsF7EJq9zDm3CblR4xDEUAAMiPct9Li+kZAAAAAElFTkSu"
 b64(21) = "QmCC"

 ' Ascendant (icon_01.png)
 b64 (0) = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAB3RJTUUH2QwdEhoi5IlJJQAAAAlw"
 b64 (1) = "SFlzAAAK8AAACvABQqw0mAAAAARnQU1BAACxjwv8YQUAAAAwUExURQAAAISEhMbGxv8AAP//////"
 b64 (2) = "/////////////////////////////////////////5GHF9sAAAAEdFJOU////wBAKqn0AAAAbUlE"
 b64 (3) = "QVR42p3M0Q2AMAgE0NMygCPUDZp0At1/KGlLLRSNiRxfLxwAQtYD2r/BlhjszTPoUgV98wajJDBu"
 b64 (4) = "bgAmoM1Be6PgcFDfaKhvLPAbC9yagI9okXRAlPRxFTd0SmJbDyn2rCj7B3KQIIWyDi7xdjhjV/Ls"
 b64 (5) = "egAAAABJRU5ErkJggg=="

 ' Descendant (icon_02.png)
 b64 (0) = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAB3RJTUUH2QwdEhokDersEAAAAAlw"
 b64 (1) = "SFlzAAAK8AAACvABQqw0mAAAAARnQU1BAACxjwv8YQUAAAAPUExURf8AAAAAAMbGxv///4SEhCgn"
 b64 (2) = "U18AAAABdFJOUwBA5thmAAAAbklEQVR42p3M0RWAIAgFUNhAdIJGyFqA/ZdKkTyAHT/i8cOtJ4Ad"
 b64 (3) = "JAIPlbfQCgEqb0EKDvq5AS0YGOeE9/uEwg6QItweiAIUdtAfsCD/W5DrC05Nq4zJmrVCYaAcVfbS"
 b64 (4) = "rIBHJtk08geAMMnCyAIPTWczq1vT0RkAAAAASUVORK5CYII="

 ' En mitre (icon_03.png)
 b64 (0) = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAB3RJTUUH2QwdEhoey+Y1ogAAAAlw"
 b64 (1) = "SFlzAAAK8AAACvABQqw0mAAAAARnQU1BAACxjwv8YQUAAAAwUExURQAAAISEhMbGxv8AAP//////"
 b64 (2) = "/////////////////////////////////////////5GHF9sAAAAEdFJOU////wBAKqn0AAAAdUlE"
 b64 (3) = "QVR42p3Oiw2AIAwE0FM6gCOUDZowAe4/lAVqlEKIsZeQ8vgitQKCNQYU1wA4oPgF7J0HbM8Uyhsd"
 b64 (4) = "tOkEAAd0VBB4yAvQv/WQFQAHOr5A13vQa8q4WSqUYkut4chQxCfd0ZZHEN7BYtH2DyRICKlFWwxw"
 b64 (5) = "Ae5HORcfDp/BAAAAAElFTkSuQmCC"

 ' En « V » (icon_04.png)
 b64 (0) = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAB3RJTUUH2QwdEhojk455swAAAAlw"
 b64 (1) = "SFlzAAAK8AAACvABQqw0mAAAAARnQU1BAACxjwv8YQUAAAAwUExURQAAAISEhMbGxv8AAP//////"
 b64 (2) = "/////////////////////////////////////////5GHF9sAAAAEdFJOU////wBAKqn0AAAAdklE"
 b64 (3) = "QVR42p3O3Q2AIAwE4JMyACPgBk26gBD3n8ny8wCUxGjvnr4ABQDJOPDnJ2BggRx2MOxpMJx5A92x"
 b64 (4) = "QA4dgAV82EJ5YQIfBih/myBZYMwApBlqGxyaDpcGiJo+TmOvmPFZE1tvjQWOJQ615OgPCGnAVCss"
 b64 (5) = "Bh7R3TucjDgfwgAAAABJRU5ErkJggg=="

 ' Insérer des lignes (icon_05.png)
 b64 (0) = "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAAXNSR0IArs4c6QAAAGZQTFRFUikD"
 b64 (1) = "AF+3GX0AGoYAJpIAMJsAMqUAeoWSW5hPSoz+XZxJhI+bjZilkp2qdbRfrbK0sba4jsl6ob/9u8DD"
 b64 (2) = "wcbJvdlYwdtm0+mM4vOd6vSf6e7w6u/y7fL17vP28Pb49fr99vv++fv4LhlJxwAAAAF0Uk5TAEDm"
 b64 (3) = "2GYAAAABYktHRACIBR1IAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH2QweBywZ1Mb/AQAA"
 b64 (4) = "AH9JREFUGNOVz80SgjAMRtEIIVT5EawpCIXK+7+k0DgOkRV382XOLgAnuvwl+FB98aoSrN6qKmLp"
 b64 (5) = "x12+jFj4YZcvBOdpraV2m2kWzJewRi/aJiy5YIwcySHYxDKXydH8vqoRHWKtX8W+465HjSZl5vSm"
 b64 (6) = "8WkSToyFgx4MwN4tnO8DKQMMzQtuDNYAAAAASUVORK5CYII="

 ' Consulter la feuille (icon_06.png)
 b64 (0) = "iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A"
 b64 (1) = "/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9kMHRQ3JV5K+tsAAAHaSURBVDjL"
 b64 (2) = "rZM/aFNBHMc/v7tzEzT9M3RxK2igQnBVHKpFsAGJKKhYbV3EyUXc1CGIoUtdutk2lVTQKoXESSQO"
 b64 (3) = "4tQuKliwCtmEuoiD5uV+7zm0Nnm+SI3NwYMHd/fh8737nkR0d5gu83C/f/aMVXYk+21+VGJAgKmJ"
 b64 (4) = "k/8Fuz7zPGkIUFruYuTCsYAr55Sow+Ai8OBRAPN/AFWV7z/qNHzYEXCXM6hq0tCrx2tIw/sODR1e"
 b64 (5) = "fbI26hUDGJHYt7A2ydlXKRbWJhNzRgSzuTdhqOoRazAth7j4cZpntbssZYucKl+CSBg7cDNuaA3a"
 b64 (6) = "YtgSWbEiREYAmHlX4PHnPJXTc3z6ssxSdo7Rp5chFCaGmlArgm85w1hkZwzOWpy1lFbzlHOzrNSq"
 b64 (7) = "aBSwUqtSzs1SWs1vrXHW4oxpH9mrx1qz0QPg/MAdhovjAEyPjHOjWgSKZAeu4axtGhqJXcoWMFTF"
 b64 (8) = "WkE2nS8eusqJfTnOvDhIFHl8HZ4cf8veVArnpBlRhLBdbUJVDAZh41L6e/vo7+0jqEAYNQjqkN6f"
 b64 (9) = "TtaGvwFD5da9qcSGoAFh5Al+wu3C/X9/epmhwbYL3n8Y5sLDRTK7D5NJD25f9O2e7svXb6Kv6+uk"
 b64(10) = "enoYOXpEdgzsdPwCL7C145z67DkAAAAASUVORK5CYII="

 ' Trier la sélection (icon_07.png)
 b64 (0) = "iVBORw0KGgoAAAANSUhEUgAAAB4AAAAbCAYAAABr/T8RAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A"
 b64 (1) = "AAAAMyd88wAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9kMHRYGHbORkZkAAAUxSURBVEjH"
 b64 (2) = "1ZZdbBRVFMd/d2Z3drvT/bDQdttCa9UWrQjWxESljQgUEwVBJH6gIMSIMTHygA+KCQm+GJ80xK8Y"
 b64 (3) = "An5EE4PRQDSACdoC0lAjLS20ttBKgW2xW7bbpXR3Zj+OD5WVKkiLD8SbTHIzM/f+cs6593/+Srg+"
 b64 (4) = "Q7tOXBz/dYPI8AUREU719qJpCjPXi2l6cDoNdF3nBp9HXW6dmmyqw5GYJBIJjnd1cra/D9uyUJpi"
 b64 (5) = "RkUFpmli2zbxeJyBcBjT66OqaiZmbi55flNdEzgciUlrSzP9odNMnToFr9ePYTgRAaUUfn+AvLwA"
 b64 (6) = "g4MRdF0nN9cknU7T3d2NKEXVzFkUTPGrSYHDkZjs/OYr7qquRtedjIyMYNs2lmUhIrhcLoLBIB5P"
 b64 (7) = "DhcujGIYBoZh4HK5EMkQj4/S9/sAVbffkU39hGrcdKiRmppaUskUlmWhaRpKKTRNw7ZtQqEQ3d0n"
 b64 (8) = "0HUNp9NJZeUMCguDZDKZP6P3Yp38jVQqNblT3d8Xwuf1ZmEHD/7E5s3v0Nh4AJ/PZMmSRfh8uRw+"
 b64 (9) = "/As7d+5g6dJHWLZsKU1NTSil0HUdy06i6/pfm8oEno7jPVJf3yC9vaelrm6hAOLz+WTFihWyadMm"
 b64(10) = "Wb9+vVRWVo5bpmmaLF68WMLhQdm3b7/0nOqTS3+Y8OFq2H9QDF0xNBShvr6ehoYGWltbSSQSAMyb"
 b64(11) = "N4/ly5dTUFCAz+fD6/VyY1kZHR0dFJaUUXXrLeqar9O33+0SnQzl5eWUlpVhWRaRSISBgQEcDgeF"
 b64(12) = "hYV4vV5cLhdKKc6cOcPQcIyikukE1zzLtt1bzbWqeHTSAnL7zFm0HP6ZdDqDbVkYhkEwGMTv96MA"
 b64(13) = "p2HgcDgwDAOlFKaZy+m+s+QaLs5Hf+cidNLg8rISFe88IWdO9mAYToLBIMlUCtu2UUohIkgmgwLS"
 b64(14) = "GaG55Qj3zKkl9vwTlB1qVpeVTDVW8yuOp55+hocXPcLC/AKKioo5duQwpmnicrtRQCqZRDEmJvF4"
 b64(15) = "nJbG3dw99zFCG15g1vbv1L82CRGhra0NgNhgLyNDIX7rauXQgb2UFOTx4fvv0vDjD9i2jW64CPX3"
 b64(16) = "k0mn0XSdVCpFKpVidDRO/b79VN+/jPbX1zD7vc+1q3anZDKZnSfOnyVxfgCvO83NpXlseGUtAZ+H"
 b64(17) = "9o52YrEYlTNuY/DcEIPnImhKkUwmiUajNOzfR+3c+RRODagHPvhaE3X5TDr+Dh4dHc2CLx2ls5bQ"
 b64(18) = "fGAH1TVLmD37Tu659z6CxcVYVgK3283w8DCBQABNd5CTkzOWQXXl8o2LuKmpiXg8DkCoP0yoP5yF"
 b64(19) = "Nu7ZQnXNGHzp4odoPdLCtGmlIOBwOvF4POgOB+l0emIn9aKSABKNRmXXrl1Zgfno7VcFkMY9WwSQ"
 b64(20) = "Nze+KIA0H9ghgHy/t14GxtqkHG1rk+7ubtn2yadybviCXE0Ns5Mvvtw+7ttLL68TQL757K1x0JWr"
 b64(21) = "VgsgH3849r6tvUvCQ+ez4C1bt00InK3xgroH+eXIUU4c7yKRsHC7XZSX38SjK9fx5sYXee2ND1i5"
 b64(22) = "ajULFj7InJpaVq99DoBfO9rxB/wXrySZdGZy1ic/z6eIxCQ/P59MRtC0sa4SLCri6ScfZ9Wza5hf"
 b64(23) = "t5CKigqKS6bR3NbO8a5OdMd4DUqmkpP3XPl5vn9c9PmDUWlua6f35EmCwSDTS0txu3PweDzkK4Vx"
 b64(24) = "7BhGZyfDUwL09PTg8ZhkMlePesIOxLYtHA4nhmFkXcS56Ii0HzvKwNk+ek+dorTsRubU1OJ251zR"
 b64(25) = "5F2z2fvf++rrBv4DiHtysN+EPqIAAAAASUVORK5CYII="

 ' Supprimer la sélection (icon_08.png)
 b64 (0) = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAAXNSR0IArs4c6QAAAtZQTFRFmAAA"
 b64 (1) = "eQIAjQEAjQEFlgADmAAEfAgJhQYImQIAkAUAjwUHfQoLhggJkQcAfw0FrgACrAAIiQsDkgkBmwcA"
 b64 (2) = "gQ8GgA8OuQAAtwAHnQkAkwwKnAoIpgcNsQYEngwBlA4LpwoVqAwHoBAAmBMOoBESqQ8QoRIToxQA"
 b64 (3) = "ohQNpBUGmhcQmhcWmxgQrhQApRcApRcGrxYArxYEphkHnhsSnxwTnx0Zqh0Cqx8DmiIYoyAWtB0I"
 b64 (4) = "rSAEtiABpSMXtB8euCEBmSkZoigXsiUIsSUQmioloyoRtikBvykIqS8Wpi8ypzAtwy0BqjEjrTIR"
 b64 (5) = "1iQqzycn2CUl2CUr0Cko2Scm0iopuDQXyi0syDIFsjcVqzkgpzk7tjoYzDYJzjcAuj0T2DcA0ToC"
 b64 (6) = "vUAWrERB3TwAwUMQ1j8H3jg4yUMVnEtOp0s3t0ZB20IAy0UX4kEEzkcQ3UUBq09A5kQAtUxI4EcD"
 b64 (7) = "o1FU50YA4UgFzU0R00sU1EwV6kgAs1JVvFFH5UsK7EoBtFNW6E0A7ksDt1RStlRX70wEsldX8k8A"
 b64 (8) = "81AA9lIAwFtO91MAul1Xu15Yul5eu19fuGRmumZoxmZVvmlrv2pswGtt4GRlvW9txHVzuXh3xXZ0"
 b64 (9) = "wHl7p4F32HN0wnp8q4V7x3+Bs4Z+yICCr4h+xYSCqoyFtomBtY6Ey4mHvpCIzoyLy4+LvZWLrpqd"
 b64(10) = "zJKUxZaOr5ye0piZ1JqbuKWn05+euaaovKiqvqil7ZuewKqn2KSkwauoyqyry62s76Sk3K+s37Gu"
 b64(11) = "4LKv5rGw37ar5Lqv87a457ur5ryy6b2t5L+t67+v6sC268G36MOx58W48MOz7sS58MPG5cfG4MnG"
 b64(12) = "zc/L4crHz9HO48zJ0NLP5s7L0tTR48/R09XS1NbT5tLU1tjV6NPW2NrW2tzZ293a3N7b3d/c3uDd"
 b64(13) = "3+He4OLf4eTg4+Xh5efk5ujl5+nm6Orn6evo6uzp7e/r7vDt7/HurtYfJQAAAAF0Uk5TAEDm2GYA"
 b64(14) = "AAABYktHRACIBR1IAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH2QweBzM3xUr8UAAAAaBJ"
 b64(15) = "REFUKM9jYCAHbEsN8vf3BYJAMPCbchgivuf8vr0oYP+B2WCJ0E3r0cAOW7CE2IoVK1avW7kCDFau"
 b64(16) = "W7dixQYVsIT4ggVb33/YvGgBECza+OH91gVr5MESMjOmXf/48d3WmdOmzdzy5v3H69OWqYIl+CdN"
 b64(17) = "nHrv/dtXO6dO3f7i1Zs7UyfOUwZLCPT29PTdfP3q+e5dT54+v9zX0zNHCyyh0FRVVdd1+fmTxw8f"
 b64(18) = "PrrY3djSN0kOLCHtEZlYWN1x4fH9+/cvT+jI9OSS5AJLqHMysWg4hSx+eP/2rfnW+mrCnHLMYAlV"
 b64(19) = "Tk5hXctZj+7fv3Xt2lygDIeSIESCl0XNYOHzJw+PHbl06dYSS11hbR6whJEQh95SoKNO19cev3H/"
 b64(20) = "6SpTWWN2sISJkPDy9+/fnK1pba898fTV+7VqFnxgCXMh4f0fP57LKmnrrM078/7jQTUbiIS9EIfh"
 b64(21) = "oZPRcTmVtSVJ8acOWcm6iIAl8jWlDB3dwuKz8krzUmK8XM00vEXBEtMzHNzDY5OzyyoqynPTEqJ8"
 b64(22) = "IpzTIVFYzMaIArjTyUohAP1bx/HSBLw/AAAAAElFTkSuQmCC"
Pour peu que l’éditeur en question permette la sélection verticale (cas de Writer même si, en l’occurrence, je me suis servi de mon SciTE chéri et adoré) et que l’on s’attache à positionner le code en respectant scrupuleusement l’alignement des chaînes, on peut alors remplir les indexs tabulaires de b64() par paquets de dix en ayant copié/collé les chiffres « 0123456789 » en vertical. Astuce de fainéant j’en conviens... Des 7989 octets de mes PNG d’origine, mon fichier texte culmine à 11924 ce qui ne me semble pas encore devoir fouetter un chat pour les dix icônes que cela transporte gaiement...

On est donc en possession de chaînes de caractères qui peuvent trouver place dans le code Basic d’OpenOffice.org. Mais ces chaînes, par définition, ne sont pas binaires ! Il faut donc procéder à une opération de décodage avant de les écrire sur le disque dur de l’utilisateur... Le Web regorge de code traitant la traduction en base 64. Mais je n’ai rien trouvé qui soit écrit dans le langage Basic d’OpenOffice.org [Cf. infra édit du 03/01/10]. Alors j’ai traduit une fonction écrite à l’origine en Visual Basic mais qui fonctionne très bien dans mon petit contexte perso-à-moi-tout-seul... J’aurai évidemment préféré partir de scripts JavaScript mais ceux-ci utilisent pour cette fonction des opérateurs binaires que ne possède pas notre bon vieux Basic. Le code est plus verbeux puisque là ou il fallait vingt lignes à JavaScript, il en faut un peu plus du double à Basic d’OpenOffice.org.

Une fois connu le répertoire temporaire de l’utilisateur (merci Dude), le script recherche si un dossier nommé « smcjDialogPics » existe à l’intérieur et, si ce n’est pas le cas, le crée. Afin d’accélérer le traitement de l’ouverture du dialogue après une première fois un peu lente (c’est toujours lent la première fois...), les fichiers PNG ne sont écrits-là qu’une seule fois. À charge à l’utilisateur de faire le ménage dans son dossier temporaire quand bon lui semblera.

On aurait pu croire que l’instruction Basic « Open fichier As Binary » fasse l’affaire pour écrire des valeurs de ce type comme c’était le cas du temps béni où votre serviteur se vautrait sans complexe dans le toutefois peu regretté GWBasic (Ahr ! Cheunesse et Zoouvééniiir !). Mais comme le fait très bien remarquer Bernard Marcelly autant dans son ouvrage de référence que sur le présent forum, il n’en est rien. Aussi l’écriture de fichiers binaires relève un peu de la croix et la bannière même si, ici comme en bien d’autres endroits, on sait gré à l’auteur de fournir des solutions clé en main qui ont le mérite de fonctionner avec très peu d’adaptation.

Il est aussi notable que, Basic ne possédant pas de type Byte (mais seulement Integer), les valeurs binaires décuplent la taille des fichiers écrits dans le répertoire temporaire. Ce n’est pas important pour des fichiers d’icônes qui, de toute façon, ne doivent pas envahir le code Basic puisque leur traduction en base 64 les fait déjà enfler, mais c’est quand même impressionnant d’en prendre la mesure effective en les re-moulinant, par exemple, dans un logiciel comme The Gimp pour en goûter la comparaison...

Voilà ; ce n’est pas sans plaisir que je coche [Resolu] envoyant [Issue] dans les choux gras du domaine du superflu...

Sans oublier de souhaiter une Bonne Année à tutti,
;-)

[Édit du 03/01/10]
Une bien meilleure fonction (beaucoup mieux écrite que ma traduction à partir de V.B.) de décodage de la Base64 est disponible ici ; j’ai évidemment mis ma pièce jointe à jour. On trouvera aussi sur la même page une fonction de codage qui peut évidemment s'avérer utile, infime travail de l'immense Danny Brewer.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 3.5.3.2 sous GNU-Linux Mageia 2.