Page 1 sur 1

[..] Appeler un GIF d'une DLL pour l'afficher sur un GUI

Posté : lun. 10 nov. 2008 05:23
par Pollux
STATUT: Non résolu (11/11/2008 - 00:46)

Bonjour à tous/toutes.

Ayant suivi le tutoriel sur l'insertion de ressources dans une DLL, j'ai pu stocker mes images bitmap pour les utiliser par la suite, sans problèmes.

J'ai voulu ensuite m'essayer à l'insertion de GIF (réussie) dans la DLL pour ensuite m'en servir pour les afficher en tant qu'images sur un GUI (échec).
J'ai essayé d'appeler le GIF en utilisant la fameuse fonction SetBitmapResourceToPicCtrl mais rien à faire. Dans le tutoriel il est précisé que l'on peut utiliser cette fonction pour "des images d'un autre format" que les icônes. Bref rien à faire, lorsque j'appelle mon GIF rien ne se passe.
(Je ne pose pas la question de la transparence car je pense que si l'on arrive à appeller le GIF de la DLL, la transparence marchera impec)

Si quelqu'un a une idée ou un conseil à me donner, je lui en serait très reconnaissant ! Car là je me prend le chou et je ne trouve pas :evil:


Merci d'avance.

NB: pour le GIF, le type que j'ai mis est RCDATA, dans le fichier ressource

Re: [..] Appeler un GIF d'une DLL pour l'afficher sur un GUI

Posté : lun. 10 nov. 2008 13:51
par Tlem

Re: [..] Appeler un GIF d'une DLL pour l'afficher sur un GUI

Posté : lun. 10 nov. 2008 18:41
par Pollux
Bonsoir,

J'ai évidemment parcouru le tutoriel de long en large avant de venir ici (pour ne pas déranger inutilement :wink: )
Etape par étape, j'ai donc fait:

• TESTGIF RCDATA "Exemple.gif" dans mon fichier ressource.

• Transformé mon fichier *.rc et *.res puis insertion de ce dernier dans ma dll (via les outils du tutoriel)

• Ensuite (et c'est là le problème), j'utilise la fonction d'appel des ressources dans la dll:

SetBitmapResourceToPicCtrl($gui, $pic, 50, 50, 50, 100, "MaDll.dll", "TESTGIF", "str")

Et rien ne se passe malheureusement :(

Re: [..] Appeler un GIF d'une DLL pour l'afficher sur un GUI

Posté : lun. 10 nov. 2008 19:47
par jbnh
Un bête question: tu as donc dans ton code:

Code : Tout sélectionner

SetBitmapResourceToPicCtrl($gui, $pic, 50, 50, 50, 100, "MaDll.dll", "TESTGIF", "str")
Mais as tu bien la gui qui va avec et la fonction complète? comme dans l'exemple:

► Afficher le texte

Re: [..] Appeler un GIF d'une DLL pour l'afficher sur un GUI

Posté : lun. 10 nov. 2008 21:22
par Tlem
Hummm effectivement, ça ne fonctionne pas car ce n'est pas une image Bitmap.
Il va falloir que je complète le tuto. ;)

Pour utiliser d'autres ressources que les images Bitmap, il vous faut l'UDF ressource.au3 disponible sur ce post : http://www.autoitscript.fr/forum/viewto ... 3093#p3093

Regardez dans le code de cet UDF le nom des variables pour les différentes ressources utilisables.

Voici le code pour votre cas (testé et fonctionnel) :

Code : Tout sélectionner

#include "resources.au3"
 
$gui = GUICreate("Test d'utilisation de ressources",250,150)
$pic = GUICtrlCreatePic("",50,50,50,100)
GUISetState(@SW_SHOW)

_ResourceSetImageToCtrl($pic, "TESTGIF", $RT_RCDATA, "MaDll.dll")

While 1
    If GUIGetMsg() = -3 Then Exit
WEnd

Re: [..] Appeler un GIF d'une DLL pour l'afficher sur un GUI

Posté : lun. 10 nov. 2008 22:55
par Pollux
Arf, et dire que j'avais lu ce tutoriel :s Mais comme il ne faisait pas intervenir de DLL je l'avais laissé tombé :mrgreen:
Ca marche impeccable !
Merci beaucoup à vous deux, vous me sauvez la vie :wink:

Problème [R]ésolu

EDIT: Ou pas!
Comme je le craignais, il me fait un caprice avec la transparence

Le code:

Code : Tout sélectionner

$BG = GUICreate("Test",500,150, -1, -1)
WinSetTrans("Test", "", 0)
$Main_Gui = GUICreate("", 500, 150, -1, -1, $WS_POPUP, $WS_EX_TOPMOST + $WS_EX_LAYERED + $WS_EX_MDICHILD , $BG);
$pic = GUICtrlCreatePic("", 0, 0, 500, 150)
_ResourceSetImageToCtrl($pic, "SPLASH", $RT_RCDATA, "MaDll.dll")
GUISetState(@SW_SHOW,$BG)
GUISetState(@SW_SHOW,$Main_Gui)
 
Mon souci: http://img139.imageshack.us/img139/8949/probou1.jpg

En haut, le gif d'origine, avec le pixel en haut à gauche qui définit ma couleur de transparence, le vert (#00FF00), échelle 2:1
En dessous, en taille 1:1, le GIF tel qu'il apparait. Le script prend en fait la bordure noire qui entoure mon image comme couleur de transparence, pourtant il ne devrait pas vu que j'ai défini le pixel en haut à gauche comme vert (et pas noir)
Si certains se sentent à essayer, j'y ait joint le fichier concerné.

Merci d'avance

Re: [..] Appeler un GIF d'une DLL pour l'afficher sur un GUI

Posté : mar. 11 nov. 2008 11:33
par Tlem

Code : Tout sélectionner

#include <WindowsConstants.au3>

$BG = GUICreate("Test",500,150, -1, -1)
$MG = GUICreate("", 500, 150, -1, -1, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW,$WS_EX_TOPMOST,$WS_EX_LAYERED), $BG)
$pic = GUICtrlCreatePic("SplashBG.gif", 0, 0, 500, 150)
GUISetState(@SW_SHOW)
Sleep(3000)
Fonctionne chez moi, mais vous ne pourrez utiliser WinSetTrans pour l'afficher en Splash.
Utilisez un autre UDF (du forum exemple de script) pour le faire.

Re: [..] Appeler un GIF d'une DLL pour l'afficher sur un GUI

Posté : mar. 11 nov. 2008 12:22
par Pollux
Il m'est en effet arrivé d'utiliser la fonction WinSetTrans, mais le problème est avant cela, car si j'appelle un gif situé dans un répertoire (donc ni dans une DLL ni dans un fichier ressource) la transparence marche impec.
En revanche, dès que j'appelle un gif d'une dll, la transparence ne marche plus. Dans votre exemple il n'y a pas l'appel de la dll pour charger le gif à l'intérieur, enfin peut-être que j'ai raté une étape, mais pour l'instant ça ne passe pas :?

Re: [..] Appeler un GIF d'une DLL pour l'afficher sur un GUI

Posté : mar. 11 nov. 2008 12:36
par Tlem
Effectivement, ça ne fonctionne pas !
Dans ce cas, pour l'instant, utilisez la commande FileInstall pour copier le fichier dans un répertoire temporaire.

PS: Merci de réduire l'image de votre signature.

Re: [..] Appeler un GIF d'une DLL pour l'afficher sur un GUI

Posté : mer. 12 nov. 2008 11:25
par Tlem
Pouvez-vous utiliser la fonction _ResourceSaveToFile de l'UDF Ressource.au3 afin de sauvegarder votre image GIF, puis d'utiliser celle-ci normalement pour voir si la transparence n'a pas été supprimée ?