Page 1 sur 1

[R] $BS_BITMAP et DLL

Posté : ven. 28 déc. 2007 21:02
par arrkhan
Salut à tous,

je bosse sur une appli depuis au moins 2 mois (j'avance pas vite, je suis novice ^^) et pour me simplifier la vie avec les fileinstalls d'icones, j'ai choisi de les placer dans une dll vide, jusque là pas de problème avec les :

Code : Tout sélectionner

Global $icon = -2
GUICtrlCreateIcon("madll.dll", $icon, 64, 10)
mais je n'arrive pas à aller chercher une image bitmap pour l'utiliser :

Code : Tout sélectionner

GUICtrlCreateButton("", 285, 65, 82, 33, $BS_BITMAP)
GUICtrlSetImage(-1, "madll.dll", 0)
auriez vous une piste ?, j'ai parcouru le forum officiel sans succés...

Posté : sam. 29 déc. 2007 00:24
par Tlem
A première vue (D'après la doc), la commande GUICtrlSetImage ne peut extraire que des icônes !

Elle ne vous sera donc d'aucune utilité dans votre cas.

J'ai chercher quelque chose d'équivalent, et je n'ai trouvé que ceci :

Code : Tout sélectionner

#Include <WinAPI.au3>
_WinAPI_LoadBitmap($hInstance, $sBitmap)
La doc n'est pas très explicite quant à sont utilisation, mais bon ...

Posté : sam. 29 déc. 2007 00:43
par arrkhan
arf, tant pis, merci Tlem

l'utilisation d'une dll est quand même bien pratique même si ça augmente un peu le poids de l'exe +160 Ko

Posté : sam. 29 déc. 2007 00:48
par Tlem
Pourquoi l'utilisation du FileInstall vous rebute tant ?

C'est pourtant une fonction bien pratique, qui permet justement de s'affranchir des fichiers additionnels.

Posté : sam. 29 déc. 2007 00:53
par arrkhan
ben j'ai rien contre le fileinstall en particulier, c'est juste que je voulais créer une dll commune pour toutes mes applis sans m'embeter a devoir faire des installs dans @tempdir et des dirremove a tout va

Posté : sam. 29 déc. 2007 01:04
par Tlem
Oui bien sur.

Dans ce cas, 2 solutions :

1 - Décompresser vos fichiers BMP au lancement de votre EXE, et vous ne les supprimés que lors de la fermeture du programme.
Un fichier .au3 additionnel (A rajouter dans les #include) pourrait ce charger de ça grâce à une ou deux fonctions programmée d'avance.
Il vous suffit alors de rajouter ce fichier .au3 à vos autres projets pour ne pas avoir à tous refaire.

2 - Créer un répertoire dans lequel vous placez vos images, et lors de l'utilisation du script, celui-ci va les chercher au bon endroit.
Pour faire propre, un installateur avec Innosetup, et le tour est joué !

Cela dit, il y à sûrement une solution avec la dll, regarder ce que je vous ais indiquer précédemment.

Posté : sam. 29 déc. 2007 03:10
par arrkhan
j'aimais bien l'idee d'une appli totalement portable que propose AutoIt
mais je sens que je vais finalment faire une appli avec install inno et utilisation registre dès que j'aurais appris a me servir d'inno, jusqu'ici je me servais d'Iexpress ^^

Posté : sam. 29 déc. 2007 11:43
par Tlem
Après avoir regarder, je pense que _WinAPI_LoadImage doit correspondre à ce que vous avez besoin.

Voici ce qu'en dit l'aide :

Code : Tout sélectionner

Description ...: Loads an icon, cursor, or bitmap
Syntax.........: _WinAPI_LoadImage($hInstance, $sImage, $iType, $iXDesired, $iYDesired, $iLoad)
et voici le code que vous trouverez dans Winapi.au3 :

Code : Tout sélectionner

Func _WinAPI_LoadImage($hInstance, $sImage, $iType, $iXDesired, $iYDesired, $iLoad)
    Local $aResult, $sType = "int"

    If IsString($sImage) Then $sType = "str"
    $aResult = DllCall("User32.dll", "hwnd", "LoadImage", "hwnd", $hInstance, $sType, $sImage, "int", $iType, "int", $iXDesired, _
            "int", $iYDesired, "int", $iLoad)
    Return $aResult[0]
EndFunc   ;==>_WinAPI_LoadImage
 

Posté : sam. 29 déc. 2007 12:12
par Tlem
Ca y est, après pas mal de recherche, voici votre bonheur : http://www.autoitscript.com/forum/index ... t&p=255162

Je l'ai tester, et ça fonctionne.
Mais je crois toujours qu'il est possible de faire plus simple avec les api.

Posté : sam. 29 déc. 2007 13:08
par Tlem
arrkhan, pouvez-vous nous expliquer comment vous avez créer votre DLL de ressource.

- Logiciel(s) utiliser.
- Procédure(s) et manipulation(s).

Cela pourrait faire partie des tutoriels, car bon nombre d'utilisateurs utilisent des ressources, et ça pourrait être l'occasion d'expliquer comment faire pour mettre ça dans une DLL.

J'ai bien trouvé une procédure avec Dev-C++, mais c'est pas des plus 'simple', donc si vous avez un soft ou autre chose de plus rapide, nous sommes preneur. ;)

Posté : sam. 29 déc. 2007 17:34
par arrkhan
en fait j'avais deja vu sur le net comment faire des dlls avec c++, mais n'etant pas connaisseur du c, j'ai passé mon chemin....

j'ai fait on ne peut plus simple pour la créer:
je suis aller faire un tour dans System32, j'ai choisi la dll la plus légére que je pouvais (une dll creative en fait), j'ai vidé tout ce qu'elle avait dans le bide hormis le "version info" que j'ai adapté à mes besoins, avec ResHack. puis toujours avec ResHack j'ai ajouter mes fichiers d'icones et mes images tout simplement, rien de bien compliqué en somme, une dll n'etant qu'un contener...

j'editerai pour vous mettre une dll vide si vous voulez.

Edit: Voici le lien pour Dl une Dll vide http://www.atpconcept.com/Dll_Vide.dll

j'y ai laissé mes info dans version info, remettez les à votre sauce.

Tlem, serait il possible que tu joigne le code que tu as utilisé pour y arriver ?

Posté : sam. 29 déc. 2007 20:45
par Tlem
arrkhan a écrit :Tlem, serait il possible que tu joigne le code que tu as utilisé pour y arriver ?
Pas de problème, voici même le lien : http://www.codeproject.com/KB/DLL/ResourceOnlyDLL.aspx

Posté : dim. 30 déc. 2007 00:38
par Tlem
Après pas mal de recherches (C'est un sujet qui me passionne aussi ;) ), j'ai trouver bien mieux que le lien ci-dessus.

J'ai donc créer un Tutoriel, et mis en ligne les outils nécessaires.

Je pense que ça en intéressera plus d'un, donc la prochaine étape, pourrait être la création d'un script pour automatiser tout ça. :)

Posté : dim. 30 déc. 2007 05:25
par arrkhan
merci Tlem, mais je parlais du script pour faire fonctionner un bitmap issu d une dll

Posté : dim. 30 déc. 2007 11:57
par Tlem
arrkhan a écrit :merci Tlem, mais je parlais du script pour faire fonctionner un bitmap issu d une dll
Tout à fait, et l'UDF SetBitmapResourceToPicCtrl (Dont j'ai donné le lien plus haut) vous permet justement de récupérer les Bitmaps d'une dll, et de l'attribuer à un contrôle.

Re: […]$BS_BITMAP et DLL

Posté : lun. 28 janv. 2008 20:57
par sylvanie
Bonsoir, et merci pour ce lien.
Perso, ça va pas mal révolutionner mes scripts d'utiliser des dll pour syocker les images ^^
Mais il est vrai que le chm côté winapi est maigre niveau illustration.
Merci pour ce lien Tlem