JScript Posted July 8, 2012 Share Posted July 8, 2012 (edited) Hello to all!Select and display individual images in a horizontal Image Strip is relatively easy, but how to select an image in an vertical Image Strip?What is an Image Strip? Here is the link: http://www.axialis.com/docs/iw/What_is_an_Image_Strip.htmHere is an example to horizontal image strip:And vertical:Sample script for horizontal Image Strip:Horizontal_ImageStrip_Example.zipRegards,João Carlos. Edited November 8, 2012 by JScript http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!) Somewhere Out ThereJames Ingram Download Dropbox - Simplify your life!Your virtual HD wherever you go, anywhere! Link to comment Share on other sites More sharing options...
rover Posted July 8, 2012 Share Posted July 8, 2012 Four years later and you still need this?... Original thread seems to be archived or destroyed by forum software... I don't recall where, but I read that vertical strips are more efficient. The internal image strip in an imagelist is apparently vertical, but there seems to be no api (at least a documented one) to save or load a vertical imagelist. The alternative is to chop up the image strip and reassemble it as a horizontal strip and use that, or save it to a file and use that as a resource or a bitmap stream with the binary code on the forum that people are using as an alternative to compiled resources. However, you will need the read imagelist from stream code api for that. Visual styles (msstyles files) also have these vertical image strips in them. Maybe there is some function in the uxtheme dll to access these. There are many functions listed by Ordinal only in there... A rough example, but it is not coded for transparency or alpha. Probably better ways of doing this, i.e. GDI+ code for creating bitmap, etc. expandcollapse popup#include <GUIConstantsEX.au3> #include <Constants.au3> #include <StaticConstants.au3> #include <GuiListView.au3> #include <GuiImageList.au3> #include <GDIPlus.au3> Opt('MustDeclareVars', 1) Global Const $SS_REALSIZEIMAGE = 2048 Global $iIconWidth = 30 Global $hListview, $hImageList, $iIcons, $cIco, $hIco, $iIcoH, $iIcoW, $iC = 0 _Main() Func _Main() Local Const $STM_SETIMAGE = 0x172 GUICreate("ImageList LoadImage UDF - Load Multi-Image Bitmaps", 500, 400) GUISetBkColor(0xFFFFFF) _GDIPlus_Startup() $hImageList = _GUIImageList_Create(32, 32, 5, 4, 1) Local $hTmp1 = _WinAPI_LoadImage(0, @ScriptDir & "\Buttons.bmp", $IMAGE_BITMAP, 0, 0, _ BitOR($LR_LOADFROMFILE, $LR_CREATEDIBSECTION, $LR_LOADTRANSPARENT)) Local $hBitmap1 = _GDIPlus_BitmapCreateFromHBITMAP($hTmp1) _WinAPI_DeleteObject($hTmp1) Local $hTmp2 = _GUIImageList_ImageStrip_VertToHoriz($hBitmap1) _GUIImageList_AddMasked($hImageList, $hTmp2, 0xFF00FF) _GDIPlus_BitmapDispose($hBitmap1) Local $hBitmap2 = _GDIPlus_BitmapCreateFromHBITMAP($hTmp2) _GDIPlus_ImageSaveToFile($hBitmap2, @ScriptDir & "\ButtonsHoriz.bmp") _WinAPI_DeleteObject($hBitmap2) Local $cPic = GUICtrlCreatePic("", 140, 60, 320, 32) GuiCtrlSetState(-1,$GUI_DISABLE) GUICtrlSendMsg(-1, $STM_SETIMAGE, $IMAGE_BITMAP, $hTmp2) _WinAPI_DeleteObject($hTmp2) _GDIPlus_Shutdown() $hIco = _GUIImageList_GetIcon($hImageList, 0) $iIcoW = _GUIImageList_GetIconWidth($hImageList) $iIcoH = _GUIImageList_GetIconHeight($hImageList) $cIco = GUICtrlCreateIcon("shell32.dll", -1, 140, 24, $iIcoW, $iIcoH, BitOR($SS_CENTERIMAGE, $SS_REALSIZEIMAGE)) _SetIconToCtrl($cIco, $hIco) $hListview = GUICtrlCreateListView("", 2, 2, 125, 394, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT)) _GUICtrlListView_SetExtendedListViewStyle($hListview, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER)) _GUICtrlListView_AddColumn($hListview, "ImageList", 120) _GUICtrlListView_SetImageList($hListview, $hImageList, 1) $iIcons = _GUIImageList_GetImageCount($hImageList) For $i = 0 To $iIcons - 1 _GUICtrlListView_AddItem($hListview, "Icon " & $i + 1, $i) Next GUISetState() AdlibRegister("_Count", 500) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE If $hIco Then _WinAPI_DestroyIcon($hIco) _GUIImageList_Destroy($hImageList) GUIDelete() Exit EndFunc ;==>_Main Func _Count() If $iC = $iIcons Then $iC = 0 $hIco = _GUIImageList_GetIcon($hImageList, $iC) _SetIconToCtrl($cIco, $hIco) $iC += 1 EndFunc ;==>_Count Func _GUIImageList_ImageStrip_VertToHoriz($hImObj, $iARGB = 0) ;rover 2k8 Local $iWidth = _GDIPlus_ImageGetWidth($hImObj) Local $iHeight = _GDIPlus_ImageGetHeight($hImObj) ;TrayTip("Image Dimensions", "W: " & $iWidth & " H: " & $iHeight, 3) Local $iCount = $iHeight / $iWidth ;get count of images Local $hBitmap = _CreateBitmap($iHeight, $iWidth) ;create bitmap with reversed bitmap dimensions Local $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap) Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage) For $i = 0 To $iCount - 1 _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImObj, 0, ($i * $iWidth), $iWidth, $iWidth, ($i * $iWidth), 0, $iWidth, $iWidth) Next Local $hBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage, $iARGB) _WinAPI_DeleteObject($hBitmap) _GDIPlus_ImageDispose($hImage) _GDIPlus_GraphicsDispose($hGraphics) Return $hBMP EndFunc ;==>_GUIImageList_ImageStrip_VertToHoriz Func _CreateBitmap($iWidth, $iHeight) Local $hWnd, $hDC, $hCDC, $hBMP $hWnd = _WinAPI_GetDesktopWindow() $hDC = _WinAPI_GetDC($hWnd) $hCDC = _WinAPI_CreateCompatibleDC($hDC) $hBMP = _WinAPI_CreateCompatibleBitmap($hDC, $iWidth, $iHeight) _WinAPI_ReleaseDC($hWnd, $hDC) _WinAPI_DeleteDC($hCDC) Return $hBMP EndFunc ;==>_CreateBitmap ; modified from Zedna's Resources.au3 Func _SetIconToCtrl($cCtrlID, $hIcon) Local Const $STM_SETICON = 368, $IMAGE_ICON = 1, $SS_ICON = 3, $GWL_STYLE = -16 Local $hWnd = GUICtrlGetHandle($cCtrlID) If $hWnd = 0 Then Return SetError(1, 0, 0) Local $Style = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE) If @error Then Return SetError(2, 0, 0) _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, BitOR($Style, $SS_ICON, $SS_CENTERIMAGE, $SS_REALSIZEIMAGE)) If @error Then Return SetError(3, 0, 0) Local $Ico = _SendMessage($hWnd, $STM_SETICON, $hIcon, $IMAGE_ICON) If @error Then Return SetError(4, 0, 0) If $Ico <> 0 Then Local $Ret = _WinAPI_DestroyIcon($Ico) If $Ret Then Return SetError(0, 0, 2) EndIf Return SetError(0, 0, 1) EndFunc ;==>_SetIconToCtrl I see fascists... Link to comment Share on other sites More sharing options...
UEZ Posted July 8, 2012 Share Posted July 8, 2012 Here another example: expandcollapse popup#include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <ButtonConstants.au3> #include <GDIPlus.au3> #include <Memory.au3> _GDIPlus_Startup() Global Const $IMAGE_BITMAP = 0 Global Const $STM_SETIMAGE = 0x0172 $hGUI = GUICreate("Test", 640, 400) $idLabel = GUICtrlCreateLabel("", 12, 28, 40, 328, $SS_SUNKEN) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetState(-1, $GUI_DISABLE) Global $aButtons[10], $y = 0 Global $hBitmap = Load_BMP_From_Mem( _vButtons()) Global $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", 32, "int", 32, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0) Global $hHBITMAP, $hBmp = $aResult[6] Global $hCtx = _GDIPlus_ImageGetGraphicsContext($hBmp) For $i = 0 To 9 $aButtons[$i] = GUICtrlCreateButton("", 16, 32 + $y, 32, 32, $BS_BITMAP) $hButton = GUICtrlGetHandle($aButtons[$i]) _GDIPlus_GraphicsDrawImageRectRect($hCtx, $hBitmap, 0, $y, 32, 32, 0, 0, 32, 32) $hHBITMAP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp) _WinAPI_DeleteObject(_SendMessage($hButton, $BM_SETIMAGE, $IMAGE_BITMAP, $hHBITMAP)) _WinAPI_DeleteObject($hHBITMAP) $y += 32 Next GUISetState() Do Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $aButtons[0] ExitLoop EndSwitch Until False _GDIPlus_BitmapDispose($hCtx) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_BitmapDispose($hBmp) _GDIPlus_Shutdown() GUIDelete() Exit ;====================================================================================== ; Function Name: Load_BMP_From_Mem ; Description: Loads an image which is saved as a binary string and converts it to a bitmap or hbitmap ; ; Parameters: $bImage: the binary string which contains any valid image which is supported by GDI+ ; Optional: $hHBITMAP: if false a bitmap will be created, if true a hbitmap will be created ; ; Remark: hbitmap format is used generally for GUI internal images, $bitmap is more a GDI+ image format ; Don't forget _GDIPlus_Startup() and _GDIPlus_Shutdown() ; ; Requirement(s): GDIPlus.au3, Memory.au3 and _GDIPlus_BitmapCreateDIBFromBitmap() from WinAPIEx.au3 ; Return Value(s): Success: handle to bitmap (GDI+ bitmap format) or hbitmap (WinAPI bitmap format), ; Error: 0 ; Error codes: 1: $bImage is not a binary string ; 2: unable to create stream on HGlobal ; 3: unable to create bitmap from stream ; ; Author(s): UEZ ; Additional Code: thanks to progandy for the MemGlobalAlloc and tVARIANT lines and ; Yashied for _GDIPlus_BitmapCreateDIBFromBitmap() from WinAPIEx.au3 ; Version: v0.97 Build 2012-04-10 Beta ;======================================================================================= Func Load_BMP_From_Mem($bImage, $hHBITMAP = False) If Not IsBinary($bImage) Then Return SetError(1, 0, 0) Local $aResult Local Const $memBitmap = Binary($bImage) ;load image saved in variable (memory) and convert it to binary Local Const $len = BinaryLen($memBitmap) ;get length of image Local Const $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002) Local Const $pData = _MemGlobalLock($hData) ;translate the handle into a pointer Local $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 $aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0) ;Creates a stream object that uses an HGLOBAL memory handle to store the stream contents If @error Then Return SetError(2, 0, 0) Local Const $hStream = $aResult[3] $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0) ;Creates a Bitmap object based on an IStream COM interface If @error Then Return SetError(3, 0, 0) Local Const $hBitmap = $aResult[2] Local $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr") 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 $tVARIANT = 0 If $hHBITMAP Then Local Const $hHBmp = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap) _GDIPlus_BitmapDispose($hBitmap) Return $hHBmp EndIf Return $hBitmap EndFunc ;==>Load_BMP_From_Mem Func _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap) Local $tBIHDR, $Ret, $tData, $pBits, $hResult = 0 $Ret = DllCall($ghGDIPDll, 'uint', 'GdipGetImageDimension', 'ptr', $hBitmap, 'float*', 0, 'float*', 0) If (@error) Or ($Ret[0]) Then Return 0 $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $Ret[2], $Ret[3], $GDIP_ILMREAD, $GDIP_PXF32ARGB) $pBits = DllStructGetData($tData, 'Scan0') If Not $pBits Then Return 0 $tBIHDR = DllStructCreate('dword;long;long;ushort;ushort;dword;dword;long;long;dword;dword') DllStructSetData($tBIHDR, 1, DllStructGetSize($tBIHDR)) DllStructSetData($tBIHDR, 2, $Ret[2]) DllStructSetData($tBIHDR, 3, $Ret[3]) DllStructSetData($tBIHDR, 4, 1) DllStructSetData($tBIHDR, 5, 32) DllStructSetData($tBIHDR, 6, 0) $hResult = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBIHDR), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'dword', 0) If (Not @error) And ($hResult[0]) Then DllCall('gdi32.dll', 'dword', 'SetBitmapBits', 'ptr', $hResult[0], 'dword', $Ret[2] * $Ret[3] * 4, 'ptr', DllStructGetData($tData, 'Scan0')) $hResult = $hResult[0] Else $hResult = 0 EndIf _GDIPlus_BitmapUnlockBits($hBitmap, $tData) Return $hResult EndFunc ;==>_GDIPlus_BitmapCreateDIBFromBitmap ;Code was generated by: File to Base64 String Code Generator Func _vButtons($bSaveBinary = False) Local $vButtons $vButtons &= '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' $vButtons &= '1+bnIPhbCKaKhUcsx/zbnoaPgubSxREvcs+bzwga6MuVuPcG+LPrN/XCoMcuTe5NykTe1zy/b3hrq00XmT0XkbY5qEa6ey/S+/cgteNtvBcYoZBvyj6btnIVXEACUePP9L+8wUsQ18fzSSvg0uNPEHLSlAm6n/g5/nLPbdj1wI/Q9cADdI3fI9Bnp5+yRldB0y+9LUAup0qlIo/xfBBMsvnpJ1m7fGpA/IgCxvja6ItP02fEIiyEEMq6gPQCwxGA2uxCLmZ1DTS5cX78M8W+frR95KMsRHRhB31PaS5C+CUGqMBMiFI2pZDv2LpZEc7/+NXUtJnzQ/QdcQdd46YtIDGgLUCSi8+9NFfaEYp7t0FgzlmiYoCaxIBKP5lEEii1FKYmhFiB0la7SlwQDELA5VTM769rBoH8OTViDbNvhwQkBMoCNCfUFrC/tHewF+8DyAKqDniXXG+taY4oPc8Zndf19/0uhFJUaFV7yuRCKv28GW16AqsfzfQoVQ1zxjR4QMhVPzStTZRR5AK/pKCyAEc/57GX9q43lyJWGRtytYJfFyGGVC+pCULsCvG3wFh0JASl7W+quFAW0EMwHNWMiolUM0H3z+6kpqxA5KQ9rbont71xUGv5HTVAW4FvIELULTuWhHC5oSbf3rVHtHeFAQ8MvP4yFSWqC3RjamQZLlBhjLFJUduMukUL6D3H0n9h0x+8XTWVWVD8T7+hOCArqMBshEZo3Gr7SXP3VPUOQmh3sL9l4uEE7y+wu0aeuBc9itwdhsc0XE8o9m7DKLUJMdCtUsw7W3QQuhNTk7/VDTPvmdyGv7OnhKYPfFDHgGisBXG7uaPJNRdiziham/C/+dc0zrnpm96mBxwzGy+4CwHOmtZP34Q/bk7z0zE/nB7ZkUX8lhu5bL6P4JRe/MUv4p3hdl4fcDyeL5odxIzmAN5v/Oz5FL75D60+Rx1obTRw5ILa8d7E+wjegVu1tAyB4/xA4O7HYfXHIUA6By9UsgevIeVkAtVIzJ6OlRd9Qp8fMH/8AEqHzOYddAz1QUBbuNXwj6XhilzKKXwkyL0IKsK8mklh2Ve/bp8faLr7X3irnsltiCAaWjAlpBIqnWMh+gpDvM7YU9+GZT+i9QHCl/+Jtc8uPwKEUNcgFDyE8RDCYYmN8W5YqTxOeGGrPSkl7YmYWra9RZFrQu69yXVMYF5j0F4rFgmZhF0gFtDkIqj1sfNg1LTxdpwsuZqFHbD+8BKMNzdpzSNB0X7ytWILCoqc3GMuW4NgEAp8LbgQWDfezr4Apd8+CuMPT6ts8ofCKiv88gEypRBSX01unbVKyOX8AG9O48ZrgGsvQ+Vb19M1eo+swls8ycsumVK6GlUHVoRcUlHIeQvfBGgXhHfAjAk+9vfH4d+9FxjXunT6ahKAt+6TACJ33CXasxB651RHMpGL2YlcDi8QuY5uJ8j0vHEh5wcqa89jcvfzA+5gsxNIc//Od6Dwrf/kNgFkDRaYYIzHhMAWRFuANBMr2GkZ8pFfSXPvKhgJKktITJBbXCygH04lt32nH08f4G1XQaUuQk1tcDuEkGafPZCzCK7nByaNUH+ggTraLRPNqeemEIxKcwgjNYHOD4hgOgZ0QMn5AbGIaM29NIVIAYzmGmqOa3TOyA1+7xJqvydNhBHIayEUQTBUEBe5wlAxwARccMgKXB+MffuFREG+Xwk0QuAvj3BfOmwJTPBmpgg0eQxweUzn1PkBeo+ygcjdLKQ1ZGGoyehK58w8XKDjgA6mkXaUx2J6NyuQlbjJa0G0YwXdg+7lXYgkE0QILjy5LOdxcu1q2wL6JhyoQt4/q4v79KqTDpwfyKoipgqRmgPmUkTGoxqBzpKVjjxGaU0llwalaq2n9bQDJzZSGea95eSW5yQmvFygYWz8E4r7X5ate7GEpKd6LeOHsfgKEAr7NiL23JMQFAoJVxdQIJIbHFYg0GSVdsbJXKzV1deSeZ1+X3A4ac1nRmLHnkGfZcEDjzwu' $vButtons &= '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' $vButtons &= '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' $vButtons &= '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' $vButtons &= 'Zjc7611fktbJuuSCI6ioHCoBqkgrIqWtUCuoRAJCRQIhHkAOURRRLeKlBR5AslNFIlEeeGhEKkElWnjgJoi4SLXVFh4CFpA2CRCDvXHqxPaud9fr3dkM/o9zzs+e20xJrH7W8VnN7O73ne/885/ZM2d2QQ9yi8PpdYwjJW3rJh/ZOwJ/PvYmiI9mB791kJ2rRwMRpdx0DpJgJaV3pxE1QIA/XAaGc18/B9uqT9H8wLXOFDz3vedgcmmSCSFYbcfndtVxwJY/+6ln4UPBZ/TfP7C1z4W7CRqK6XcrXv1b3X5/wWbjrf809fcXHPv5t+H6zHXYTNy781745uc09xcMH9kHd4QimNHHg48+mL428RpMT+/YuL/gsyeP3AGBTGbbTsE79rMx+PEnz99ORB/vsZHZSWzIssOP1QQ6JDvPdzRTtcXkxKUnSqwe/8O4RYR1m31RKxHHtLoByZChWv/NbEVLi5fh7iKj+/mAOeAQpKWnS2i13YGs6kLpQAmLOopmsMbCkpS0sLkY2992EUSub3FG44C+z6ke/+G4JEIlhIaefPz1cSJryi7Efz8hifilXgRuxyOAickYyW01xYAdXAS1nmpqmURuAcWAm8kkTjLYWjWxZCRia3Cqr3OT5AEiNJPbk44cL5QHKBMWLRFPDtjIhTulUcPrp8f582ia7g6SiDUm2gNtLOKxCW5cwBFJctvHZ8YBZm6fBRcAYFrnlikGsmBBDHkBEERckPZVuuNAzQN9xqil9PpQySj0+IPHobSzJIiJXKqz0lSt3QEit46ABep7FKKgkvDnBemNbemVov34ASI7eeEkeIsed0MWmHAlVdZOLoMRFqQARKgijHNEsgPxOSAr7JYsJidk2L+fsGh0gIgzksgsa/2GiGmy2CaCjgY5BuYgHvpBC0WQA1jiUNEloqIl29lB3VBITq6OBXMaEU1JTFPtBsztAhXVZkpM5hhgv19w6MlDOgeoNKlWArZhaWmFhMive2T4Efr9grGnxiAYCPT93tQ5YBNiEkTP9VM+nPnEGfX3C47+4ijM1+dhMzEUDMGpJ0/Btfncu3d/wUuvX4bvPD367t1fcGDvHnX9wOiWMpQuT8Bsa5a6rhl/YNedun6+kCAmrLHe29gLEw9NrHPup/UDo6NlOPb3Y7Av2Nf9wnb3fF+1VQUTqkD7dA24Wb0pLl40bjTg9KdPs0kqtn7gK385DLuD3bCtZxu/dC8uYi90FmyijAJJFAlBt9AhFLF9/e/Vz/9pY37gscnH4NH8o5ycBBAUIaoguxAUgbPqOKuKAlaurEB1okqjoURqISfiiQ9OwAsffsFIXr39Z4MLRIJdIAmxdAGlU4P1ahywCxtVNkckpn5dIOjIbQGJ5EpfFzIFIiUw+xEDMABlKHdfN8QXIAEREvmJB09gMdqMr9dF/hsH38BLOkiMwYetx2sKfJZMPieM7/OzHznbRS6RcmJOzsVxUhSBV1WUqf1UHPkX/0j3j1DAke3UACLn2x/43QPicg4CxfALnHROKNmqBhyJwDd95eFXgAMPXywyOV1BY+Au6B1AFRIh1lhkJ7hqc5Q7DrWc0rIipAY1OiHh/SOLGPQGlcA7NHkIDk8dhjzkgQOjHqjVrHDgFTQB2oZBSF0gHUpJUq7igAmVnco+dKXLAbamFC+x7blnD2tZ3s9jsCnX/hHogCRCEVLeVYbZkVl8nfx9RaJrlq8si1SMDhgTjBrlRG5CYaYgrT3wrcO1C9QCvHLW1VJ0Q5Nm0SdFBLb8/vn7oTxUxjgg+0kYbsO661J+ytYyIicguQ5IfnHoItZIZIyHudU5WyKy2/vy/pdZ0QHJse/PP3xeCIoB5QG2wMCpYzeYRGiJB947wOsuQhSCghKAghCzlMEJzH4iqB6felzse2noRdbiqfoUIIavDHeJSCRAXv/BXCARvOUi9VIMAEY4txtdEM9BV5OKSElnuIoIIHJrjKAL+4P9zPr7/nEfEOJjQD1xIBFoOSO3' $vButtons &= 'gEc/7wrRHVjMoGk6OnevDAIMAgRRYEuz4qyHi0fy/xeuLldDgQUlO4tRQcK4+KQRX3uzpswPsLHAPevCUHsIr/nzlS+0OoqGUnQG48Q2+FjJc+/PYc0WNAQXAzYWsPUDT5z/KFx6+1LXAiVc/URga8RwmZZ2eMXsVtxSpExnAZJDBWBkTV4/8OJByBVywBE0AyDQIgUZ8948vCOgSbMA576sWT/wzK+egQuXLkCQCsCGaEsEMTAuaBgJaP2A6f4CpVhg2m98n0bDcH/B5F8bcOFyC1zXgc1EGEZQXwvF+gHWBV87sxA5YQWi9hJAJwQCPW63ATzPWmvh+W1orUVd6dvv3Q6RW4Dnx7Y5zpFTc1EmakAULqizUFEIOqBIG0i4yx9zgeLXX9L5nbDcCsApff96FK7MADgu9Li+xMOeHCcqocgQRQgBrUYEW0f2QYr1OT0ZbkEaOEgQAYXyYiXvUfd7Hh9BKR5cdXhcszlgd4GUaxxQ4wQbb2lGPPGuezKsvvp2kwgtoGAlB1L4T2oxPSZiLKY+NpCHUtE7gDHASTixQs7h99yyHgUuEQsyqpkDCJ0DYazl/TkXdgxmWa1HCL2FDPQXcuD7viCj2uKAFY7LSAvZDeJ2p6UJLhKKzxsK0uD5keSCwYG4gMtlWoK80gihtpqSSOmNa6srcKvZgVSmB7YH+Y3tTpvX5qOAjl219Vt7iXypFor+9zxXdaLlwL/bi/CevgEmIpfzYXGxBb6P+zz9UQAWYOs56qstTm4/viMPFtssl6yLz4KfdviYQKmYHEABloGkxxetb3V0WtW+Ratr9Tp2BTnltFEYH4zMDlALKaDUfRR4GgiilVsRq9N+WgjD8s4zoRr5omVXry2DBCSh16hvT12gOhDylvIaraeuUAcXbILRgQEvDRZQDFCAWEczfQBa0j8eBYim9O2OGJSyA3TGolovYsH3U4Z875LT7kYX5IIADEAu1QHtkdChpIMItvigAslDoQPhph12+CFurDQgREILUt2HkjLi4ZsIF/qleT+Z3EtF0JvuAwS3HwXFdoElF6ALGIxCxK7tOcjlUhukoSuI+4McFAf7xaE7u3QDK3TA2gUunb3yZMGbRC6sVHBbhr85WrxeACFyP0Ehj+sCUkYuhEqoLVWacHWhhm7oop33eXJyOiekvmm3qDs8Tz61dvEV60Jq64WSDvR4AB1t/yXNA+QAZin1g0ZItZp0aHNi2EdDLoI7QUXahq3ntRUUeFQ3IuEA+2CyuvAWI5bhOD5uN9Z3AhTRt2sUnC+dKEd9fh1W5q+Cn3VwB6vvLohUYGgYmvX0xofTr54qs8+Ha9UZetImgTUyXwTPycPpozto/cAXvvuvaGshB64bJY1gDCLlsbpfxfzNOvzgG7uZzf8FX68WUCBr9jAAAAAASUVORK5CYII=' Local $bString = Binary(_Base64Decode($vButtons)) If $bSaveBinary Then Local $hFile = FileOpen(@ScriptDir & "Buttons.png", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_vButtons Func _Base64Decode($sB64String) Local $struct = DllStructCreate("int") Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "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", $sB64String, "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 Tested on Win7 x64 running it as x86 and Aero enabled. Br, UEZ 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...
JScript Posted July 8, 2012 Author Share Posted July 8, 2012 @rover Four years, it is true, but some things do not change and this is one that nobody could solve elegantly... I had thought of that possibility, but note that to use in file "msstyles" in this way is very slow! I'll keep trying in other ways. Your example works fine, thanks! @UEZ Not quite the way I desire, the image remains upright and I can not use the functions "_GUIImageList * ()". In this case, your example is also valid, thanks! Regards, João Carlos. http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!) Somewhere Out ThereJames Ingram Download Dropbox - Simplify your life!Your virtual HD wherever you go, anywhere! Link to comment Share on other sites More sharing options...
JScript Posted November 8, 2012 Author Share Posted November 8, 2012 The problem was solved in the posts above, but the images are not transparent and had to save in HD ...Now I can continue to an old project of mine that uses vertical image strip.Check out the UDF what I did: This topic is finally solved! Regards,João Carlos. http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!) Somewhere Out ThereJames Ingram Download Dropbox - Simplify your life!Your virtual HD wherever you go, anywhere! 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