Page 1 sur 1
[R] Bug sur GUICtrlCreatePic ?
Posté : mer. 11 juin 2014 13:00
par cutprod
Bonjour a tous, voila je travail sur un script de commande de matériel et je suis confronter à un problème :
Je dois afficher une photo de la pièce sélectionné parmi d'autre dans une liste (jusqu'ici tout va bien) ,mais à chaque nouvelle photo le control s’agrandit !!
A force de test j'ai pu observer que c'est le "style" du control qui est en cause :
Voila un petit script qui reproduit le phénomène, supprimer le "$WS_BORDER" de GUICtrlCreatePic et tout rentre dans l'ordre, l'image ne s'agrandit plus a chaque rafraichissement.
Pourquoi?
Y a t il une solution pour garder mes bords sur le control ? (à part en mettre un dessous un peu plus grand pour que les bords dépassent)
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 470, 345, 192, 124)
$Pic1 = GUICtrlCreatePic("", 104, 24, 244, 188,$WS_BORDER)
$Button1 = GUICtrlCreateButton("Button1", 184, 264, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
affiche_image()
EndSwitch
WEnd
Func affiche_image()
GUICtrlSetImage($Pic1,@ScriptDir & "\A1.jpg")
EndFunc
Re: [..] Bug sur GUICtrlCreatePic ?
Posté : mer. 11 juin 2014 14:03
par TT22
Est-ce que ceci corrige ton problème ?
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 470, 345, 192, 124)
Global $Pic1 = GUICtrlCreatePic("", 104, 24, 244, 188,$WS_BORDER)
$Button1 = GUICtrlCreateButton("Button1", 184, 264, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
affiche_image()
EndSwitch
WEnd
Func affiche_image()
GUICtrlSetImage($Pic1,@ScriptDir & "\A1.jpg")
GUICtrlSetPos($Pic1, Default, Default, 244, 188)
EndFunc
Re: [..] Bug sur GUICtrlCreatePic ?
Posté : mer. 11 juin 2014 15:12
par cutprod
Merci pour ta réponse, non ça ne corrige pas le problème (j'avais déjà essayer cette soluce

)
Re: [..] Bug sur GUICtrlCreatePic ?
Posté : mer. 11 juin 2014 21:09
par jguinch
Zarbi en effet... Peut-être que le style WS_BORDER y est pour quelque chose
En passant par deux étapes, ça le fait on dirait :
Code : Tout sélectionner
Func affiche_image()
GUICtrlSetImage($Pic1,@ScriptDir & "\A1.jpg")
GUICtrlSetPos($Pic1, Default,Default, 244 )
GUICtrlSetPos($Pic1, Default,Default, Default, 188)
EndFunc
Re: [..] Bug sur GUICtrlCreatePic ?
Posté : mer. 11 juin 2014 22:41
par mikell
ça marche mais ya du flicker
Pourquoi mépriser les bonnes vieilles solutions bourrin ?
Code : Tout sélectionner
GUICtrlCreateLabel("", 103, 23, 246, 1)
GUICtrlSetBkColor(-1, 0x000000)
GUICtrlCreateLabel("", 103, 212, 246, 1)
GUICtrlSetBkColor(-1, 0x000000)
GUICtrlCreateLabel("", 103, 23, 1, 190)
GUICtrlSetBkColor(-1, 0x000000)
GUICtrlCreateLabel("", 348, 23, 1, 190)
GUICtrlSetBkColor(-1, 0x000000)
Re: [..] Bug sur GUICtrlCreatePic ?
Posté : mer. 11 juin 2014 22:56
par jguinch
Ah oui, pas con...
Du coup, on peut faire ça aussi (toujours en enlevant le style WS_BORDER sur l'image):
Code : Tout sélectionner
GUICtrlCreateLabel("", 103, 23, 246, 190, $WS_BORDER)
GUICtrlSetState(-1, $GUI_DISABLE)
@Mikell : tu penses que c'est un bug ? En tout cas, c'est assez bizarre...

Re: [..] Bug sur GUICtrlCreatePic ?
Posté : mer. 11 juin 2014 23:20
par mikell
J'y ai pensé mais (pour avoir des fois eu des blagues avec) je suis pas fan des superpositions de controles
Sinon faudrait connaître précisément la structure d'un GUICtrlCreatePic et le mode de fonctionnement du GUICtrlSetImage - ça sera pour une longue soirée d'hiver

Re: [..] Bug sur GUICtrlCreatePic ?
Posté : mer. 11 juin 2014 23:45
par cutprod
merci de vous penchez sur mon (et surement pas que le mien...) problème.
Mois aussi pour l'instant je gère ça avec une "superposition de controles".
Re: [..] Bug sur GUICtrlCreatePic ?
Posté : jeu. 12 juin 2014 15:24
par TommyDDR
Et ça ?:
► Afficher le textecode
Code : Tout sélectionner
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
_GDIPlus_Startup()
OnAutoItExitRegister("_exit_gdiplus")
Global Const $STM_SETIMAGE = 0x0172
$Form1 = GUICreate("Form1", 470, 345, 192, 124)
$Pic1 = GUICtrlCreatePic("", 104, 24, 244, 188, $WS_BORDER)
$Button1 = GUICtrlCreateButton("Button1", 184, 264, 75, 25)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
affiche_image()
EndSwitch
WEnd
Func affiche_image()
_GUICtrlSetImage($Pic1,@ScriptDir & "\A1.jpg", False)
EndFunc
Func _GUICtrlSetImage($Pic, $fileName, $redimImage = False)
Local $taille = [0, 0]
Local $bitmap = _GDIPlus_ImageLoadFromFile($fileName)
If($redimImage) Then
Local $hPic = GUICtrlGetHandle($Pic)
Local $hWnd = _WinAPI_GetParent($hPic)
Local $pos = ControlGetPos($hWnd, "", $hPic)
$taille[0] = $pos[2]
$taille[1] = $pos[3]
If(BitAND(_WinAPI_GetWindowLong($hPic, $GWL_STYLE), $WS_BORDER) = $WS_BORDER) Then
$taille[0] -= 2
$taille[1] -= 2
EndIf
Else
$taille[0] = _GDIPlus_ImageGetWidth($bitmap)
$taille[1] = _GDIPlus_ImageGetHeight($bitmap)
EndIf
Local $hBitmap = _GDIPlus_BitmapToHBitmap($bitmap, $taille[0], $taille[1])
_WinAPI_DeleteObject(GUICtrlSendMsg($Pic, $STM_SETIMAGE, 0, $hBitmap))
EndFunc
Func _GDIPlus_BitmapToHBitmap($bitmap, $iWidth, $iHeight)
Local $bitmap2 = _GDIPlus_BitmapResize($bitmap, $iWidth, $iHeight)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bitmap2)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_BitmapDispose($bitmap2)
Return $hBitmap
EndFunc
Func _GDIPlus_BitmapResize($bitmap, $iWidth, $iHeight)
Local $declared = True
Local $graphics = _GDIPlus_ImageGetGraphicsContext($bitmap)
Local $resizedbitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $graphics)
Local $graphics2 = _GDIPlus_ImageGetGraphicsContext($resizedbitmap)
_GDIPlus_GraphicsDrawImageRect($graphics2, $bitmap, 0, 0, $iWidth, $iHeight)
_GDIPlus_GraphicsDispose($graphics)
_GDIPlus_GraphicsDispose($graphics2)
_GDIPlus_BitmapDispose($bitmap)
Return $resizedbitmap
EndFunc
Func _exit_gdiplus()
_GDIPlus_Shutdown()
EndFunc
Re: [..] Bug sur GUICtrlCreatePic ?
Posté : jeu. 12 juin 2014 15:34
par mikell
Ben ça c'est absolument super
Pis ça éclaire sur le fonctionnement du fourbi
Pis c'est rapide en plus : chez moi environ 8 fois plus rapide que le GUICtrlSetImage de base
Tout quoi

Re: [..] Bug sur GUICtrlCreatePic ?
Posté : ven. 13 juin 2014 00:06
par cutprod
Bravo et merci TommyDDR ça pique les yeux...