Mbee Posted June 29, 2016 Share Posted June 29, 2016 (edited) Ok, so recently I changed my GUI app from calling GUICtrlCreatePic() with image file paths, to passing blank paths at first so that I can set the images later from internal binary memory using ProgAndy and Zedna's semi-UDF found here: Set image string directly to Control. When I test it using the Graphical Debugger, once the GUI is up, all the pic controls show up perfectly. But when I run the compiled script normally, none of them show up (or at least the disappear too fast for me to notice)! What's up with that? Since the pics show fine with the debugger, that's gotta mean that the code for that portion (i.e, loading the pics to the control from memory) is working correctly, so what could be causing them to either never appear or disappear too fast to notice? Do you think this might be related to $WM_PAINT events (I'm using On Event mode), or something similar? Because I don't currently have any $WM_PAINT (or whatever) handlers. Should I have such handlers? And what do I do there if I have it/them? I'm very confused. Little help, please? Edited June 29, 2016 by Mbee Link to comment Share on other sites More sharing options...
AutoBert Posted June 29, 2016 Share Posted June 29, 2016 (edited) In older version of AutoIt (<3.3.10?) i had same problems, but with actual stable there are no problems demostrating with this script: #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) ;0=disabled, 1=OnEvent mode enabled Global $sPicPath = StringReplace(StringReplace(@AutoItExe, '_X64', ''), 'Autoit3.exe', '') & '\Examples\GUI\mslogo.jpg' Global $idPic Example() Func Example() GUICreate("My GUI picture", 350, 165, -1, -1, $WS_SIZEBOX + $WS_SYSMENU) ; will create a dialog box that when displayed is centered GUISetBkColor(0xE0FFFF) GUISetOnEvent($GUI_EVENT_CLOSE,'_Exit') $idPic = GUICtrlCreatePic('', 50, 50, 200, 50) GUICtrlCreateButton('&Show Pic', 10, 110, 330) GUICtrlSetOnEvent(-1,'_Show') GUISetState(@SW_SHOW) While 1 Sleep(10000) WEnd EndFunc ;==>Example Func _Show() GUICtrlSetImage($idPic, $sPicPath) EndFunc ;==>_Show Func _Exit() GUIDelete() Exit EndFunc ;==>_Exit if this examples run for you show a small reproducer script showing your issue. Edited June 29, 2016 by AutoBert Link to comment Share on other sites More sharing options...
Mbee Posted June 29, 2016 Author Share Posted June 29, 2016 (edited) Hey, thanks for your reply, AutoBert! I have a hunch that I've found a key part of the problem (though I still don't understand why it worked with the debugger). I was actually in the process of preparing some example code to post here when I discovered a coding error in the initial code I got from @ProgAndy / @Zedna for setting a contol's image from binary data -- that'll screw things up, of course! For whatever reason, there was no error or crash from my big GUI app, but only when I tried to run the sample code I was putting together for posting. This prompted me to read farther into the thread (I was stupid not to do so at first! ), where I saw that ProgAncy had later realized the bug (see: here). He re-coded some related funcs to eliminate the bug(s), but he specifically pointed out that "... no plans to create the one-liner functions _SetImageBinaryToCtrl...", which is the function I needed and was using. My guess is that's the key to my problem (I'm hoping). So right now I'm coding up the equivalent of _SetImageBinaryToCtrl() which uses the newer version of ProgAndy's functions, and once that's done, I'll try using it in my big app. If that doesn't work or hasn't solved my problem, I'll come back here and post the requested code sample for your kind review. Thanks again! Edited June 29, 2016 by Mbee Link to comment Share on other sites More sharing options...
Mbee Posted June 29, 2016 Author Share Posted June 29, 2016 (edited) Hmm... Well, I cobbled together a simple function named _Mod_Set_Control_From_Binary() which crudely and probably redundantly combined code from @UEZ, @ProgAndy, and @Zedna . I'm not sure in the least whether UEZ's code actually needed the other code, but this deep image-related stuff is way over my head. The very annoying thing is, the small sample I cobbled together for posting here works fine when run in normal compiled mode or with the debugger, but my big GUI app (which is thousands of lines long so I can't post it) still only shows the controls when I run it with the graphical debugger! Perhaps the combined stuff from all those different coders has memory leaks (or a bug), and that's why it's not working right without the debugger (maybe the debugger allocates so much extra RAM that the memory leaks go undetected??) Of course, I'm the first to admit the fault is probably my own somewhere. Anyway, this the following sample code does NOT reproduce the disappearing controls problem, but perhaps you would be so kind as to look at the code from the others to see if there might be memory leaks or other buggy stuff there? A more elegant approach to setting the images of various controls from binary data (rather than from files) seems strongly called for, but I'm not yet the person for the job... expandcollapse popup#include <GDIPlus.au3> #include <GDIPlusConstants.au3> #include <GUIConstants.au3> #include <Memory.au3> #include <MemoryConstants.au3> Opt("MustDeclareVars", 1) Opt("GUIOnEventMode", 1) ; AutoItSetOption("WinTitleMatchMode", 1) AutoItSetOption("MouseCoordMode", 0) AutoItSetOption("GUICloseOnESC", 0 ) Global $ghGDIPDll = $__g_hGDIPDll Global $MyGUI = GUICreate("MyGUI",289,280,-1,-1,BitOr($WS_CAPTION,$WS_SYSMENU,$WS_MINIMIZEBOX,$WS_VISIBLE),BitOr($WS_EX_ACCEPTFILES,$WS_EX_APPWINDOW)) GUISetOnEvent($GUI_EVENT_CLOSE, "Close", $MyGUI) Global $Gc_OpenPicID1 = GUICtrlCreatePic("",102,20,85,30,-1,-1) Global $Gc_OpenPicID2 = GUICtrlCreatePic("",102,54,85,30,-1,-1) Global $Gc_OpenPicID3 = GUICtrlCreatePic("",102,88,85,30,-1,-1) Global $Gc_OpenPicID4 = GUICtrlCreatePic("",102,120,85,30,-1,-1) Global $Gc_OpenPicID5 = GUICtrlCreatePic("",102,154,85,30,-1,-1) Global $Gc_OpenPicID6 = GUICtrlCreatePic("",102,184,85,30,-1,-1) Global $G_BinOpenPic = _My_LoadOpenBtnPicBin() _GDIPlus_Startup() _Mod_Set_Control_From_Binary( $Gc_OpenPicID1, $G_BinOpenPic ) _Mod_Set_Control_From_Binary( $Gc_OpenPicID2, $G_BinOpenPic ) _Mod_Set_Control_From_Binary( $Gc_OpenPicID3, $G_BinOpenPic ) _Mod_Set_Control_From_Binary( $Gc_OpenPicID4, $G_BinOpenPic ) _Mod_Set_Control_From_Binary( $Gc_OpenPicID5, $G_BinOpenPic ) _Mod_Set_Control_From_Binary( $Gc_OpenPicID6, $G_BinOpenPic ) _GDIPlus_Shutdown() While True Sleep(1000) ; Sleep for a second WEnd Func Close() GUIDelete($MyGUI) Exit EndFunc Func _Mod_Set_Control_From_Binary( $arg_ControlID, $arg_BinaryImage ) Local $Lf_ControlHdl = GUICtrlGetHandle( $arg_ControlID ) Local $Lf_HbitmapHdl = Load_BMP_From_Mem( $arg_BinaryImage, True ) _GUICtrlStatic_SetImage($arg_ControlID, $Lf_HBitmapHdl) EndFunc Func Load_BMP_From_Mem($mem_image, $hHBITMAP = False) ;coded by UEZ - thanks to progandy for the MemGlobalAlloc and tVARIANT lines Local $memBitmap, $len, $tMem, $hImage, $hData, $pData, $hBitmap, $hStream, $tVARIANT, $aCall, $hHBmp $memBitmap = Binary($mem_image) ;load image saved in variable (memory) and convert it to binary $len = BinaryLen($memBitmap) ;get length of image $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002) $pData = _MemGlobalLock($hData) ;translate the handle into a pointer $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data _MemGlobalUnlock($hData) ;decrements the lock count associated with a memory object that was allocated with GMEM_MOVEABLE $hStream = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0) $hStream = $hStream[3] $hBitmap = DllCall($__g_hGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0) ;Creates a Bitmap object based on an IStream COM interface $hBitmap = $hBitmap[2] $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr") $aCall = DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $hStream, "dword", 8 + 8 * @AutoItX64, _ "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) ;release memory from $hStream to avoid memory leak $tMem = 0 If $hHBITMAP Then $hHBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) _GDIPlus_BitmapDispose($hBitmap) Return $hHBmp EndIf Return $hBitmap EndFunc ;==>Load_BMP_From_Mem ; #FUNCTION# ==================================================================================================================== ; Name...........: _GDIPlus_ImageLoadFromHGlobal ; Description ...: Creates an Image object based on movable HGlobal memory block ; Syntax.........: _GDIPlus_ImageLoadFromHGlobal($hGlobal) ; Parameters ....: $hGlobal - Handle of a movable HGlobal memory block ; Return values .: Success - Pointer to a new Image object ; Failure - 0 and either: ; |@error and @extended are set if DllCall failed: ; | -@error = 1 if could not create IStream ; | -@error = 2 if DLLCall to create image failed ; |$GDIP_STATUS contains a non zero value specifying the error code ; Author ........: ProgAndy ; Modified.......: ; Remarks .......: After you are done with the object, call _GDIPlus_ImageDispose to release the object resources. ; The HGLOBAL will be owned by the image and freed automatically when the image is disposed. ; Related .......: _GDIPlus_ImageLoadFromStream, _GDIPlus_ImageDispose ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _GDIPlus_ImageLoadFromHGlobal($hGlobal) Local $aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $hGlobal, "bool", True, "ptr*", 0) If @error Or $aResult[0] <> 0 Or $aResult[3] = 0 Then Return SetError(1, @error, 0) Local $hImage = DllCall($ghGDIPDll, "uint", "GdipLoadImageFromStream", "ptr", $aResult[3], "int*", 0) Local $error = @error Local $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr") Local $aCall = DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $aResult[3], "dword", 8 + 8 * @AutoItX64, "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) If $error Then Return SetError(2, $error, 0) If $hImage[2] = 0 Then Return SetError(3, 0, $hImage[2]) Return $hImage[2] EndFunc ;==>_GDIPlus_ImageLoadFromHGlobal ; #FUNCTION# ==================================================================================================================== ; Name...........: _MemGlobalAllocFromBinary ; Description ...: Greates a movable HGLOBAL memory block from binary data ; Syntax.........: _MemGlobalAllocFromBinary($bBinary) ; Parameters ....: $bBinary - Binary data ; Return values .: Success - Handle of a new movable HGLOBAL ; Failure - 0 and set @error: ; |1 - no data ; |2 - could not allocate memory ; |3 - could not set data to memory ; Author ........: ProgAndy ; Modified.......: ; Remarks .......: ; Related .......: _MemGlobalAlloc, _MemGlobalFree, _MemGlobalLock ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _MemGlobalAllocFromBinary(Const $bBinary) Local $iLen = BinaryLen($bBinary) If $iLen = 0 Then Return SetError(1, 0, 0) Local $hMem = _MemGlobalAlloc($iLen, $GMEM_MOVEABLE) If @error Or Not $hMem Then Return SetError(2, 0, 0) DllStructSetData(DllStructCreate("byte[" & $iLen & "]", _MemGlobalLock($hMem)), 1, $bBinary) If @error Then _MemGlobalUnlock($hMem) _MemGlobalFree($hMem) Return SetError(3, 0, 0) EndIf _MemGlobalUnlock($hMem) Return $hMem EndFunc ;==>_MemGlobalAllocFromBinary ; #FUNCTION# ==================================================================================================================== ; Name...........: _MemGlobalAllocFromMem ; Description ...: Greates a movable HGLOBAL memory block and copies data from memory ; Syntax.........: _MemGlobalAllocFromMem($pSource, $iLength) ; Parameters ....: $pSource - Pointer to memorybloc to copy from ; $iLength - Length of data to copy ; Return values .: Success - Handle of a new movable HGLOBAL ; Failure - 0 and set @error: ; |1 - invalid $pSource ; |2 - invalid $iLength ; |3 - could not allocate memory ; Author ........: ProgAndy ; Modified.......: ; Remarks .......: ; Related .......: _MemGlobalAlloc, _MemGlobalFree, _MemGlobalLock ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _MemGlobalAllocFromMem($pSource, $iLength) If Not $pSource Then Return SetError(1, 0, 0) If $iLength < 1 Then Return SetError(2, 0, 0) Local $hMem = _MemGlobalAlloc($iLength, $GMEM_MOVEABLE) If @error Or Not $hMem Then Return SetError(3, 0, 0) _MemMoveMemory($pSource, _MemGlobalLock($hMem), $iLength) _MemGlobalUnlock($hMem) Return $hMem EndFunc ;==>_MemGlobalAllocFromMem ; #FUNCTION# ==================================================================================================================== ; Name...........: _GUICtrlStatic_SetImage ; Description ...: Sets a HBITMAP to a static control like image or label ; Syntax.........: _GUICtrlStatic_SetImage($iCtrlId, $hBitmap) ; Parameters ....: $iCtrlId - CtrlId or handle of Control in the current process ; $hBitmap - Pointer top Windows HBITMAP ; Return values .: Success - 1 ; Failure - 0 and set @error: ; |1 - invalid $pSource ; |1 - invalid $pSource ; Author ........: ProgAndy, Zedna ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _GUICtrlStatic_SetImage($iCtrlId, $hBitmap) Local Const $STM_SETIMAGE = 0x0172 Local Const $IMAGE_BITMAP = 0 Local Const $SS_BITMAP = 0xE Local Const $GWL_STYLE = -16 If IsHWnd($iCtrlId) Then If WinGetProcess($iCtrlId) <> @AutoItPID Then Return SetError(1,0,0) Else $iCtrlId = GUICtrlGetHandle($iCtrlId) If Not $iCtrlId Then Return SetError(2,0,0) EndIf ; set SS_BITMAP style to control Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE) If @error Then Return SetError(3, 0, 0) DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP)) If @error Then Return SetError(4, 0, 0) Local $oldBmp = DllCall("user32.dll", "handle", "SendMessageW", "hwnd", $iCtrlId, "int", $STM_SETIMAGE, "wparam", $IMAGE_BITMAP, "handle", $hBitmap) If @error Then Return SetError(5, 0, 0) If $oldBmp[0] Then _WinAPI_DeleteObject($oldBmp[0]) Return 1 EndFunc ; ; = = = = = = = = = = = = = = = = = = = ; Func _My_LoadOpenBtnPicBin () ; Code Generated by BinaryToAu3Kompressor. Local $sFileBin = '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' $sFileBin &= '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' $sFileBin = Binary ( _Base64Decode ( $sFileBin ) ) Return $sFileBin EndFunc ;==> _My_LoadOpenBtnPicBin Func _Base64Decode($input_string) ; by trancexx Local $struct = DllStructCreate('int') Local $a_Call = DllCall('Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', 0, 'ptr', DllStructGetPtr($struct, 1), 'ptr', 0, 'ptr', 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, '') Local $a = DllStructCreate('byte[' & DllStructGetData($struct, 1) & ']') $a_Call = DllCall('Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', DllStructGetPtr($a), 'ptr', DllStructGetPtr($struct, 1), 'ptr', 0, 'ptr', 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, '') Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode Many thanks, @AutoBert ! Edited June 29, 2016 by Mbee Link to comment Share on other sites More sharing options...
UEZ Posted June 29, 2016 Share Posted June 29, 2016 (edited) I shorten you code a little bit and added _WinAPI_DeleteObject($Lf_HbitmapHdl) to release the GDI resource. expandcollapse popup#include <GDIPlus.au3> #include <GDIPlusConstants.au3> #include <GUIConstants.au3> #include <Memory.au3> #include <MemoryConstants.au3> Opt("MustDeclareVars", 1) Opt("GUIOnEventMode", 1) ; AutoItSetOption("WinTitleMatchMode", 1) AutoItSetOption("MouseCoordMode", 0) AutoItSetOption("GUICloseOnESC", 0 ) Global $ghGDIPDll = $__g_hGDIPDll Global $MyGUI = GUICreate("MyGUI",289,280,-1,-1,BitOr($WS_CAPTION,$WS_SYSMENU,$WS_MINIMIZEBOX,$WS_VISIBLE),BitOr($WS_EX_ACCEPTFILES,$WS_EX_APPWINDOW)) GUISetOnEvent($GUI_EVENT_CLOSE, "Close", $MyGUI) Global $Gc_OpenPicID1 = GUICtrlCreatePic("",102,20,85,30,-1,-1) Global $Gc_OpenPicID2 = GUICtrlCreatePic("",102,54,85,30,-1,-1) Global $Gc_OpenPicID3 = GUICtrlCreatePic("",102,88,85,30,-1,-1) Global $Gc_OpenPicID4 = GUICtrlCreatePic("",102,120,85,30,-1,-1) Global $Gc_OpenPicID5 = GUICtrlCreatePic("",102,154,85,30,-1,-1) Global $Gc_OpenPicID6 = GUICtrlCreatePic("",102,184,85,30,-1,-1) Global $G_BinOpenPic = _My_LoadOpenBtnPicBin() _GDIPlus_Startup() _Mod_Set_Control_From_Binary( $Gc_OpenPicID1, $G_BinOpenPic ) _Mod_Set_Control_From_Binary( $Gc_OpenPicID2, $G_BinOpenPic ) _Mod_Set_Control_From_Binary( $Gc_OpenPicID3, $G_BinOpenPic ) _Mod_Set_Control_From_Binary( $Gc_OpenPicID4, $G_BinOpenPic ) _Mod_Set_Control_From_Binary( $Gc_OpenPicID5, $G_BinOpenPic ) _Mod_Set_Control_From_Binary( $Gc_OpenPicID6, $G_BinOpenPic ) _GDIPlus_Shutdown() While True Sleep(1000) ; Sleep for a second WEnd Func Close() GUIDelete($MyGUI) Exit EndFunc Func _Mod_Set_Control_From_Binary( $arg_ControlID, $arg_BinaryImage ) Local $Lf_ControlHdl = GUICtrlGetHandle( $arg_ControlID ) Local $Lf_HbitmapHdl = _GDIPlus_BitmapCreateFromMemory( $arg_BinaryImage, True ) _GUICtrlStatic_SetImage($arg_ControlID, $Lf_HBitmapHdl) _WinAPI_DeleteObject($Lf_HbitmapHdl) EndFunc ; #FUNCTION# ==================================================================================================================== ; Name...........: _GUICtrlStatic_SetImage ; Description ...: Sets a HBITMAP to a static control like image or label ; Syntax.........: _GUICtrlStatic_SetImage($iCtrlId, $hBitmap) ; Parameters ....: $iCtrlId - CtrlId or handle of Control in the current process ; $hBitmap - Pointer top Windows HBITMAP ; Return values .: Success - 1 ; Failure - 0 and set @error: ; |1 - invalid $pSource ; |1 - invalid $pSource ; Author ........: ProgAndy, Zedna ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _GUICtrlStatic_SetImage($iCtrlId, $hBitmap) Local Const $STM_SETIMAGE = 0x0172 Local Const $IMAGE_BITMAP = 0 Local Const $SS_BITMAP = 0xE Local Const $GWL_STYLE = -16 If IsHWnd($iCtrlId) Then If WinGetProcess($iCtrlId) <> @AutoItPID Then Return SetError(1,0,0) Else $iCtrlId = GUICtrlGetHandle($iCtrlId) If Not $iCtrlId Then Return SetError(2,0,0) EndIf ; set SS_BITMAP style to control Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE) If @error Then Return SetError(3, 0, 0) DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP)) If @error Then Return SetError(4, 0, 0) Local $oldBmp = DllCall("user32.dll", "handle", "SendMessageW", "hwnd", $iCtrlId, "int", $STM_SETIMAGE, "wparam", $IMAGE_BITMAP, "handle", $hBitmap) If @error Then Return SetError(5, 0, 0) If $oldBmp[0] Then _WinAPI_DeleteObject($oldBmp[0]) Return 1 EndFunc ; ; = = = = = = = = = = = = = = = = = = = ; Func _My_LoadOpenBtnPicBin () ; Code Generated by BinaryToAu3Kompressor. Local $sFileBin = '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' $sFileBin &= 'uU1mqB2UenCPEAdJKHbvINIkaJXPCIC3XeNWrWTI2VAqpWz5scAOmomofzy72tGnq5vBZEYrNpF2hKTLi2Rrs0e4QSexdtcKT4HYAYDA9aRkjISEAq+bGURO/iHqRhSXRXQSxvWXIrOIAxjKlEu7iKIGASmKIdhgEBEBDcPYIdnvHzyDITiTQNeINA8YD3+QQ8QhoOvfptCsNT3MiYAKQQHXQQMUeIBAe4QHTt18vcGwrcZ6jkjGAVQHcIgHbv8APu93o+37tm4e6olEQ4u716fz1DZ9JYoeKAA8H29n5f22c63qkf06djLPVJ2Qr1hhXRHsVNQ7xdhIsHJAMUFWzpucipBMQx0lS8XAsiooiqU6ShyGa9vXp2QKzM0y8V6HtlTsLI8fOV6fZN5OJlGZzFOKLtk7IoiqBFSJronEvKN3CSThA6a6SahV+vUW0VOajrHWJSTgZ6IcldxkvFOVmUgycFAS8o3coGIoTiIY6SheLgVROoiqU6ShyGPeR+VD1C5aq6lLv2WpmZrC4JFexDaPr0AhJpomKdNKYVrcPEOZlAqiaaooSq7xEyyaaxiGVTIctYcSbnW5xgy5pZDxfg6tV65tTLHjp53K2izuYZVwQ6aq8AlbZ+daV9wZJVVAHMK3YLkbrLNyKFRVUIabr/lTeRyhW1Kjd8mTkvXFwTK8ikGMHCIyKaRinTSllICKi3EuiChE1RRk1naRlU01TEFRMhgOnjPVsZaadLVPwZkmSgMkUs+c08qRP0fRexLVvZb8wnqMqdOzw8hW5l4Zh014yex6Tp9Aqmcpc+xWdmItAj3c8oOYN6je5yLvEYxhbfjrJJN35XFkgexvo2a5xS8byNWvKSTypTkTaIZis7Fg0kI546bR1hRTaKKtX6TJIyEns8qXjHuEMDU7Elxk67aqWOVU7o2LEtHsadKy3BrO1w6jaejX8LIOkUQcrs3iCCryJUOuVJdqdyoClV61ygOValebDkmDyHMI3O3Fdp2uWfgym0rKg+MU7hrPxM20kYWXZbyE5llIRzho1KmkRqiiRJMpbe2/B+7resbVPEVkxbW3GPqGditR4KNNIV5WnOY4hk2r2rzddfxVhgZACnU5xIxcq1fPTrLKPXDhRZUx4Cr8zmar3OeyDDXebRt1qK6Ts8o8BpLksSLwxTrtpyMmGr+JlWepCAkzfMF2rYqaZGyKREyFK6O+UZzG9yPW8tOcivzX2nMlo2qS5I2CQZV2OcMnscvHw1cQik6xHsVmci+RVaNoZNup0lRQ6Yq8KgI7Hdx3Y47EluwY0xVDkxhf5FCYu8CpL2Vw/tku1kY6WbSlgtbmbWuErJN5CIjXCD55PqukuaJJEVKhxJmUXNuzm8v9fyg4vEma71NmrHVmVIwhkWsBHrs3jBdjEwKManXmDNZpIPElWreKTQU5wooYgq6HAfs9Y1lj6VZcdNLEulTLhNRNiskHzLNRKUmYPpHVj1V2q2PIImQF0qZRJq7QbuzlQUeJODtGpkZRkK3jOUyJUMsvquyXyFQa7O1So2QHUgkvC1+yc16ZjUGSDxOMXI6KzRIms8YuXTJMzlJgu2TevCuGM0hL4xp9hoLWZdpVG1zEXPWCG5BodKSl4bl+jnirlRud8kZAXChjpN3SKDk5UDuklztmxkoOOf47cP8AGX8vzHaRvDhDUO0Q+8e38dmcGJHev8BvvDs2YZfUMzTRMCaoCbcPYA+79+kPs2wnV6SAo8Ih266dv39mnd3jssR+IHJlC8oTs17ezTu2qXkXUsEo4QrFectZeySz5mg0jEnQCXnxeJEYtV10ucKg5k5TocUzbCBnLhw7KmggoqZMh4kuGUGzNk7MRdJdZFIzkyPLFKUpW2qhU1FNRImo5XIm1RIP1iiqwFIQTCBRsrjHd7fyktGEWauWjV04SYJueaqHOZR9ogqukhwgougwZqryDtYmiKKDY51VCJgcxfpzaCMaTeHdGGmbGVjMmacp2H6dFSQpAYCdJ6tTcmKAG3GASlcFKYDAAgYBAe7ahG25fZq1d6CNOGtmEjovNtVdu5GGIqSHs9dlHVfsTIiob+iqyDExDyEcVUCrDGPufZnUKAmS2WYexTsAdQ0LLP40FzoHcpNXKibZ2LYVBbg9a8QtnpEeWW5NN0ksmUFVQAuihwFq2ej0+6Jt07VW4eeFmm7SYOJBigs+jCPwQB6MVI8IP4pR1zVqK60c5bKqC2bmMcTIJCXCJN+Ct6Qpt66dLZ1zUik4XVVTapsKXwN0znExUSqFiyKHKmUQIBziJzAG8w7xHZVXvdqcmEy0mQ5ja6j0dFl117+wjIodvqDZuM8O46YEKRpAKpFIGhQGcsSogAetWWUMP3iO0bN4JnovMO82c83CI/5aph+TINsMbZPj3vij/wAJh8LsqFxvTC90Qf3rMj+cgO3DyS/Rb7cc3fD1T5LY8K57z4vsTD4Xbl1c030Qf3pMfMNl5Jfot9uObvhqp8lseFc/58X2Nh8LsdXNN9EH96THzDZeSX6Lfbjm74aqfJbHhXP+fF9jYfC7HVzTfRB/ekx8w2Xkl+i3245u+GqnyWx4Vz/nxfY2Hwux1c030Qf3pMfMNl5Jfot9uObvhqp8lseFc/58X2Nh8LsdXNN9EH96THzDZeSX6Lfbjm74aqfJbHhXP+fF9jYfC7HVzTfRB/ekx8w2Xkl+i3245u+GqnyWx4Vz/nxfY2Hwux1c030Qf3pMfMNuBvBK9FRwED5vzaYB7wFvVe3/AKe3EbTOj3vSj9rNj8NtyLjyoF7SxSgD6pSY+YbXK0g+Dp8nvpMuEJkVOuWLLt6rM6lYq9MZFeJOY6Kk26R0WrlCuNihDi4bJqKAgvzBVCCqqO8RVU4kx1JPnuoOXKihBMU/JBwpocZCmIVQG6QEQKcCnOHGCYG0ObUf3h1X46CiIkSmYMEEFSpnRBybiXeCiqoRVREz1wZV2ZEyiaZxSMsKeqaehf3CaZ5yEIkQiaZCppplKRNMhQIQhCABSkIUoAUpSlAClKUAAAAAAAANsLZW2//Z' $sFileBin = Binary ( _Base64Decode ( $sFileBin ) ) Return $sFileBin EndFunc ;==> _My_LoadOpenBtnPicBin Func _Base64Decode($input_string) ; by trancexx Local $struct = DllStructCreate('int') Local $a_Call = DllCall('Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', 0, 'ptr', DllStructGetPtr($struct, 1), 'ptr', 0, 'ptr', 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, '') Local $a = DllStructCreate('byte[' & DllStructGetData($struct, 1) & ']') $a_Call = DllCall('Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', DllStructGetPtr($a), 'ptr', DllStructGetPtr($struct, 1), 'ptr', 0, 'ptr', 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, '') Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode Without seeing your full code I cannot say what's wrong with it (at least the GUI initializing part). Edited June 29, 2016 by UEZ Mbee 1 Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
Mbee Posted June 30, 2016 Author Share Posted June 30, 2016 Wow, that's vastly improved and optimized! You have my considerable gratitude, @UEZ ! And although I very much needed your help, I sincerely apologize for messaging you. I won't do it again. Alas, although your optimized func works perfectly, the controls set that way still only show up when I run the debugger. What a bizzare situation... Link to comment Share on other sites More sharing options...
Mbee Posted June 30, 2016 Author Share Posted June 30, 2016 Aha! A vital clue! If I use the directive: #AutoIt3Wrapper_UseX64=N to disable building 64-bit code, everything works correctly in normal exe mode! Since the only significant change to my app that produced this strange situation was to switch from creating my GUI control pics and button images from files to setting their images from internal binary data, obviously something in that new code (thanks again, UEZ) doesn't work right in 64-bit mode! I'm gonna look at the memory allocation stuff in there and see if I can figure out how to make it compatible with 64-bit code (although this stuff is mostly over my tiny little head!) Link to comment Share on other sites More sharing options...
Mbee Posted June 30, 2016 Author Share Posted June 30, 2016 Well, I haven't been able to figure out why the code UEZ & ProgAndy put together doesn't work correctly in my app when I compile it for 64-bits. Any suggestions? Link to comment Share on other sites More sharing options...
AutoBert Posted June 30, 2016 Share Posted June 30, 2016 I have modiefied @UEZ's example script Display images from memory in controls: expandcollapse popup;coded by UEZ 2011 #include <buttonconstants.au3> #include <guiconstantsex.au3> #include <gdiplus.au3> #include <memory.au3> _GDIPlus_Startup() ;~ Global Const $IMAGE_BITMAP = 0 Global Const $STM_SETIMAGE = 0x0172 Global $hBmp_Logo, $hBmp_Button ;needed for releasing the objekts Global $msg Global Const $hGUI = GUICreate("Example", 600, 250) Global Const $idLogo = GUICtrlCreatePic("", 215, 20, 169, 68) Global Const $idButton = GUICtrlCreateButton("", 266, 150, 78, 81, $BS_FLAT + $BS_BITMAP) Global Const $hButton = GUICtrlGetHandle($idButton) _SetImageFromMem($idLogo,'AutoIt_Logo',$hBmp_Logo) _SetImageFromMem($hButton,'Merlin',$hBmp_Button) Func _SetImageFromMem($Control,$MemFunc, ByRef $hGDIBmp) ;_SetImageFromMem($Control,$MemFunc, ByRef $hGDIBmp) ;Parameters: $Control the ControlID or the ControlHandle ; $MemFunc Functionname which returns the Memorydata ; $hGDIBmp the GDIPlusBitmaphandle $dImage=Call(Execute($MemFunc)) ConsoleWrite($dImage&@CRLF) $hGDIBmp = _GDIPlus_BitmapCreateFromMemory($dImage, True) _WinAPI_DeleteObject(GUICtrlSendMsg($Control, $STM_SETIMAGE, $IMAGE_BITMAP, $hGDIBmp)) If IsHWnd($Control) Then ConsoleWrite('_WinAPI_UpdateWindow'&@CRLF) _WinAPI_UpdateWindow($Control) EndIf EndFunc #cs Global Const $Bmp_Logo = _GDIPlus_BitmapCreateFromMemory(AutoIt_Logo(), True) _WinAPI_DeleteObject(GUICtrlSendMsg($idLogo, $STM_SETIMAGE, $IMAGE_BITMAP, $Bmp_Logo)) Global Const $Bmp_Button = _GDIPlus_BitmapCreateFromMemory(Merlin(), True) _WinAPI_DeleteObject(_SendMessage($hButton, $BM_SETIMAGE, $IMAGE_BITMAP, $Bmp_Button)) _WinAPI_UpdateWindow($hButton) #ce GUISetState() While True $msg = GUIGetMsg() Switch $msg Case $idLogo MsgBox(0, "Information", "The picture has been clicked!") Case $idButton MsgBox(0, "Information", "the button has been clicked!") Case $GUI_EVENT_CLOSE _WinAPI_DeleteObject($hBmp_Logo) _WinAPI_DeleteObject($hBmp_Button) _GDIPlus_Shutdown() GUIDelete($hGUI) Exit EndSwitch WEnd Func AutoIt_Logo() Local $AutoIt_Logo $AutoIt_Logo &= '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' $AutoIt_Logo &= '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' $AutoIt_Logo &= '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' $AutoIt_Logo &= 'cy5hgUkAqHEOcABh1yoABOpwVLGVSVcAZYpQ1AQvsBMAfYoZ69AEe4AABTHzZgA0ABsA4AsP0D+WCrMAHmBImEED/eUAEPEKAC5Qr50AsAqkCpDX8AkABkALbxAGofAARVJrC0FzsPcAYFi0kLW+KgUAV7kGwvCmLQAABxcLbAPRD9IAig0JkADkmQEA4LAuGogXHQAAA85gLntAGOMAxBSD0AEJMAYAd4AXCTAANDAAdEtwBTKQBF8AAAlYME6EAQMAotMEAgADIzAAAAlQB/81lpIA/wAEqUAkrQMAHIMQGom3BCAA0wH6kgSD0L0A3QoHQNQQ0uAAC+zgAs7gDAgAgAb+iKqVe7kAW1APiCABUQsAOJ/bDVpgA2EAAAG0wKsQywkAczALZ9AJzuAAAiwgAObDU6AA6Q9CYAXqMAEALgAHwICzWYMADxoHtuyAAScA1gS+QIMIgAAAVtACPoABOzAAAVFQryEsAIsAdG4u8AL4W68AL6DCTNByJvAAuFaAADjQYggAMAE+IABgsAcATHAbWfOnGwAAtkF8bdzRBEAAELZEOwEUCwcAMqB4jDsMGXAAvy7gAssgAnwA4HR6EASWCwEAAQxBUXs4CIwACFTAwDNQAHoAIAW4hpk0cMYA7DBnLmQ2WUMAAzS8AzIgA0AA/+CzYvMAzuAAC4icyEAgeZkA0AQykAHfIgAAMhAAe9AIwIAAyIi8yIuUCQgABQSJfMpA8AAA8NNyrmECviAACZLgCwKwA2AA8ACpMHkzkQkAD6AOkhDJigwABoqXA00QB7MAcsq/LMYOIQYAauADL9ACLeAAAgiAAmuMqkEA0Kqw8Az18EAAP7DN1xNHEAAACzNQCOnVx6sAsAzOzA7zwQ8ATUB3AuFIlfQASEP8D+5cSXgAQCQttwdxkM8Ae3BQTPDOP+sAnRH2zpMHGcIAjAd7AAL5HAcAILAH69YxYTEAz5GUbSGSA1cAgG30PFwPkQMA0rADPsAOzgwAzfybCAqgB4IAMA4zAAungAsAXPQETxBHzxAADm4wDkGgBz0A/4CNa9AF5twAAi8Axhk8m7IAswRAHdSbw0gAQh3Uf5QDNMcABOc5c0VX1EAAHRY50NRF/UcAjDRESs0E58MA1Ljx01PNFlEA7dRUndHVIAAAHe3MLUAEZ1AAA+jwCuSgB4UAYNJuEA6nMNcA4QDTqCDOt/AACokwByKwAdwAcM4+sANxcJ4AQw0SUR3WG5EAA4pddIgtFGIAYA0CAAfs8AIAzayPJUBvPUAADkcQBIWACp4A7dmFUAhHMFMA61UDQxABE6AA0ywAB4K91AMABCyR8dg7kAEAAEDZPrwMUcAABYuQCK7QA7cAcATADdy3QA4ArwANiwANSFAAgzqNpxggA3EA0EevDduxXQ0AQCAJPsACto0AxstwATeARW0A/wANsiAL0PAA3WiABDzwDZ0A0AKTzQI+EL4AILDURifd3SEARA8gALTNAuwAkN8vMAEemg4Av9AFQ9AFZ/AACzywDVbQwy8AwA4sAAAZAAwAARAIWR3d8p0AMplgDWAALgAAwAL4PdnOIAwAy0AEII4ANMAAnwmu4AxuAkAA8NznU9gT/iYAslMNpAAEJoAAAT6Q4Rue3zgAnt8aDgAzLAAAKa7O89LYLS4AIlGdCdUQCAEAIAMmsA4Z4AMANQ4AUM7jPpAAAetgApv83C4AdAXsPOTAUuQAV6AKpPCsQLAAA8AgAGb+yZMA3GiBAORaLuQAXI4pi50JV/AA5aqgCk8KAqQAAAKBoArqfD4Ac66+Ev7mmNIA1HI+5+syRHMAIO4rgC7ojF4AEIp92IxddIoA3eiUXumWfukAmJ7pmr7pnB4AEAA7' $AutoIt_Logo = _Base64Decode($AutoIt_Logo) Local $tSource = DllStructCreate('byte[' & BinaryLen($AutoIt_Logo) & ']') DllStructSetData($tSource, 1, $AutoIt_Logo) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress) $tSource = 0 Return Binary(DllStructGetData($tDecompress, 1)) EndFunc ;==>AutoIt_Logo Func Merlin() Local $Merlin $Merlin &= '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' $Merlin &= 'OZ54QIDDNkMgcVa9lHDvBwQEII8AgJTwgB0gM0LrCTzIYIo5eqSwRAgQpPKKBFNk45QxU9grQSpePNBAAvYAckAJhgT/Me0G2DhhxwMQXDGLEEdssccm1dSjwAWAOJWP1GsHAUoKLOAiAAGAfAABDzFggI0VL8hTwgEh5KIKOCxgkkwwCqzd9lD1XKG2AvXU0kEf65RiD+d7LwHHCBj8wEPPPYsgzO6DYOLwvb3o1AwuqdwbDSCLALNFKJvrvXcKJzABxxQ9AwKIACLkMUwfHUACgU8SQBA9TJu8fy8BS3BRxg0JGJA38iFIhCAYcADzAYIA9hDAEgrghlgIIgQPs9cUQPASKDQAEK94xQU+IAB9+EEK+gjAA37nPa354AAESOEBE2iAFKTDBwnImk8uIAAtgOsk14DBGlpggFQcwAAzGEIB/xjAgAgIIAQh8N4Bp2APbqWQhQxoQToYIAAIlGACj1jDGm6IQxjokAcG8MCqBlCAASTgAYK4QhLNRwABuPF3bTTAAwbgh0dM4AFQgMYadMhFlCTiC87gRTh80AI/BKAABQiACEyRDDWu0I1uTKEADGCALWjhEUawBS9EsQYy9BEliDhFIVCAAmV8oQD6KEADFAkJVSgiBJKkJCTdKII9uIALjyDDKNsAh6y0hgp0gEMDBnCNRNwgFLmYxSweKUsB5AN9odCDC4iQDnLg4DiKIgoSspCBFWQgDvIgphkSUYoOzCIZv3OjLEUQDEWAAhQdWAcR4ODNFVSAHKgaChLekf+BDNThFqMYwASkwYYOdEAIwRCBOilJSXsoQhUdoAEQhtGINERhBbdAgVOQgALWkCEDUBhAA1hAAyEIQRiQZChDH2AARUSUBtJoRBTYsYI4oGA5Q7GGP7LzhSTgogAzWMAiPOEJA6T0AUhl6BKEIQSJSmEP7BhCGvxRCKdQog47hQY0GABULTTAAyJg6UojgNQHiOAFQtCDHtjAg058oQ7kSII3skKJRtAiCZxApBa0UIAEkHWsESArS9vxggSMQg9wSActCqGLuc7FDsDgxDV24AO+BuCvcoxAAjYb2Ah4wAMJ8EAlYjEEdXDiHogIzDDigYw+mIEFPkikX8u62QD/bPa2tdVHA4aADH54ZC6IYEE/+vAJcLghtgywLVKXkIAAONe5t3UuV4fAiXT8di6XQMYnzrEFNPA1uZu9Ai48EAB93OC5zyViAaSgjk5cNytg4IcdzDAIHlR2iLb1QB4wUQkSVGIR50UvA8iohXLkMjAqSAcXCmAGO6DBAmVMrn5pkIsjAMETAZYuVwtQYGc8IjDGMMEEGpACalgAwikYgD5G4QkgsIEGpbgBEZMbAPVy2AgWSAeIRVyACczAAnwtgDxKAYQOsOHIeZDxjGes13RYAFdzMYQFJkDlGfghyAyoxB7McGQagKMS+mBAmJkM1HQYQQsI3usMZqCFKyNyacCyWAQbznEEM7hAyWSeQJuvoALNwAIKUNBCC6b85hvAgQ2J2MEO5LFkG0/AAipILXNOAQYLxBaRN1hEOxqgygWseQYNaEBQfZCCFHxIBW8otTwYPYAUGGITIIi1rGP9BplB6da4TkhAAAA7' Return Binary(_Base64Decode($Merlin)) EndFunc ;==>Merlin Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize = 0x800000) Local $tBuffer, $Ret $tOutput = 0 $tBuffer = DllStructCreate('byte[' & $iBufferSize & ']') If @error Then Return SetError(1, 0, 0) $Ret = DllCall('ntdll.dll', 'uint', 'RtlDecompressBuffer', 'ushort', 0x0002, 'ptr', DllStructGetPtr($tBuffer), 'ulong', $iBufferSize, 'ptr', DllStructGetPtr($tInput), 'ulong', DllStructGetSize($tInput), 'ulong*', 0) If @error Then Return SetError(2, 0, 0) If $Ret[0] Then Return SetError(3, $Ret[0], 0) $tOutput = DllStructCreate('byte[' & $Ret[6] & ']') If Not _WinAPI_MoveMemory(DllStructGetPtr($tOutput), DllStructGetPtr($tBuffer), $Ret[6]) Then $tOutput = 0 Return SetError(4, 0, 0) EndIf Return $Ret[6] EndFunc ;==>_WinAPI_LZNTDecompress Func _Base64Decode($input_string) Local $struct = DllStructCreate("int") Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, "") Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]") $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, "") Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode the func _SetImageFromMem is bugy when using gif it's not working. Mbee 1 Link to comment Share on other sites More sharing options...
UEZ Posted June 30, 2016 Share Posted June 30, 2016 An updated version what AutoBert has posted: expandcollapse popup;coded by UEZ 2012 #include <WindowsConstants.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GDIPlus.au3> #include <Memory.au3> _GDIPlus_Startup() ;~ Global Const $IMAGE_BITMAP = 0 Global Const $STM_SETIMAGE = 0x0172 Global $msg Global Const $hGUI = GUICreate("Test", 600, 250) Global Const $idLogo = GUICtrlCreatePic("", 215, 20, 169, 68) Global Const $idButton = GUICtrlCreateButton("", 266, 150, 78, 81, BitOR($BS_FLAT, $BS_BITMAP)) Global Const $hButton = GUICtrlGetHandle($idButton) Global $hBmp, $hBmp_Logo, $hBmp_Button If @OSBuild < 6000 Then $hBmp = _GDIPlus_BitmapCreateFromMemory(AutoIt_Logo()) $hBmp_Logo = ConvertBitmap($hBmp) _GDIPlus_BitmapDispose($hBmp) Else $hBmp_Logo = _GDIPlus_BitmapCreateFromMemory(AutoIt_Logo(), True) EndIf _WinAPI_DeleteObject(GUICtrlSendMsg($idLogo, $STM_SETIMAGE, $IMAGE_BITMAP, $hBmp_Logo)) If @OSBuild < 6000 Then $hBmp = _GDIPlus_BitmapCreateFromMemory(Merlin()) $hBmp_Button = ConvertBitmap($hBmp) _GDIPlus_BitmapDispose($hBmp) Else $hBmp_Button = _GDIPlus_BitmapCreateFromMemory(Merlin(), True) EndIf _WinAPI_DeleteObject(_SendMessage($hButton, $BM_SETIMAGE, $IMAGE_BITMAP, $hBmp_Button)) ;~ _WinAPI_UpdateWindow($hButton) GUISetState() While True Switch GUIGetMsg() Case $idLogo MsgBox(0, "Information", "Bild wurde geklickt!") Case $idButton MsgBox(0, "Information", "Button wurde geklickt!") Case $GUI_EVENT_CLOSE _WinAPI_DeleteObject($hBmp_Logo) _WinAPI_DeleteObject($hBmp_Button) GUIDelete($hGUI) _GDIPlus_Shutdown() Exit EndSwitch WEnd Func ConvertBitmap($hBitmap) Local $iButtonColor = _WinAPI_GetSysColor($COLOR_BTNFACE) $iButtonColor = 0x10000 * BitAND($iButtonColor, 0xFF) + BitAND($iButtonColor, 0x00FF00) + BitShift($iButtonColor, 16) Local $iWidth = _GDIPlus_ImageGetWidth($hBitmap), $iHeight = _GDIPlus_ImageGetHeight($hBitmap) Local $hBitmap_New = _GDIPlus_BitmapCreateFromMemory($iWidth, $iHeight) Local $hCtx_new = _GDIPlus_ImageGetGraphicsContext($hBitmap_New) Local $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000 + $iButtonColor) _GDIPlus_GraphicsFillRect($hCtx_new, 0, 0, $iWidth, $iHeight, $hBrush) _GDIPlus_GraphicsDrawImageRect($hCtx_new, $hBitmap, 0, 0, $iWidth, $iHeight) Local $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap_New) _GDIPlus_BrushDispose($hBrush) _GDIPlus_BitmapDispose($hBitmap_New) _GDIPlus_GraphicsDispose($hCtx_new) Return $hHBitmap EndFunc ;==>ConvertBitmap Func AutoIt_Logo() Local $AutoIt_Logo $AutoIt_Logo &= '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' $AutoIt_Logo &= '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' $AutoIt_Logo &= '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' $AutoIt_Logo &= 'cy5hgUkAqHEOcABh1yoABOpwVLGVSVcAZYpQ1AQvsBMAfYoZ69AEe4AABTHzZgA0ABsA4AsP0D+WCrMAHmBImEED/eUAEPEKAC5Qr50AsAqkCpDX8AkABkALbxAGofAARVJrC0FzsPcAYFi0kLW+KgUAV7kGwvCmLQAABxcLbAPRD9IAig0JkADkmQEA4LAuGogXHQAAA85gLntAGOMAxBSD0AEJMAYAd4AXCTAANDAAdEtwBTKQBF8AAAlYME6EAQMAotMEAgADIzAAAAlQB/81lpIA/wAEqUAkrQMAHIMQGom3BCAA0wH6kgSD0L0A3QoHQNQQ0uAAC+zgAs7gDAgAgAb+iKqVe7kAW1APiCABUQsAOJ/bDVpgA2EAAAG0wKsQywkAczALZ9AJzuAAAiwgAObDU6AA6Q9CYAXqMAEALgAHwICzWYMADxoHtuyAAScA1gS+QIMIgAAAVtACPoABOzAAAVFQryEsAIsAdG4u8AL4W68AL6DCTNByJvAAuFaAADjQYggAMAE+IABgsAcATHAbWfOnGwAAtkF8bdzRBEAAELZEOwEUCwcAMqB4jDsMGXAAvy7gAssgAnwA4HR6EASWCwEAAQxBUXs4CIwACFTAwDNQAHoAIAW4hpk0cMYA7DBnLmQ2WUMAAzS8AzIgA0AA/+CzYvMAzuAAC4icyEAgeZkA0AQykAHfIgAAMhAAe9AIwIAAyIi8yIuUCQgABQSJfMpA8AAA8NNyrmECviAACZLgCwKwA2AA8ACpMHkzkQkAD6AOkhDJigwABoqXA00QB7MAcsq/LMYOIQYAauADL9ACLeAAAgiAAmuMqkEA0Kqw8Az18EAAP7DN1xNHEAAACzNQCOnVx6sAsAzOzA7zwQ8ATUB3AuFIlfQASEP8D+5cSXgAQCQttwdxkM8Ae3BQTPDOP+sAnRH2zpMHGcIAjAd7AAL5HAcAILAH69YxYTEAz5GUbSGSA1cAgG30PFwPkQMA0rADPsAOzgwAzfybCAqgB4IAMA4zAAungAsAXPQETxBHzxAADm4wDkGgBz0A/4CNa9AF5twAAi8Axhk8m7IAswRAHdSbw0gAQh3Uf5QDNMcABOc5c0VX1EAAHRY50NRF/UcAjDRESs0E58MA1Ljx01PNFlEA7dRUndHVIAAAHe3MLUAEZ1AAA+jwCuSgB4UAYNJuEA6nMNcA4QDTqCDOt/AACokwByKwAdwAcM4+sANxcJ4AQw0SUR3WG5EAA4pddIgtFGIAYA0CAAfs8AIAzayPJUBvPUAADkcQBIWACp4A7dmFUAhHMFMA61UDQxABE6AA0ywAB4K91AMABCyR8dg7kAEAAEDZPrwMUcAABYuQCK7QA7cAcATADdy3QA4ArwANiwANSFAAgzqNpxggA3EA0EevDduxXQ0AQCAJPsACto0AxstwATeARW0A/wANsiAL0PAA3WiABDzwDZ0A0AKTzQI+EL4AILDURifd3SEARA8gALTNAuwAkN8vMAEemg4Av9AFQ9AFZ/AACzywDVbQwy8AwA4sAAAZAAwAARAIWR3d8p0AMplgDWAALgAAwAL4PdnOIAwAy0AEII4ANMAAnwmu4AxuAkAA8NznU9gT/iYAslMNpAAEJoAAAT6Q4Rue3zgAnt8aDgAzLAAAKa7O89LYLS4AIlGdCdUQCAEAIAMmsA4Z4AMANQ4AUM7jPpAAAetgApv83C4AdAXsPOTAUuQAV6AKpPCsQLAAA8AgAGb+yZMA3GiBAORaLuQAXI4pi50JV/AA5aqgCk8KAqQAAAKBoArqfD4Ac66+Ev7mmNIA1HI+5+syRHMAIO4rgC7ojF4AEIp92IxddIoA3eiUXumWfukAmJ7pmr7pnB4AEAA7' $AutoIt_Logo = _Base64Decode($AutoIt_Logo) Local $tSource = DllStructCreate('byte[' & BinaryLen($AutoIt_Logo) & ']') DllStructSetData($tSource, 1, $AutoIt_Logo) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress) $tSource = 0 Return Binary(DllStructGetData($tDecompress, 1)) EndFunc ;==>AutoIt_Logo Func Merlin() Local $Merlin $Merlin &= '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' $Merlin &= 'OZ54QIDDNkMgcVa9lHDvBwQEII8AgJTwgB0gM0LrCTzIYIo5eqSwRAgQpPKKBFNk45QxU9grQSpePNBAAvYAckAJhgT/Me0G2DhhxwMQXDGLEEdssccm1dSjwAWAOJWP1GsHAUoKLOAiAAGAfAABDzFggI0VL8hTwgEh5KIKOCxgkkwwCqzd9lD1XKG2AvXU0kEf65RiD+d7LwHHCBj8wEPPPYsgzO6DYOLwvb3o1AwuqdwbDSCLALNFKJvrvXcKJzABxxQ9AwKIACLkMUwfHUACgU8SQBA9TJu8fy8BS3BRxg0JGJA38iFIhCAYcADzAYIA9hDAEgrghlgIIgQPs9cUQPASKDQAEK94xQU+IAB9+EEK+gjAA37nPa354AAESOEBE2iAFKTDBwnImk8uIAAtgOsk14DBGlpggFQcwAAzGEIB/xjAgAgIIAQh8N4Bp2APbqWQhQxoQToYIAAIlGACj1jDGm6IQxjokAcG8MCqBlCAASTgAYK4QhLNRwABuPF3bTTAAwbgh0dM4AFQgMYadMhFlCTiC87gRTh80AI/BKAABQiACEyRDDWu0I1uTKEADGCALWjhEUawBS9EsQYy9BEliDhFIVCAAmV8oQD6KEADFAkJVSgiBJKkJCTdKII9uIALjyDDKNsAh6y0hgp0gEMDBnCNRNwgFLmYxSweKUsB5AN9odCDC4iQDnLg4DiKIgoSspCBFWQgDvIgphkSUYoOzCIZv3OjLEUQDEWAAhQdWAcR4ODNFVSAHKgaChLekf+BDNThFqMYwASkwYYOdEAIwRCBOilJSXsoQhUdoAEQhtGINERhBbdAgVOQgALWkCEDUBhAA1hAAyEIQRiQZChDH2AARUSUBtJoRBTYsYI4oGA5Q7GGP7LzhSTgogAzWMAiPOEJA6T0AUhl6BKEIQSJSmEP7BhCGvxRCKdQog47hQY0GABULTTAAyJg6UojgNQHiOAFQtCDHtjAg058oQ7kSII3skKJRtAiCZxApBa0UIAEkHWsESArS9vxggSMQg9wSActCqGLuc7FDsDgxDV24AO+BuCvcoxAAjYb2Ah4wAMJ8EAlYjEEdXDiHogIzDDigYw+mIEFPkikX8u62QD/bPa2tdVHA4aADH54ZC6IYEE/+vAJcLghtgywLVKXkIAAONe5t3UuV4fAiXT8di6XQMYnzrEFNPA1uZu9Ai48EAB93OC5zyViAaSgjk5cNytg4IcdzDAIHlR2iLb1QB4wUQkSVGIR50UvA8iohXLkMjAqSAcXCmAGO6DBAmVMrn5pkIsjAMETAZYuVwtQYGc8IjDGMMEEGpACalgAwikYgD5G4QkgsIEGpbgBEZMbAPVy2AgWSAeIRVyACczAAnwtgDxKAYQOsOHIeZDxjGes13RYAFdzMYQFJkDlGfghyAyoxB7McGQagKMS+mBAmJkM1HQYQQsI3usMZqCFKyNyacCyWAQbznEEM7hAyWSeQJuvoALNwAIKUNBCC6b85hvAgQ2J2MEO5LFkG0/AAipILXNOAQYLxBaRN1hEOxqgygWseQYNaEBQfZCCFHxIBW8otTwYPYAUGGITIIi1rGP9BplB6da4TkhAAAA7' Return Binary(_Base64Decode($Merlin)) EndFunc ;==>Merlin Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize = 0x800000) Local $tBuffer, $Ret $tOutput = 0 $tBuffer = DllStructCreate('byte[' & $iBufferSize & ']') If @error Then Return SetError(1, 0, 0) $Ret = DllCall('ntdll.dll', 'uint', 'RtlDecompressBuffer', 'ushort', 0x0002, 'ptr', DllStructGetPtr($tBuffer), 'ulong', $iBufferSize, 'ptr', DllStructGetPtr($tInput), 'ulong', DllStructGetSize($tInput), 'ulong*', 0) If @error Then Return SetError(2, 0, 0) If $Ret[0] Then Return SetError(3, $Ret[0], 0) $tOutput = DllStructCreate('byte[' & $Ret[6] & ']') If Not _WinAPI_MoveMemory(DllStructGetPtr($tOutput), DllStructGetPtr($tBuffer), $Ret[6]) Then $tOutput = 0 Return SetError(4, 0, 0) EndIf Return $Ret[6] EndFunc ;==>_WinAPI_LZNTDecompress Func _Base64Decode($input_string) Local $struct = DllStructCreate("int") Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, "") Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]") $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, "") Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode Mbee 1 Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
AutoBert Posted June 30, 2016 Share Posted June 30, 2016 @Uez: The original i modified runs with gif's also, but i tried to build a function for easier use and this func fails with gif's. Link to comment Share on other sites More sharing options...
Zedna Posted July 1, 2016 Share Posted July 1, 2016 (edited) You may look at my Resources UDF (sources) where I fixed X64 compatibility many years ago. Link to my Resources UDF is in my signature ... EDIT: There is also derived ResourcesEx UDF by guinness which is compatible with latest AutoIt Edited July 1, 2016 by Zedna Mbee 1 Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
Mbee Posted July 12, 2016 Author Share Posted July 12, 2016 Hello again, and my considerable thanks go out to you all! My family experienced some now-mostly-resolved crises starting around July 1 until today, which is why I haven't replied earlier. Forgive me, but these final few replies have left me a trifle uncertain as to what to do next. @Zedna, I'm afraid I don't know if I should be using "resources" in the GUI app I'm developing, but I like the idea of them because they're essentially the Windows equivalent of Macintosh resources (which I very much loved when I was working on Macs). But perhaps using them at this point is premature, unless the ResourcesEX UDF you've kindly pointed me to works better than what AutoBert and UEZ have posted above. Your advice? As for @AutoBert and @UEZ, one set of your posted code appears to supersede the other. I don't plan to use GIFs for my control images, so it seems that I should borrow UEZ's code snippet. Or am I confused? At any rate, thank you all for your helpful replies! Link to comment Share on other sites More sharing options...
Mbee Posted July 12, 2016 Author Share Posted July 12, 2016 (edited) Okay, this is what I've put together from AutoBert's & UEZ's code snippets. Please advise if I've gotten something wrong... expandcollapse popup; ; By UEZ, AutoBert, Prog@ndy, and Zedna ; Func _Set_Control_From_Binary( $arg_ControlID, $arg_BinaryImage ) Local $Lf_BitmapHdl, $Lf_HbitmapHdl If @OSBuild < 6000 Then $Lf_BitmapHdl = _GDIPlus_BitmapCreateFromMemory( $arg_BinaryImage ) $Lf_HbitmapHdl = _ConvertBitmapToHbitmap( $Lf_BitmapHdl ) _GDIPlus_BitmapDispose( $Lf_BitmapHdl ) Else $Lf_HbitmapHdl = _GDIPlus_BitmapCreateFromMemory( $arg_BinaryImage, True ) EndIf _WinAPI_DeleteObject( GUICtrlSendMsg( $arg_ControlID, $STM_SETIMAGE, $IMAGE_BITMAP, $Lf_HbitmapHdl ) ) SetError( 0, 0 ) Return 0 EndFunc ;==> _Set_Control_From_Binary ; ; = = = ; Func _ConvertBitmapToHbitmap($hBitmap) Local $iButtonColor = _WinAPI_GetSysColor($COLOR_BTNFACE) $iButtonColor = 0x10000 * BitAND($iButtonColor, 0xFF) + BitAND($iButtonColor, 0x00FF00) + BitShift($iButtonColor, 16) Local $iWidth = _GDIPlus_ImageGetWidth($hBitmap), $iHeight = _GDIPlus_ImageGetHeight($hBitmap) Local $hBitmap_New = _GDIPlus_BitmapCreateFromMemory($iWidth, $iHeight) Local $hCtx_new = _GDIPlus_ImageGetGraphicsContext($hBitmap_New) Local $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000 + $iButtonColor) _GDIPlus_GraphicsFillRect($hCtx_new, 0, 0, $iWidth, $iHeight, $hBrush) _GDIPlus_GraphicsDrawImageRect($hCtx_new, $hBitmap, 0, 0, $iWidth, $iHeight) Local $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap_New) _GDIPlus_BrushDispose($hBrush) _GDIPlus_BitmapDispose($hBitmap_New) _GDIPlus_GraphicsDispose($hCtx_new) Return $hHBitmap EndFunc ;==>_ConvertBitmapToHbitmap Edited July 12, 2016 by Mbee Link to comment Share on other sites More sharing options...
Mbee Posted July 12, 2016 Author Share Posted July 12, 2016 Now that the button images from memory are working correctly in 64-bits, I'm suddenly having a problem with fonts from memory. The following code fragment works fine in 32-bit, but not in 64-bit... Func _SetupFont( $arg_FontBin, ByRef $arg_FontHdl, ByRef $arg_FontFamilyHdl, _ $arg_FontName, $arg_FontSize, $arg_Attrib, $arg_GUIWinHdl=0 ) Local $Lf_FontStruct, $Lf_InstalledFontsHdl $Lf_FontStruct = DllStructCreate( 'byte[' & BinaryLen($arg_FontBin) & ']' ) DllStructSetData( $Lf_FontStruct, 1, $arg_FontBin ) $Lf_InstalledFontsHdl = _WinAPI_AddFontMemResourceEx( DllStructGetPtr($Lf_FontStruct), DllStructGetSize($Lf_FontStruct) ) EndFunc When this is run in 64-bit mode, the return value from _WinAPI_AddFontMemResourceEx() is zero, indicating a failure somewhere. (Note that _GDIPlus_Startup() has already been called prior to this function). Does the FontStruct need to be different in 64-bit mode? What else could I be doing wrong? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now