Page 1 sur 1
[C] Problème de transparence d'une image sur un graphic
Posté : dim. 31 mai 2015 19:05
par parazitenew
Bonjour,
J'ai mis un logo (format ico avec de la transparence) par dessus un GuiCtrlCreateGraphic(), la couleur de fond du graphic est différente de celle du GUI. La couleur de fond qui apparaît derrière le logo est celle du GUI et non du graphic. Problématique.
J'ai lu dans l'aide à propos du graphic que si on voulait superposer un control par dessus il fallait mettre GuiCtrlSetState($GUI_DISABLE), c'est ce que j'ai fait, pour le graphic, puis pour l'icone, puis les deux en même temps et ça n'a pas marché. La couleurs de fond de l'icone était toujours celle du GUI au lieu celle du graphic.
Evidemment les solutions alternatives existent, comme créer une image de la taille du graphic et mettre l'icone par dessus avec Gimp par exemple et l'ajouter en temps que bmp. Mais je veux tout de même comprendre ce problème.
Merci.
Re: [..] Problème de transparence d'une image sur un graphic
Posté : mar. 02 juin 2015 22:16
par sozary
Je sais pas si j'ai bien compris ton problème, mais si tu veux placer un élément à l'écran tel que ton icône, tu peux utiliser GdiPlus.
Bon je suis pas un pro, mais grâce aux scripts que m'ont fournis les membres du forum, je sais faire plein de choses maintenant

!
Donc le script que je t'ai passé permet à ton icône (que tu places sur un graphique (blanc ici)) de conserver la couleur de transparence de ton graphique, et de ne pas prendre la couleur de la GUI (étant rouge).
En espérant t'avoir aidé!
Re: [..] Problème de transparence d'une image sur un graphic
Posté : mar. 02 juin 2015 22:55
par parazitenew
Merci pour la réponse, mais dans ton script il n'y a aucune référence à l'icone.
Un screenshot qui illustre mon problème.
Re: [..] Problème de transparence d'une image sur un graphic
Posté : mer. 03 juin 2015 13:44
par sozary
Tu veux un résultat comme la photo en annexe?
Si oui je vois pas où est le problème avec mon code...
J'ai fait la même chose avec une image d'arbre à fond transparent et fond ciel, le tout sur une GUI rouge, ce n'est pas ce que tu voulais?
Télécharge le fichier ici (il est trop volumineux pour le site, c'est une belle photo d'arbre

).
Re: [..] Problème de transparence d'une image sur un graphic
Posté : mer. 03 juin 2015 13:59
par mikell
C'est vrai qu'avec les GUICtrlCreateIcon la transparence c'est un réel problème
Ya que 2 solutions : utiliser GDI+ , ou créer un "fond" au controle en le scotchant sur une gui fille de taille et couleur voulues
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinApi.au3>
$Form1 = GUICreate("gui", 300, 150)
$a = GUICtrlCreateGraphic(10, 10, 200, 100)
GUICtrlSetBkColor(-1, 0xECE9D8)
$x = GUICreate("", 32, 32, 30, 30, $WS_CHILD, 0, $Form1)
GUISetBkColor(0xECE9D8)
$icon = GUICtrlCreateIcon("shell32.dll", 7, 0, 0, 32, 32)
_WinAPI_SetParent($x, $Form1)
GUISetState()
GUISetState(@SW_SHOW, $Form1)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
ou carrément utiliser l'udf Icons.au3
Re: [..] Problème de transparence d'une image sur un graphic
Posté : mer. 03 juin 2015 18:36
par sozary
Mikell, mon script était bon au fait?
Re: [..] Problème de transparence d'une image sur un graphic
Posté : mer. 03 juin 2015 21:08
par mikell
Oui, il est très basique et il y manque des trucs mais dans le principe il est bon
Ce que je lui reprocherais c'est juste de ne pas répondre à la question posée : tu fais un GUICtrlCreatePic où tu superposes 2 png, alors que la question parle d'une icone sur un GUICtrlCreateGraphic
Certes ce sont des détails mais ils ne sont pas anodins

