Page 1 sur 1

Changer image PNG suivant la sélection du menu déroulant

Posté : jeu. 19 juil. 2018 09:19
par LaTMoT
Bonjour à toutes et à tous,

De nouveau de retour pour une 2ième question :D

J'ai un menu déroulant clic droit avec lequel j'ai eu un problème résolu ici https://www.autoitscript.fr/forum/viewt ... =3&t=14916 par mikell que je remercie encore pour ses explications :wink:

Suivant la sélection, il m'affiche une image différente. J'y suis arrivé sans trop comprendre le code :lol: MAIS :

J'ai tricher, car quand je sélectionne une valeur dans le menu, je me retrouve avec les images superposées dans $MyTabsGui. Je met donc un rectangle blanc avant de modifier l'image. C'est pas beau du tout, mais ça marche.

Voulant faire un peu plus propre, si l'on pouvait m'expliquer comment je suis censé procéder car comme déjà dit j'ai vraiment du mal à comprendre ce que je fais avec AutoIt.

Merci.

Dossiers et quelques fichiers Tab
MyTabs.zip
(44.57 Kio) Téléchargé 176 fois


Partie qui me pose problème.

Code : Tout sélectionner

Func SetImageBand()
				Local $aArray = StringSplit($Choix, '\', $STR_ENTIRESPLIT)
				Local $iRows = UBound($aArray, $UBOUND_ROWS) ; Total number of rows
				; Load PNG image
				_GDIPlus_StartUp()

 				; Efface le Logo-Band ENFIN NON MET UN RECTANGLE BLANC PAR DESSUS LE DERNIER LOGOBAND
				$hImage   = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Logo-Band.png")
				$hGraphic = _GDIPlus_GraphicsCreateFromHWND($MyTabsGui)
				_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 250, 1)

				; Affiche le Logo-Band
				$hImage   = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\" & $aArray[$iRows - 2] & "\" & $aArray[$iRows - 2] & "-Logo-Band.png")
				If $hImage = "0" then
					$hImage   = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Logo-Band.png")
				EndIf
				; Draw PNG image
				$hGraphic = _GDIPlus_GraphicsCreateFromHWND($MyTabsGui)
				_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 250, 1)
				; Clean up resources
				_GDIPlus_GraphicsDispose($hGraphic)
				_GDIPlus_ImageDispose($hImage)
				_GDIPlus_ShutDown()
EndFunc

