binarydigit0101 Posted January 10, 2012 Posted January 10, 2012 I would load an image inside a pic, inside a tab, when the form loads. here there are 2 examples: the first works, the second not. where is the problem? is it the menù? BinaryImage.au3 expandcollapse popup#include-once #include<Memory.au3> #include<GDIPlus.au3> ; #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 _GDIPlus_Startup() $s = Binary(FileRead(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\Examples\GUI\Torus.png")) $hMem = _MemGlobalAllocFromBinary($s) $hImage = _GDIPlus_ImageLoadFromHGlobal($hMem) $gui = GUICreate("Just draw the created image", 300, 300) ; GUISetState() $hGRaph = _GDIPlus_GraphicsCreateFromHWND($gui) _GDIPlus_GraphicsDrawImage($hGRaph, $hImage, 5, 5) _GDIPlus_GraphicsDispose($hGRaph) ; Do ; Until GUIGetMsg() = -3 WinSetTitle($gui, "", "Now using _GUICtrlStatic_SetImage") _WinAPI_RedrawWindow($gui) $iLabel = GUICtrlCreateLabel("", 0, 0, 193, 184) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) _GDIPlus_ImageDispose($hImage) _GUICtrlStatic_SetImage($iLabel, $hBitmap) ; Do ; Until GUIGetMsg() = -3 this code works: expandcollapse popup#include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> #include <INet.au3> #include <BinaryImage.au3> #Region ### START Koda GUI section ### Form= $form_principale = GUICreate("Monitor your game server (by P3D's tools)", 350, 360) ; $file = GUICtrlCreateMenu("File") ; $esci = GUICtrlCreateMenuItem("Esci", $file) ; $informazioni = GUICtrlCreateMenu("Informazioni") ; $verifica_aggiornamenti = GUICtrlCreateMenuItem("Verifica aggiornamenti", $informazioni) ; $informazioni_sul_programma = GUICtrlCreateMenuItem("Informazioni sul programma", $informazioni) $tab = GUICtrlCreateTab(15, 104, 320, 235) GUICtrlCreateTabItem("Numero di giocatori") GUICtrlCreateLabel("Grafico che rappresenta il numero dei giocatori durante la giornata di oggi.", 45, 130, 260, 35, $SS_CENTER) $pic_giocatori = GUICtrlCreatePic("", 45, 160, 260, 170) GUICtrlCreateTabItem("Mappe preferite") GUICtrlCreateLabel("Grafico che rappresenta la percentuale con cui ciascuna mappa si presenta sul totale.", 45, 130, 260, 35, $SS_CENTER) $pic_mappe = GUICtrlCreatePic("", 45, 160, 260, 170) GUICtrlCreateTabItem("Posizione in classifica") GUICtrlCreateLabel("Grafico che rappresenta la posizione in classifica attuale del server di gioco.", 45, 130, 260, 35, $SS_CENTER) $pic_classifica = GUICtrlCreatePic("", 45, 160, 260, 170) GUISetState(@SW_SHOW) ; acquisizione dei grafici; $link = InetRead("http://magmaliveteatro.files.wordpress.com/2007/12/prova-a-chiedermi-un-favore.jpg") _SetImageBinaryToCtrl($pic_giocatori, $link) $link = InetRead("http://magmaliveteatro.files.wordpress.com/2007/12/prova-a-chiedermi-un-favore.jpg") _SetImageBinaryToCtrl($pic_mappe, $link) $link = InetRead("http://magmaliveteatro.files.wordpress.com/2007/12/prova-a-chiedermi-un-favore.jpg") _SetImageBinaryToCtrl($pic_classifica, $link) ; fine dell'acquisizione dei grafici; ; GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd ;Authors: Prog@ndy, based on code by Zedna Func _SetImageBinaryToCtrl($CtrlId, ByRef $Binary) Local $picdata = Binary($Binary) ; Fetch the Data Local $piclength = BinaryLen($picdata) ; Get Length Local $picstruct = DllStructCreate("byte[" & $piclength & "]") DllStructSetData($picstruct,1,$picdata) Local $picmemory = DllStructGetPtr($picstruct) _SetMemoryImageToCtrl($CtrlId, $picmemory, $piclength) DllStructSetData($picstruct,1,0) $picstruct = "" EndFunc ; Authors: Zedna, based on code by Prog@ndy Func _SetMemoryImageToCtrl($CtrlId, $Pointer, $nSize) Local $hData, $pData, $pStream, $pBitmap, $hBitmap ; use GDI+ for converting to bitmap first $hData = _MemGlobalAlloc($nSize,2) $pData = _MemGlobalLock($hData) _MemMoveMemory($Pointer,$pData,$nSize) _MemGlobalUnlock($hData) $pStream = DllCall( "ole32.dll","int","CreateStreamOnHGlobal", "int",$hData, "long",1, "Int*",0) $pStream = $pStream[3] _GDIPlus_Startup() $pBitmap = DllCall($ghGDIPDll,"int","GdipCreateBitmapFromStream", "ptr",$pStream, "int*",0) $pBitmap = $pBitmap[2] $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap) _SetBitmapToCtrl($CtrlId, $hBitmap) If @error Then SetError(3, 0, 0) _GDIPlus_BitmapDispose($pBitmap) _GDIPlus_Shutdown() _WinAPI_DeleteObject($pStream) _MemGlobalFree($hData) EndFunc ; internal helper function ; Out of resources.au3 :) Func _SetBitmapToCtrl($CtrlId, $hBitmap) Local Const $STM_SETIMAGE = 0x0172 Local Const $IMAGE_BITMAP = 0 Local Const $SS_BITMAP = 0xE Local Const $GWL_STYLE = -16 Local $hWnd = GUICtrlGetHandle($CtrlId) If $hWnd = 0 Then Return SetError(1, 0, 0) ; set SS_BITMAP style to control Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE) If @error Then Return SetError(2, 0, 0) DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP)) If @error Then Return SetError(3, 0, 0) Local $oldBmp = DllCall("user32.dll", "hwnd", "SendMessage", "hwnd", $hWnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap) If @error Then Return SetError(4, 0, 0) If $oldBmp[0] <> 0 Then _WinAPI_DeleteObject($oldBmp[0]) Return 1 EndFunc this code doesn't work: expandcollapse popup#include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> #include <INet.au3> #include <BinaryImage.au3> #Region ### START Koda GUI section ### Form= $form_principale = GUICreate("Monitor your game server (by P3D's tools)", 350, 360) $file = GUICtrlCreateMenu("File") $esci = GUICtrlCreateMenuItem("Esci", $file) $informazioni = GUICtrlCreateMenu("Informazioni") $verifica_aggiornamenti = GUICtrlCreateMenuItem("Verifica aggiornamenti", $informazioni) $informazioni_sul_programma = GUICtrlCreateMenuItem("Informazioni sul programma", $informazioni) $tab = GUICtrlCreateTab(15, 104, 320, 235) GUICtrlCreateTabItem("Numero di giocatori") GUICtrlCreateLabel("Grafico che rappresenta il numero dei giocatori durante la giornata di oggi.", 45, 130, 260, 35, $SS_CENTER) $pic_giocatori = GUICtrlCreatePic("", 45, 160, 260, 170) GUICtrlCreateTabItem("Mappe preferite") GUICtrlCreateLabel("Grafico che rappresenta la percentuale con cui ciascuna mappa si presenta sul totale.", 45, 130, 260, 35, $SS_CENTER) $pic_mappe = GUICtrlCreatePic("", 45, 160, 260, 170) GUICtrlCreateTabItem("Posizione in classifica") GUICtrlCreateLabel("Grafico che rappresenta la posizione in classifica attuale del server di gioco.", 45, 130, 260, 35, $SS_CENTER) $pic_classifica = GUICtrlCreatePic("", 45, 160, 260, 170) GUISetState(@SW_SHOW) ; acquisizione dei grafici; $link = InetRead("http://magmaliveteatro.files.wordpress.com/2007/12/prova-a-chiedermi-un-favore.jpg") _SetImageBinaryToCtrl($pic_giocatori, $link) $link = InetRead("http://magmaliveteatro.files.wordpress.com/2007/12/prova-a-chiedermi-un-favore.jpg") _SetImageBinaryToCtrl($pic_mappe, $link) $link = InetRead("http://magmaliveteatro.files.wordpress.com/2007/12/prova-a-chiedermi-un-favore.jpg") _SetImageBinaryToCtrl($pic_classifica, $link) ; fine dell'acquisizione dei grafici; ; GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd ;Authors: Prog@ndy, based on code by Zedna Func _SetImageBinaryToCtrl($CtrlId, ByRef $Binary) Local $picdata = Binary($Binary) ; Fetch the Data Local $piclength = BinaryLen($picdata) ; Get Length Local $picstruct = DllStructCreate("byte[" & $piclength & "]") DllStructSetData($picstruct,1,$picdata) Local $picmemory = DllStructGetPtr($picstruct) _SetMemoryImageToCtrl($CtrlId, $picmemory, $piclength) DllStructSetData($picstruct,1,0) $picstruct = "" EndFunc ; Authors: Zedna, based on code by Prog@ndy Func _SetMemoryImageToCtrl($CtrlId, $Pointer, $nSize) Local $hData, $pData, $pStream, $pBitmap, $hBitmap ; use GDI+ for converting to bitmap first $hData = _MemGlobalAlloc($nSize,2) $pData = _MemGlobalLock($hData) _MemMoveMemory($Pointer,$pData,$nSize) _MemGlobalUnlock($hData) $pStream = DllCall( "ole32.dll","int","CreateStreamOnHGlobal", "int",$hData, "long",1, "Int*",0) $pStream = $pStream[3] _GDIPlus_Startup() $pBitmap = DllCall($ghGDIPDll,"int","GdipCreateBitmapFromStream", "ptr",$pStream, "int*",0) $pBitmap = $pBitmap[2] $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap) _SetBitmapToCtrl($CtrlId, $hBitmap) If @error Then SetError(3, 0, 0) _GDIPlus_BitmapDispose($pBitmap) _GDIPlus_Shutdown() _WinAPI_DeleteObject($pStream) _MemGlobalFree($hData) EndFunc ; internal helper function ; Out of resources.au3 :) Func _SetBitmapToCtrl($CtrlId, $hBitmap) Local Const $STM_SETIMAGE = 0x0172 Local Const $IMAGE_BITMAP = 0 Local Const $SS_BITMAP = 0xE Local Const $GWL_STYLE = -16 Local $hWnd = GUICtrlGetHandle($CtrlId) If $hWnd = 0 Then Return SetError(1, 0, 0) ; set SS_BITMAP style to control Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE) If @error Then Return SetError(2, 0, 0) DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP)) If @error Then Return SetError(3, 0, 0) Local $oldBmp = DllCall("user32.dll", "hwnd", "SendMessage", "hwnd", $hWnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap) If @error Then Return SetError(4, 0, 0) If $oldBmp[0] <> 0 Then _WinAPI_DeleteObject($oldBmp[0]) Return 1 EndFunc ehi ehi ehi, what is your name?
LarsJ Posted January 11, 2012 Posted January 11, 2012 From the help file: Don't forget to close your tabitem creation with GUICtrlCreateTabItem(""). Just add this statement before GUISetState(). Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions
binarydigit0101 Posted January 11, 2012 Author Posted January 11, 2012 OKay, you are right! thank you. ehi ehi ehi, what is your name?
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