Re: [..] Problème de transparence d'une image sur un graphic
Posté : jeu. 04 juin 2015 12:05
par parazitenew
Bonjour,
J'ai testé la solution de la fenêtre fille. Elle marche, mais ne serait-ce pas lourd pour le script? Ne risquerait-il pas d'y avoir des complications plu tard? Surtout que les 2 GUI partagent les mêmes constantes. Comme le $GUI_EVENT_CLOSE.
J'ai testé le GDIPlus, avec_GDIPlus_GraphicsFillRect(), toujours le même problème, l'icone ne prend pas le fond du rectangle.
J'ai testé l'UDF Icons.au3 que j'ai téléchargé depuis le forum ENG. ça n'a pas marché. Il existe 3 fonctions, celle qui m'intéresse c'est:
_SetIcon($hWnd, $sIcon, $iIndex = 0, $iWidth = -1, $iHeight = -1, $hOverlap = 0)
D'après les paramètres elle devrait prendre en compte les icones lu à partir des dll. Et d'après la description:
► Afficher le texte
Code : Tout sélectionner
; $hWnd - The control identifier (controlID) or handle as returned by a GUICtrlCreateIcon() function.
; $sIcon - Name of the file containing the icon.
; $iIndex - Index of the icon in the file.
La fonction est sensée être écrite comme ceci:
► Afficher le texte
Code : Tout sélectionner
$ico = GUICtrlCreateIcon("","",1255,605,100,31)
_SetIcon ($ico, @ScriptDir & "\" & $nom_dll, 16, 100,31)
Mais ça ne change rien, j'ai choisi un fond bleu exprès pour qu'il soit visible:
Re: [..] Problème de transparence d'une image sur un graphic
Posté : jeu. 04 juin 2015 14:54
par mikell
Hum bizarre que l'udf Icons.au3 ne marche pas vu qu'elle a été conçue précisément pour résoudre le type de problème que tu évoques. Tu as testé avec des icones de dll système ou juste avec les icones d'une dll custom ?
Pour la gui fille, je ne pense pas que ce soit particulièrement lourd pour le script, tous les controles "classiques" étant en fait des gui filles (directement gérées par windows)
Le seul souci pourrait venir du fait qu'on n'a pas une "vraie" transparence, parce qu'on ne fait que donner à l'icone une couleur de fond identique à celle du GuiCtrlCreateGraphic
Pour les solutions alternatives à base de GDI+ yen a certainement plusieurs qui marcheraient (ex. la solution sozarienne) mais vu que tu n'as pas posté de code testable on ne peut qu'émettre des hypothèses ^^
Re: [..] Problème de transparence d'une image sur un graphic
Posté : jeu. 04 juin 2015 18:54
par parazitenew
Hum bizarre que l'udf Icons.au3 ne marche pas vu qu'elle a été conçue précisément pour résoudre le type de problème que tu évoques. Tu as testé avec des icones de dll système ou juste avec les icones d'une dll custom ?
J'utilise ma propre dll
Pour les solutions alternatives à base de GDI+ yen a certainement plusieurs qui marcheraient (ex. la solution sozarienne) mais vu que tu n'as pas posté de code testable on ne peut qu'émettre des hypothèses ^^
Premier code:
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstants.au3>
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#Include <WindowsConstants.au3>
#Include <Icons.au3>
GUICreate("",500,500)
GUISetBkColor(0x2E64FE)
GUICtrlCreateGraphic(50,50,200,200)
GUICtrlSetBkColor(-1,0x0)
;GUICtrlCreateIcon(@ScriptDir & "\a.dll",1,80,80,100,31)
$ico = GUICtrlCreateIcon("","",80,80,100,31)
_seticon($ico,@ScriptDir & "\a.dll",0,100,31)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
Deuxième code:
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstants.au3>
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#Include <WindowsConstants.au3>
#Include <Icons.au3>
#Include <GDIPlus.au3>
#include <WinAPI.au3>
$gui = GUICreate("",500,500)
GUISetBkColor(0x2E64FE)
GUISetState(@SW_SHOW)
;GUICtrlCreateGraphic(50,50,200,200)
;GUICtrlSetBkColor(-1,0x0)
_GDIPlus_Startup()
$graphic = _GDIPlus_GraphicsCreateFromHWND ($gui)
_GDIPlus_GraphicsFillRect($graphic,50,50,200,200)
;GUICtrlCreateIcon(@ScriptDir & "\a.dll",1,80,80,100,31)
$ico = GUICtrlCreateIcon("","",80,80,100,31)
_seticon($ico,@ScriptDir & "\a.dll",0,100,31)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
Aucun ne marche.
Je voulais joindre la dll mais l'extension n'est pas autorisée.
edit:
Re: [..] Problème de transparence d'une image sur un graphic
Posté : jeu. 04 juin 2015 21:21
par mikell
parazitenew a écrit :Je voulais joindre la dll mais l'extension n'est pas autorisée.
Ben change l'extension ou fais un zip ^^
Re: [..] Problème de transparence d'une image sur un graphic
Posté : jeu. 04 juin 2015 23:03
par parazitenew
mikell a écrit :parazitenew a écrit :Je voulais joindre la dll mais l'extension n'est pas autorisée.
Ben change l'extension ou fais un zip ^^
C'est fait. J'ai édité le post précédent.
Re: [..] Problème de transparence d'une image sur un graphic
Posté : ven. 05 juin 2015 21:12
par mikell
Effectivement...
Le problème semble inhérent au GUICtrlCreateIcon donc personnellement je ne vois pas d'autre solution que la gui fille
Re: [..] Problème de transparence d'une image sur un graphic
Posté : ven. 05 juin 2015 22:10
par parazitenew
Compris.
Y a-t-il une balise pour dire que le sujet est clos sans pour autant dire que c'est résolu?

Re: [..] Problème de transparence d'une image sur un graphic
Posté : ven. 05 juin 2015 22:20
par mikell
Oui, balise [C]