Code en entier [Je sais ce n'est pas beau, mais j'essaye d'apprendre :) ] :

Code : Tout sélectionner

#include <Array.au3>
#include <AutoItConstants.au3>
#include <ButtonConstants.au3>
#include <Constants.au3>
#include <EditConstants.au3>
#include <file.au3>
#include <FontConstants.au3>
#include <GDIPlus.au3>
#include <GuiComboBox.au3>
#include <GuiConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiEdit.au3>
#include <GuiScrollBars.au3>
#include <GuiStatusBar.au3>
#include <Math.au3>
#include <MsgBoxConstants.au3>
#include <ScrollBarConstants.au3>
#include <StaticConstants.au3>
#include <StringConstants.au3>
#include <WindowsConstants.au3>

;~ Opt("MustDeclareVars", 1)

;~ DECLARATION VARIABLES GLOBALES
Global $hImage, $hGraphic

;~ CREATION DE LA FE?ETRE
Global $MyTabsGui 			= GUICreate("MyTabs", 800, 600,-1, -1, -1, $WS_EX_TOOLWINDOW + $WS_EX_WINDOWEDGE) ; TAILLE (800x600)
							  GUISetBkColor($COLOR_WHITE) ; SUR FOND BLANC

						      GUICtrlCreateLabel("TAILLE :", 50, 15, 45, 25) ; TEXTE

;~ CREATION DES BOUTONS
Local $FontSize				= 10
Local $SmallFontButton		= GUICtrlCreateButton("-1", 100, 10, 40, 25)
Local $NormalFontButton		= GUICtrlCreateButton("10", 140, 10, 40, 25)
Local $BigFontButton		= GUICtrlCreateButton("+1", 180, 10, 40, 25)
Local $CreationBoutonCours	= GUICtrlCreateButton("Vidéo du Cours", 690, 10, 100, 25)
							  GUICtrlSetState ($CreationBoutonCours, $GUI_HIDE) ; CACHER LE BOUTON CI-DESSUS

;~ CREATION DE LA ZONE DE TEXTE OU SERONT LES TABLATURES
Local $Edit					= GUICtrlCreateEdit("", 10,40,780,550, $ES_AUTOVSCROLL + $WS_VSCROLL + $ws_hscroll + $es_readonly)
							  GUICtrlSetFont(-1,10,800,default,'courier new') ; POLICE PAR DEFAUT ET TAILLE

;~ CREATION BOUTON "\" AVEC MENU DEROULANT CLIC DROIT AVEC EN ARBORESCENCE DOSSIERS / SOUS-DOSSIERS ET FICHIERS .TAB (FICHIER TXT)
Global $s[1000][2], $n
$boutonArbo = GUICtrlCreateButton("\",10,10,25,25)
Global $contexte = GUICtrlCreateContextMenu($boutonArbo)
parcourirDossier($contexte,@ScriptDir,"*.tab",3)
Redim $s[$n][2]

GUISetState(@SW_SHOW)

While 1
        $msg = GUIGetMsg()

;~ 		ACTION SUR LA SELECTION
		For $i = 0 to UBound($s)-1
			If $msg = $s[$i][0] Then
				GUICtrlSetState ($CreationBoutonCours, $GUI_HIDE) ; CACHER LE BOUTON SI PAS DE VIDEO DE COURS
				;MsgBox(64, "Choix", "Votre choix est " & $s[$i][1])
				GUICtrlSetData($Edit,"")
				$Choix = $s[$i][1]
				$iFile = Fileread($Choix)
				GUICtrlSetData($Edit,$iFile,1)
				_GUICtrlEdit_Scroll($Edit, $SB_TOP)

				SetTitleMyTabs() ; FUNC QUI MODIFIE LE NOM DE LA FENETRE : NOM [TITRE]
				SetImageBand() ; FUNC QUI AFFICHE LE LOGO DE L'ARTISTE
				ReadHeadFile() ; FUNC QUI VERIFIE QUE LES 4 PREMIERES LIGNES SONT DANS LE BON FORMAT
				LanceVideoCours() ; FUNC QUI VERIFIE SI LA VIDEO DU COURS EXISTE

			EndIf
		Next

;~ 		OUVRE LA TABLATURE AVEC L'EDITEUR DE TEXTE WINDOWS PAR DEFAUT
;~ 		For $i = 0 to UBound($s)-1
;~ 			If $msg = $s[$i][0] Then ShellExecute($s[$i][1])
;~ 		Next

        Select
            Case $msg = $GUI_EVENT_CLOSE
                _do_exit_stuff()
            Case $msg = $SmallFontButton
 				$FontSize = $FontSize - 1
				GUICtrlSetFont($Edit,$FontSize,800,default,'courier new')
            Case $msg = $NormalFontButton
				$FontSize = 10
				GUICtrlSetFont($Edit,$FontSize,800,default,'courier new')
            Case $msg = $BigFontButton
				$FontSize = $FontSize + 1
				GUICtrlSetFont($Edit,$FontSize,800,default,'courier new')
			Case $msg = $CreationBoutonCours ; LANCE LA VIDEO DU COURS
;~ 				Local $aArray = StringSplit($Choix, '\', $STR_ENTIRESPLIT)
;~ 				Local $iRows = UBound($aArray, $UBOUND_ROWS) ; Total number of rows
				ShellExecute(@ScriptDir & "\" & $aArray[$iRows - 2] & "\" & StringLeft ( $aArray[$iRows - 1], StringLen($aArray[$iRows - 1]) -4) & " [Cours].mp4")
		EndSelect
WEnd

func _do_exit_stuff()

    ; CE QUE JE VEUX QUAND LE PROGRAMME CE FERME

    Exit

endfunc

;~ FUNC QUI AFFICHE LES DOSSIERS / SOUS-DOSSIERS ET FICHIERS .TAB DANS LE MENU DEROULANT CLIC DROIT
Func parcourirDossier($sdd, $folder, $filter="*", $depth=-1)
   If Int($depth) > 0 Then
        Local $subFolders = _FileListToArray($folder,"*",2)
        If Not @error Then
            For $i = 1 To $subFolders[0]
;~ 				EXCLUSION DU REPERTOIRE _SAUV_ OU JE METS MES FICHIERS DE SAUVEGARDE AU3
				if $subFolders[$i] <> "_SAUV_" then parcourirDossier(GUICtrlCreateMenu($subFolders[$i],$sdd),$folder&"\"&$subFolders[$i],$filter,_Max($depth-1,-1))
;~                 parcourirDossier(GUICtrlCreateMenu($subFolders[$i],$sdd),$folder&"\"&$subFolders[$i],$filter,_Max($depth-1,-1))
            Next
        EndIf
        GUICtrlCreateMenuItem("",$sdd)
        Local $subFiles = _FileListToArray($folder,$filter,1)
        If Not @error Then
            For $i = 1 To $subFiles[0]
                $s[$n][0] = GUICtrlCreateMenuItem($subFiles[$i],$sdd)
                $s[$n][1] = $folder&"\"&$subFiles[$i]
                $n += 1
           Next
        EndIf
    EndIf
EndFunc

;~ FUNC QUI MODIFIE LA BARRE DE TITRE DE LA FENETRE AVEC LE NOM DU GROUPE ET LE TITRE DU MORCEAU
Func SetTitleMyTabs ()
	Global $aArray = StringSplit($Choix, '\', $STR_ENTIRESPLIT)
	Global $iRows = UBound($aArray, $UBOUND_ROWS) ; Total number of rows
	Global $iCols = UBound($aArray, $UBOUND_COLUMNS) ; Total number of columns
;~ 	REMPLIT LE TABLEAU AVEC LES DONNEES
	For $i = 0 To $iRows - 1
		For $j = 0 To $iCols - 1
			$aArray[$i][$j] = "Row: " & $i & " - Col: " & $j
		Next
	Next
	WinSetTitle($MyTabsGui, "", $aArray[$iRows - 2] & " [" & StringLeft ( $aArray[$iRows - 1], StringLen($aArray[$iRows - 1]) -4) & "]" & " - MyTabs") ; MODIFIE LE TITRE
EndFunc

;~ FUNC QUI AFFICHE LE LOGO DE L'ARTISTE DANS LA GUI SUIVANT CE QUI EST SELECTIONNER DANS LE MENU
Func SetImageBand()
;~ 				Local $aArray = StringSplit($Choix, '\', $STR_ENTIRESPLIT)
;~ 				Local $iRows = UBound($aArray, $UBOUND_ROWS) ; Total number of rows
				; CHARGE L'IMAGE PNG
				_GDIPlus_StartUp()

;~ 				EFFACE LE LOGO ENFIN NON, MET UN RECTANGLE BLANC PAR DESSUS LE DERNIER LOGO > A REVOIR
				$hImage   = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Logo-Band.png")
				$hGraphic = _GDIPlus_GraphicsCreateFromHWND($MyTabsGui)
				_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 250, 1)

;~ 				AFFICHE LE LOGO
				$hImage   = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\" & $aArray[$iRows - 2] & "\" & $aArray[$iRows - 2] & "-Logo-Band.png")
				If $hImage = "0" then
					$hImage   = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Logo-Band.png")
				EndIf
;~ 				MsgBox(64, "Choix", "Votre choix est " & $hImage)
				; DESSINE L'IMAGE PNG
				$hGraphic = _GDIPlus_GraphicsCreateFromHWND($MyTabsGui)
				_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 250, 1)
				; NETTOIE LES RESSOURCES
				_GDIPlus_GraphicsDispose($hGraphic)
				_GDIPlus_ImageDispose($hImage)
				_GDIPlus_ShutDown()
EndFunc

;~ FUNC QUI AFFICHE LE BOUTON SI LE FICHIER DU COURS DE GUITARE EXISTE
Func LanceVideoCours()
;~ 				Local $aArray = StringSplit($Choix, '\', $STR_ENTIRESPLIT)
;~ 				Local $iRows = UBound($aArray, $UBOUND_ROWS) ; Total number of rows

				If FileExists(@ScriptDir & "\" & $aArray[$iRows - 2] & "\" & StringLeft ( $aArray[$iRows - 1], StringLen($aArray[$iRows - 1]) -4) & " [Cours].mp4") = 1 Then ; Si répertoire existe alors
					GUICtrlSetState ($CreationBoutonCours, $GUI_SHOW )
;~ 					Local $CreationBoutonCours	= GUICtrlCreateButton("Vidéo du Cours", 690, 10, 100, 25)
;~ 					ShellExecute(@ScriptDir & "\" & $aArray[$iRows - 2] & "\" & StringLeft ( $aArray[$iRows - 1], StringLen($aArray[$iRows - 1]) -4) & " [Cours].mp4")
				EndIf
EndFunc

;~ FUNC VERIFIE QUE LES TABLATURES SONT BIEN AU BON FORMAT
Func ReadHeadFile()
	$read = FileRead($Choix)
	$line = StringSplit($read, @CR)

	For $i = 1 To $line[0]
		$var = FileReadLine($Choix, $i)
		if ($i = 1 And StringLeft($var,10) <> "Artiste : ") or ($i = 2 And StringLeft($var,8) <> "Album : ") or ($i = 3 And StringLeft($var,8) <> "Titre : ") or ($i = 4 And StringLeft($var,8) <> "Tempo : ") Then
			MsgBox(64, "Information", "Le début de la Tablature est incorrecte." & chr(10) & chr(10) & "Elle doit obligatoirement commencer par" & chr(10) & _
			chr(10) & "Artiste : " & _
			chr(10) & "Album : " & _
			chr(10) & "Titre : " & _
			chr(10) & "Tempo : " & _
			chr(10) & chr(10) & "Actuellement, il y a sur la ligne " & $i & " : " & chr(10) & chr(10) & $var)
		EndIf
	Next
EndFunc

Re: Changer image PNG suivant la sélection du menu déroulant

Posté : jeu. 19 juil. 2018 14:14
par walkson
Bonjour,
Votre code est assez obscure :shock: et beaucoup de variables restent inconnues
Je vous propose un exemple qui doit être adaptable au code de Mikell
#include <GUIConstantsEx.au3>
#include <GuiMenu.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>

$GUI = GUICreate("Test",150,100)
$boutonArbo = GUICtrlCreateButton("clique droit",5,5,140,40)
Global $contexte = GUICtrlCreateContextMenu($boutonArbo) ;ID du menu
$Hcontexte = GUICtrlGetHandle($contexte) ; handle du menu
GUISetState(@SW_SHOW,$GUI)

;============== items du menu =================================
   $e_idNew = GUICtrlCreateMenuItem("&New",$contexte)
   $e_idOpen = GUICtrlCreateMenuItem("&open",$contexte)
   $e_idSave = GUICtrlCreateMenuItem("&Save",$contexte)
;============= charge les images =============================
   $img1 = ADD_image(@ProgramFilesDir & "\AutoIt3\Examples\GUI\Torus.png",32, 32) ;ADD_image(chemin, largeur, hauteur)
   $img2 = ADD_image(@ProgramFilesDir & "\AutoIt3\Examples\GUI\merlin.gif",32, 32)
   $img3 = ADD_image(@ProgramFilesDir & "\AutoIt3\Examples\GUI\logo4.gif",32, 32)
;============ enregistre les images sur les items ====================
   _GUICtrlMenu_SetItemBmp($Hcontexte, 0, $img1)
   _GUICtrlMenu_SetItemBmp($Hcontexte, 1, $img2)
   _GUICtrlMenu_SetItemBmp($Hcontexte, 2, $img3)
Local $test = True, $image
While 1
       $msg = GUIGetMsg()
      Switch $msg
         Case $GUI_EVENT_CLOSE
             Exit
         Case $e_idNew
            MsgBox(0,"","New")
            $test = Not $test
            If $test = True Then ;change l'image à chaque clic
               $image = $img1
            Else
               $image = $img2
            EndIf
            _GUICtrlMenu_SetItemBmp($Hcontexte, 0, $image)
      EndSwitch
WEnd

Func ADD_image($sFile,$W = 128, $H = 128) ;crer un Hbitmap selon chemin
   _GDIPlus_Startup()
   $hBitmap = _GDIPlus_BitmapCreateFromFile ($sFile) ; charge image
   $hBitmap= _GDIPlus_ImageResize($hBitmap, $W , $H) ;redimensionne pour rentrer dans le menu
   $hGraphic = _GDIPlus_ImageGetGraphicsContext($hBitmap) ;crée un graphic selon l'image
   _GDIPlus_GraphicsSetCompositingQuality($hGraphic, 2) ;améliore la qualité non indispensable
   _GDIPlus_GraphicsSetInterpolationMode($hGraphic, 7) ;améliore la qualité non indispensable
   _GDIPlus_GraphicsSetSmoothingMode($hGraphic, $GDIP_SMOOTHINGMODE_HIGHQUALITY) ;améliore la qualité non indispensable
    _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hBitmap, 0, 0,$W,$H, 0, 0,$W,$H) ;dessine l'image dans le graphic
   $hBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) ;crée un Hbitmap adaptable au menu à partir du bitmap
    _GDIPlus_BitmapDispose($hBitmap) ;nettoie
   _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
Return $hBMP ;retourne le handle du Hbitmap
EndFunc

 

Re: Changer image PNG suivant la sélection du menu déroulant

Posté : jeu. 19 juil. 2018 15:53
par LaTMoT
Bonjour,

Merci pour cet exemple intéressant qui fonctionne parfaitement que je met de coté pour une future utilisation :D

Cependant ce n'est pas ce que je cherche à faire. "pour le moment" :wink:

J'ai un menu déroulant avec le nom des groupes et des titres de chansons et suivant le titre que je sélectionne il m'affiche le logo PNG du groupe dans ma GUI et pas dans le menu [ Ce que je ferais plus tard grâce à votre exemple]

J'ai rajouter le code fouillis complet de mon projet dans le message du haut. je sais c'est un gros bordel, mais je débute.

Merci.

Re: Changer image PNG suivant la sélection du menu déroulant  

Posté : jeu. 19 juil. 2018 22:56
par walkson
Bonsoir,
Si votre code est brouillon, que dire des miens !!!
Il y a quelques erreurs par exemple, Les variables en global sont déclarées en début de script
Pour le reste, voyez le code qui suit. J' ai repris ma fonction précédente
#include <Array.au3>
#include <AutoItConstants.au3>
#include <ButtonConstants.au3>
#include <Constants.au3>
#include <EditConstants.au3>
#include <file.au3>
#include <FontConstants.au3>
#include <GDIPlus.au3>
#include <GuiComboBox.au3>
#include <GuiConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiEdit.au3>
#include <GuiScrollBars.au3>
#include <GuiStatusBar.au3>
#include <Math.au3>
#include <MsgBoxConstants.au3>
#include <ScrollBarConstants.au3>
#include <StaticConstants.au3>
#include <StringConstants.au3>
#include <WindowsConstants.au3>

;~ Opt("MustDeclareVars", 1)

;~ DECLARATION VARIABLES GLOBALES
Global $hImage, $hGraphic, $aArray, $iRows, $iCols

;~ CREATION DE LA FE?ETRE
Global $MyTabsGui = GUICreate("MyTabs", 800, 600, -1, -1, -1, $WS_EX_TOOLWINDOW + $WS_EX_WINDOWEDGE) ; TAILLE (800x600)
GUISetBkColor($COLOR_WHITE) ; SUR FOND BLANC

GUICtrlCreateLabel("TAILLE :", 50, 15, 45, 25) ; TEXTE

;~ CREATION DES BOUTONS
Local $FontSize = 10
Local $SmallFontButton = GUICtrlCreateButton("-1", 100, 10, 40, 25)
Local $NormalFontButton = GUICtrlCreateButton("10", 140, 10, 40, 25)
Local $BigFontButton = GUICtrlCreateButton("+1", 180, 10, 40, 25)
Local $CreationBoutonCours = GUICtrlCreateButton("Vidéo du Cours", 690, 10, 100, 25)
GUICtrlSetState($CreationBoutonCours, $GUI_HIDE) ; CACHER LE BOUTON CI-DESSUS
Local $pic = GUICtrlCreateLabel("", 260, 0, 350, 39, $SS_BITMAP)
GUICtrlSetBkColor(-1, $COLOR_WHITE)

;~ CREATION DE LA ZONE DE TEXTE OU SERONT LES TABLATURES
Local $Edit = GUICtrlCreateEdit("", 10, 40, 780, 550, $ES_AUTOVSCROLL + $WS_VSCROLL + $ws_hscroll + $es_readonly)
GUICtrlSetFont(-1, 10, 800, Default, 'courier new') ; POLICE PAR DEFAUT ET TAILLE

;~ CREATION BOUTON "\" AVEC MENU DEROULANT CLIC DROIT AVEC EN ARBORESCENCE DOSSIERS / SOUS-DOSSIERS ET FICHIERS .TAB (FICHIER TXT)
Global $s[1000][2], $n
$boutonArbo = GUICtrlCreateButton("\", 10, 10, 25, 25)
GUICtrlSetTip(-1, "Clic droit: menu")
Global $contexte = GUICtrlCreateContextMenu($boutonArbo)
parcourirDossier($contexte, @ScriptDir, "*.tab", 3)
ReDim $s[$n][2]
_ArrayDisplay($s)
GUISetState(@SW_SHOW)

While 1
   $msg = GUIGetMsg()

;~       ACTION SUR LA SELECTION
   For $i = 0 To UBound($s) - 1
      If $msg = $s[$i][0] Then
         GUICtrlSetState($CreationBoutonCours, $GUI_HIDE) ; CACHER LE BOUTON SI PAS DE VIDEO DE COURS
         ;MsgBox(64, "Choix", "Votre choix est " & $s[$i][1])
         GUICtrlSetData($Edit, "")
         $Choix = $s[$i][1]
         $iFile = FileRead($Choix)
         GUICtrlSetData($Edit, $iFile, 1)
         _GUICtrlEdit_Scroll($Edit, $SB_TOP)

         SetTitleMyTabs() ; FUNC QUI MODIFIE LE NOM DE LA FENETRE : NOM [TITRE]
         SetImageBand() ; FUNC QUI AFFICHE LE LOGO DE L'ARTISTE
         ReadHeadFile() ; FUNC QUI VERIFIE QUE LES 4 PREMIERES LIGNES SONT DANS LE BON FORMAT
         LanceVideoCours() ; FUNC QUI VERIFIE SI LA VIDEO DU COURS EXISTE

      EndIf
   Next

;~       OUVRE LA TABLATURE AVEC L'EDITEUR DE TEXTE WINDOWS PAR DEFAUT
;~       For $i = 0 to UBound($s)-1
;~          If $msg = $s[$i][0] Then ShellExecute($s[$i][1])
;~       Next

   Select
      Case $msg = $GUI_EVENT_CLOSE
         _do_exit_stuff()
      Case $msg = $SmallFontButton
         $FontSize = $FontSize - 1
         GUICtrlSetFont($Edit, $FontSize, 800, Default, 'courier new')
      Case $msg = $NormalFontButton
         $FontSize = 10
         GUICtrlSetFont($Edit, $FontSize, 800, Default, 'courier new')
      Case $msg = $BigFontButton
         $FontSize = $FontSize + 1
         GUICtrlSetFont($Edit, $FontSize, 800, Default, 'courier new')
      Case $msg = $CreationBoutonCours ; LANCE LA VIDEO DU COURS
;~             Local $aArray = StringSplit($Choix, '\', $STR_ENTIRESPLIT)
;~             Local $iRows = UBound($aArray, $UBOUND_ROWS) ; Total number of rows
         ShellExecute(@ScriptDir & "\" & $aArray[$iRows - 2] & "\" & StringLeft($aArray[$iRows - 1], StringLen($aArray[$iRows - 1]) - 4) & " [Cours].mp4")
   EndSelect
WEnd

Func _do_exit_stuff()

   ; CE QUE JE VEUX QUAND LE PROGRAMME CE FERME

   Exit

EndFunc   ;==>_do_exit_stuff

;~ FUNC QUI AFFICHE LES DOSSIERS / SOUS-DOSSIERS ET FICHIERS .TAB DANS LE MENU DEROULANT CLIC DROIT
Func parcourirDossier($sdd, $folder, $filter = "*", $depth = -1)
   If Int($depth) > 0 Then
      Local $subFolders = _FileListToArray($folder, "*", 2)
      If Not @error Then
         For $i = 1 To $subFolders[0]
;~             EXCLUSION DU REPERTOIRE _SAUV_ OU JE METS MES FICHIERS DE SAUVEGARDE AU3
            If $subFolders[$i] <> "_SAUV_" Then parcourirDossier(GUICtrlCreateMenu($subFolders[$i], $sdd), $folder & "\" & $subFolders[$i], $filter, _Max($depth - 1, -1))
;~                 parcourirDossier(GUICtrlCreateMenu($subFolders[$i],$sdd),$folder&"\"&$subFolders[$i],$filter,_Max($depth-1,-1))
         Next
      EndIf
      GUICtrlCreateMenuItem("", $sdd)
      Local $subFiles = _FileListToArray($folder, $filter, 1)
      If Not @error Then
         For $i = 1 To $subFiles[0]
            $s[$n][0] = GUICtrlCreateMenuItem($subFiles[$i], $sdd)
            $s[$n][1] = $folder & "\" & $subFiles[$i]
            $n += 1
         Next
      EndIf
   EndIf
EndFunc   ;==>parcourirDossier

;~ FUNC QUI MODIFIE LA BARRE DE TITRE DE LA FENETRE AVEC LE NOM DU GROUPE ET LE TITRE DU MORCEAU
Func SetTitleMyTabs()
   $aArray = StringSplit($Choix, '\', $STR_ENTIRESPLIT)
   $iRows = UBound($aArray, $UBOUND_ROWS) ; Total number of rows
   $iCols = UBound($aArray, $UBOUND_COLUMNS) ; Total number of columns
;~    REMPLIT LE TABLEAU AVEC LES DONNEES
   For $i = 0 To $iRows - 1
      For $j = 0 To $iCols - 1
         $aArray[$i][$j] = "Row: " & $i & " - Col: " & $j
      Next
   Next
   WinSetTitle($MyTabsGui, "", $aArray[$iRows - 2] & " [" & StringLeft($aArray[$iRows - 1], StringLen($aArray[$iRows - 1]) - 4) & "]" & " - MyTabs") ; MODIFIE LE TITRE
EndFunc   ;==>SetTitleMyTabs

;~ FUNC QUI AFFICHE LE LOGO DE L'ARTISTE DANS LA GUI SUIVANT CE QUI EST SELECTIONNER DANS LE MENU
Func SetImageBand()


;~             AFFICHE LE LOGO
   $file = @ScriptDir & "\" & $aArray[$iRows - 2] & "\" & $aArray[$iRows - 2] & "-Logo-Band.png"
   If FileExists($file) = 0 Then Return SetError(1)
   $img = ADD_image($file)
   MsgBox(0, "handle Hbitmap existe", $img)
   $hb = GUICtrlSendMsg($pic, $STM_SETIMAGE, $IMAGE_BITMAP, $img)
   If $hb Then _WinAPI_DeleteObject($hb)
   _WinAPI_DeleteObject($img)

EndFunc   ;==>SetImageBand
Func ADD_image($sFile) ;crer un Hbitmap selon chemin
   _GDIPlus_Startup()
   $hBitmap = _GDIPlus_BitmapCreateFromFile($sFile) ; charge image
   $W = _GDIPlus_ImageGetWidth($hBitmap)
   $H = _GDIPlus_ImageGetHeight($hBitmap)
   $hGraphic = _GDIPlus_ImageGetGraphicsContext($hBitmap) ;crée un graphic selon l'image
   _GDIPlus_GraphicsSetCompositingQuality($hGraphic, 2) ;améliore la qualité non indispensable
   _GDIPlus_GraphicsSetInterpolationMode($hGraphic, 7) ;améliore la qualité non indispensable
   _GDIPlus_GraphicsSetSmoothingMode($hGraphic, $GDIP_SMOOTHINGMODE_HIGHQUALITY) ;améliore la qualité non indispensable
   _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hBitmap, 0, 0, $W, $H, 0, 0, $W, $H) ;dessine l'image dans le graphic
   $hBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) ;crée un Hbitmap adaptable au menu à partir du bitmap
   _GDIPlus_BitmapDispose($hBitmap) ;nettoie
   _GDIPlus_GraphicsDispose($hGraphic)
   _GDIPlus_Shutdown()
   Return $hBMP ;retourne le handle du Hbitmap
EndFunc   ;==>ADD_image
;~ FUNC QUI AFFICHE LE BOUTON SI LE FICHIER DU COURS DE GUITARE EXISTE
Func LanceVideoCours()
;~             Local $aArray = StringSplit($Choix, '\', $STR_ENTIRESPLIT)
;~             Local $iRows = UBound($aArray, $UBOUND_ROWS) ; Total number of rows

   If FileExists(@ScriptDir & "\" & $aArray[$iRows - 2] & "\" & StringLeft($aArray[$iRows - 1], StringLen($aArray[$iRows - 1]) - 4) & " [Cours].mp4") = 1 Then ; Si répertoire existe alors
      GUICtrlSetState($CreationBoutonCours, $GUI_SHOW)
;~                Local $CreationBoutonCours = GUICtrlCreateButton("Vidéo du Cours", 690, 10, 100, 25)
;~                ShellExecute(@ScriptDir & "\" & $aArray[$iRows - 2] & "\" & StringLeft ( $aArray[$iRows - 1], StringLen($aArray[$iRows - 1]) -4) & " [Cours].mp4")
   EndIf
EndFunc   ;==>LanceVideoCours

;~ FUNC VERIFIE QUE LES TABLATURES SONT BIEN AU BON FORMAT
Func ReadHeadFile()
   $read = FileRead($Choix)
   $line = StringSplit($read, @CR)

   For $i = 1 To $line[0]
      $var = FileReadLine($Choix, $i)
      If ($i = 1 And StringLeft($var, 10) <> "Artiste : ") Or ($i = 2 And StringLeft($var, 8) <> "Album : ") Or ($i = 3 And StringLeft($var, 8) <> "Titre : ") Or ($i = 4 And StringLeft($var, 8) <> "Tempo : ") Then
         MsgBox(64, "Information", "Le début de la Tablature est incorrecte." & Chr(10) & Chr(10) & "Elle doit obligatoirement commencer par" & Chr(10) & _
               Chr(10) & "Artiste : " & _
               Chr(10) & "Album : " & _
               Chr(10) & "Titre : " & _
               Chr(10) & "Tempo : " & _
               Chr(10) & Chr(10) & "Actuellement, il y a sur la ligne " & $i & " : " & Chr(10) & Chr(10) & $var)
      EndIf
   Next
EndFunc   ;==>ReadHeadFile
 
J'ai modifié les déclarations et la fonction SetImageBand(). J'ai rajouté la fonction ADD_image et un label où s'affiche l'image. J'aurais pu utiliser un pic. Si le programme ne trouve pas d'image, il n'affiche rien et Logo-Band.png devient inutile. J'ai rajouté If FileExists($file) = 0 Then Return SetError(1) qui équivaut à On error resume next mais ne peut être utilisé que dans une fonction
Il se peut qu'il y ait un bug au niveau de _GDIPlus_ImageGetWidth et _GDIPlus_ImageGetHeight car je n'ai pas la version la plus récente d'autoit. Dans ce cas il faut remplacer les 2 lignes par _GDIPlus_ImageGetDimension
Je ne sais si mon code résout votre problème mais j' aimerai savoir à quoi corresponde les fichiers "tab" :D

Re: Changer image PNG suivant la sélection du menu déroulant

Posté : ven. 20 juil. 2018 09:02
par LaTMoT
Bonjour,

Merci pour votre réponse je vais regarder rapidement :-)

Le fichier .Tab est juste un fichier txt ou il y a une tablature guitare, j'aurais pu laisser .txt

je trouvais que mettre .tab ça changeait :wink:


contenu d'un fichier .tab

Code : Tout sélectionner

Artiste : AC/DC
Album : Album (19xx)
Titre : Touch Too Much
Tempo : 120 bpm


    PM--| PM--| PM-|  PM--| PM--| PM-|  PM--| PM--| PM-|  PM--| PM--| PM-|
e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-----------------|-----------------|
G|-----------------|-----------------|-----------------|-----------------|
D|-9-----9-----9---|-9-----9-----9---|-9-----9-----9---|-9-----9-----9---|
A|-7-7-7-7-7-7-7-7-|-7-7-7-7-7-7-7-7-|-7-7-7-7-7-7-7-7-|-7-7-7-7-7-7-7-7-|
E|-----------------|-----------------|-----------------|-----------------|


(2x)
    PM--| PM--| PM-|  PM--| PM--| PM-|  PM--| PM--| PM-|
e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-----------------|-3p3---3p3---3p3-|
G|-----------------|-----------------|-----------------|-2---2-2---2-2---|
D|-9-----9-----9---|-5-----5-----5---|-2-----2-----2---|-2-----2-----2---|
A|-7-7-7-7-7-7-7-7-|-3-3-3-3-3-3-3-3-|-0-0-0-0-0-0-0-0-|-----------------|
E|-----------------|-----------------|-----------------|-----------------|


e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-----------------|-----------------|
G|-5---------5---5-|-----------------|-2---------2---2-|-----------------|
A|-5---------5---5-|-----------------|-2---------2---2-|-----------------|
D|-3---------3---3-|-----------------|-0---------0---0-|-----------------|
E|-----------------|-----------------|-----------------|-----------------|
 |
e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-3---3-----3---3-|-3-----3-3---3---|
G|-5---5-----5---5-|-------5-5---5---|-2---2-----2---2-|-2-----2-2---2---|
D|-5---5-----5---5-|-------5-5---5---|-0---0-----0---0-|-0-----0-0---0---|
A|-3---3-----3---3-|-------3-3---3---|-----------------|-----------------|
E|-----------------|-----------------|-----------------|-----------------|
 |
e|--------------3--|-3---3---3---3---|-----------------|-----------------|
B|--------------3--|-3---3---3---3---|-----------------|----------3--3---|
G|-----------------|-----------------|-2---2---2---2---|----------2--2---|
D|-----------------|-----------------|-2---2---2---2---|----------0--0---|
A|---2--2----2--X--|-X---X---X---X---|-0---0---0---0---|-3--2--0---------|
E|---0--0----0--3--|-3---3---3---3---|-----------------|-----------------|


(3x)
e|-----------------|-3---3---3---3---|-----------------|-----------------|
B|-----------------|-3---3---3---3---|-----------------|----------3--3---|
G|-----------------|-----------------|-2---2---2---2---|----------2--2---|
D|-----------------|-----------------|-2---2---2---2---|----------0--0---|
A|-2---2---2---2---|-X---X---X---X---|-0---0---0---0---|-3--2--0---------|
E|-0---0---0---0---|-3---3---3---3---|-----------------|-----------------|


e|--------------3--|-----------------|-----------------|
B|--------------3--|-----------------|-3-----3-----3---|
G|-----------------|-----------------|-2-----2-----2---|
D|-----------------|-2-2-2-2-2-2-2-2-|-0-2-2-0-2-2-0-2-|
A|---2--2----2--X--|-0-0-0-0-0-0-0-0-|---0-0---0-0---0-|
E|---0--0----0--3--|-----------------|-----------------|

    PM--| PM--| PM-|  PM--| PM--| PM-|
e|-----------------|-----------------|
B|-----------------|-----------------|
G|-----------------|-----------------|
D|-9-----9-----9---|-9-----9-----9---|
A|-7-7-7-7-7-7-7-7-|-7-7-7-7-7-7-7-7-|
E|-----------------|-----------------|

(2x)
    PM--| PM--| PM-|  PM--| PM--| PM-|  PM--| PM--| PM-|
e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-----------------|-3-----3-----3---|
G|-----------------|-----------------|-----------------|-2-----2-----2---|
D|-9-----9-----9---|-5-----5-----5---|-2-----2-----2---|-0-----0-----0---|
A|-7-7-7-7-7-7-7-7-|-3-3-3-3-3-3-3-3-|-0-0-0-0-0-0-0-0-|-----------------|
E|-----------------|-----------------|-----------------|-----------------|

(2x)
e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-----------------|-----------------|
G|-5---------5---5-|-----------------|-2---------2---2-|-----------------|
A|-5---------5---5-|-----------------|-2---------2---2-|-----------------|
D|-3---------3---3-|-----------------|-0---------0---0-|-----------------|
E|-----------------|-----------------|-----------------|-----------------|
 |
e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-3---3-----3---3-|-3-----3-3---3---|
G|-5---5-----5---5-|-------5-5---5---|-2---2-----2---2-|-2-----2-2---2---|
D|-5---5-----5---5-|-------5-5---5---|-0---0-----0---0-|-0-----0-0---0---|
A|-3---3-----3---3-|-------3-3---3---|-----------------|-----------------|
E|-----------------|-----------------|-----------------|-----------------|
 |
e|--------------3--|-3---3---3---3---|-----------------|-----------------|
B|--------------3--|-3---3---3---3---|-----------------|----------3--3---|
G|-----------------|-----------------|-2---2---2---2---|----------2--2---|
D|-----------------|-----------------|-2---2---2---2---|----------0--0---|
A|---2--2----2--X--|-X---X---X---X---|-0---0---0---0---|-3--2--0---------|
E|---0--0----0--3--|-3---3---3---3---|-----------------|-----------------|

(3x)
e|-----------------|-3---3---3---3---|-----------------|-----------------|
B|-----------------|-3---3---3---3---|-----------------|----------3--3---|
G|-----------------|-----------------|-2---2---2---2---|----------2--2---|
D|-----------------|-----------------|-2---2---2---2---|----------0--0---|
A|-2---2---2---2---|-X---X---X---X---|-0---0---0---0---|-3--2--0---------|
E|-0---0---0---0---|-3---3---3---3---|-----------------|-----------------|


e|--------------3--|-----------------|-----------------|
B|--------------3--|-----------------|-----------------|
G|-----------------|-----------------|-----------------|
D|-----------------|-9-9-9-9-9-9-9-9-|-9-9-9-9-9-9-9-9-|
A|---2--2----2--X--|-7-7-7-7-7-7-7-7-|-7-7-7-7-7-7-7-7-|
E|---0--0----0--3--|-----------------|-----------------|

    PM--| PM--| PM-|  PM--| PM--| PM-|  PM--| PM--| PM-|  PM--| PM--| PM-|
e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-----------------|-----------------|
G|-----------------|-----------------|-----------------|-----------------|
D|-5-----5-----5---|-5-----5-----5---|-2-----2-----2---|-2-----2-----2---|
A|-3-3-3-3-3-3-3-3-|-3-3-3-3-3-3-3-3-|-0-0-0-0-0-0-0-0-|-0-0-0-0-0-0-0-0-|
E|-----------------|-----------------|-----------------|-----------------|

    PM--| PM--| PM-|  PM--| PM--| PM-|  PM--| PM--| PM-|  PM--| PM--| PM-|
e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-3-----3-----3---|-3-----3-----3---|
G|-----------------|-----------------|-2-----2-----2---|-2-----2-----2---|
D|-5-----5-----5---|-5-----5-----5---|-0-0-0-0-0-0-0-0-|-0-0-0-0-0-0-0-0-|
A|-3-3-3-3-3-3-3-3-|-3-3-3-3-3-3-3-3-|-----------------|-----------------|
E|-----------------|-----------------|-----------------|-----------------|

e|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-----------------|
G|-----------------|-----------------|-----------------|
D|-----------2-----|-----------------|-----2-----------|
A|-2---------0-----|-0-----0--2------|-3---0---2-------|
E|-0----3----------|----3------------|---------0-------|

    PM--| PM--| PM-|  PM--| PM--| PM-|  PM--| PM--| PM-|  PM--| PM--| PM-|
e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-----------------|-----------------|
G|-----------------|-----------------|-----------------|-----------------|
D|-----------------|-----------------|-----------------|-7-----7-----7---|
A|-2-----2-----2---|-5-----5-----5---|-7-----7-----7---|-5-5-5-5-5-5-5-5-|
E|-0-0-0-0-0-0-0-0-|-3-3-3-3-3-3-3-3-|-5-5-5-5-5-5-5-5-|-----------------|

    PM--| PM--| PM-|  PM--| PM--| PM-|  PM--| PM--| PM-|  PM--| PM--| PM-|
e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-----------------|-3-----3-----3---|
G|-----------------|-----------------|-----------------|-2-----2-----2---|
D|-----------------|-----------------|-2-----2-----2---|-0-0-0-0-0-0-0-0-|
A|-2-----2-----2---|-5-----5-----5---|-0-0-0-0-0-0-0-0-|-----------------|
E|-0-0-0-0-0-0-0-0-|-3-3-3-3-3-3-3-3-|-----------------|-----------------|


(2x)
e|--------------3--|--------------3--|-----------------|-----------------|
B|--------------3--|--------------3--|--------------3--|--------------3--|
G|-----------------|-----------------|--------------2--|--------------2--|
D|-----------------|-----------------|---2--2----2--0--|--------------0--|
A|---2--2----2--X--|--------------X--|---0--0----0-----|-----------------|
E|---0--0----0--3--|--------------3--|-----------------|-----------------|

e|--------------3--|-3---3---3---3---|-----------------|-----------------|
B|--------------3--|-3---3---3---3---|-----------------|----------3--3---|
G|-----------------|-----------------|-2---2---2---2---|----------2--2---|
D|-----------------|-----------------|-2---2---2---2---|----------0--0---|
A|---2--2----2--X--|-X---X---X---X---|-0---0---0---0---|-3--2--0---------|
E|---0--0----0--3--|-3---3---3---3---|-----------------|-----------------|


(6x)
e|-----------------|-3---3---3---3---|-----------------|-----------------|
B|-----------------|-3---3---3---3---|-----------------|----------3--3---|
G|-----------------|-----------------|-2---2---2---2---|----------2--2---|
D|-----------------|-----------------|-2---2---2---2---|----------0--0---|
A|-2---2---2---2---|-X---X---X---X---|-0---0---0---0---|-3--2--0---------|
E|-0---0---0---0---|-3---3---3---3---|-----------------|-----------------|

e|-----------------|-3---3---3---3---|-----------------|-----------------|
B|-----------------|-3---3---3---3---|-----------------|-3-----3-----3---|
G|-----------------|-----------------|-----------------|-2-----2-----2---|
D|-----------------|-----------------|-2-2-2-2-2-2-2-2-|-0-2-2-0-2-2-0-2-|
A|-2---2---2---2---|-X---X---X---X---|-0-0-0-0-0-0-0-0-|---0-0---0-0---0-|
E|-0---0---0---0---|-3---3---3---3---|-----------------|-----------------|

e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-3-----3-----3---|-----------------|-3-----3-----3---|
G|-----------------|-2-----2-----2---|-----------------|-2-----2-----2---|
D|-2-2-2-2-2-2-2-2-|-0-2-2-0-2-2-0-2-|-2-2-2-2-2-2-2-2-|-0-2-2-0-2-2-0-2-|
A|-0-0-0-0-0-0-0-0-|---0-0---0-0---0-|-0-0-0-0-0-0-0-0-|---0-0---0-0---0-|
E|-----------------|-----------------|-----------------|-----------------|

e|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-----------------|-----------------|
G|-----------------|-----------------|-----------------|-----------------|
D|-----------------|-----------------|-----------------|-----------------|
A|-2-------------2-|-----------------|-----------------|---------------2-|
E|-0-------------0-|-----------------|-----------------|---------------0-|

Re: Changer image PNG suivant la sélection du menu déroulant

Posté : ven. 20 juil. 2018 09:27
par walkson
Bonjour,
J'ai modifié la fonction SetImageBand() car si le programme ne trouve pas d'image, il conserve l'image affichée précédemment

Code : Tout sélectionner

Func SetImageBand()


;~ 				AFFICHE LE LOGO
	$file = @ScriptDir & "\" & $aArray[$iRows - 2] & "\" & $aArray[$iRows - 2] & "-Logo-Band.png"
	If FileExists($file) = 0 Then
		GUICtrlSendMsg($pic, $STM_SETIMAGE, $IMAGE_BITMAP, 0) ; supprime l'image si elle existe
		Return SetError(1)
	EndIf
	$img = ADD_image($file)
	MsgBox(0, "handle Hbitmap existe", $img)
	$hb = GUICtrlSendMsg($pic, $STM_SETIMAGE, $IMAGE_BITMAP, $img)
	If $hb Then _WinAPI_DeleteObject($hb)
	_WinAPI_DeleteObject($img)

EndFunc   ;==>SetImageBand

Re: Changer image PNG suivant la sélection du menu déroulant

Posté : ven. 20 juil. 2018 09:32
par LaTMoT
Re bonjour,

Cela fonctionne Nickel, l'image est même bien plus net :D

Un grand merci :)

Maintenant je vais pouvoir passer à l'étape de l'ajout de la vidéo du cours de guitare.

A bientôt, ça c'est sûr :lol: