Who could provide an example.apz already thank you?
Announcement
Collapse
No announcement yet.
Loading images and image lists with MemoryEx
Collapse
X
-
I tried to get the message through processing the WM_PAINT message. But it seems that I really have to handle the WM_COMMAND message. Thx.
Leave a comment:
-
-
Code:User32Library = Library.Load("user32.dll"); ComboBoxEx = {} ComboBoxEx.GetChildPointer = function(SWnd) local CBEM_GETCOMBOCONTROL = 0x406; local x = User32Library.SendMessageA(SWnd,CBEM_GETCOMBOCONTROL,0,0) return x end; ComboBoxEx.GetEditPointer = function(SWnd) local CBEM_GETEDITCONTROL = 0x407; local x = User32Library.SendMessageA(SWnd,CBEM_GETEDITCONTROL,0,0) return x end; ComboBoxEx.ClearSelection = function(CWnd) local CB_SETCURSEL = 334; local x = User32Library.SendMessageA(CWnd,CB_SETCURSEL,-1,0) return true , "OK" end; ComboBoxEx.GetSelection = function(CWnd) local CB_GETCURSEL = 0x0147; local x = User32Library.SendMessageA(CWnd,CB_GETCURSEL,0,0) return true , x end; ComboBoxEx.GetText = function(hWnd,Inx) local B = ComboBoxEx.GetTextLenght(hWnd,Inx) if B == 0 then return true, "" end local Bu = MemoryEx.Allocate(B + 1) if(Bu)then local CB_GETLBTEXT = 0x0148; local x = User32Library.SendMessageA(hWnd,CB_GETLBTEXT,Inx,Bu) local t = MemoryEx.String(Bu,-1, MEMEX_ASCII) MemoryEx.Free(Bu) return true, t or "" else return false, "Can't create buffer" end end; ComboBoxEx.GetTextLenght = function(hdl,Inx) local CB_GETLBTEXTLEN = 0x0149; return User32Library.SendMessageA(hdl,CB_GETLBTEXTLEN,Inx,0) end; ComboBoxEx.BringToTop = function(SWnd) if tonumber(User32Library.BringWindowToTop(SWnd)) == 0 then return false, "Can't bring ComboBox to top" else return true, "OK" end end; --------------Subclass --MainHandle = returned from cretewindoex --ChildHandle = returned from ComboBoxEx.GetChildPointer local s = Subclass.Create(Application.GetWndHandle(), function(hWnd, uMsg, wParam, lParam) if(uMsg == 0x0111)then--WM_COMMAND if (lParam == MainHandle) then local wmEvent = Bitwise.And(Bitwise.ASR(wParam, 16), 0xFFFF); if (wmEvent == 1) then local x, idx = ComboBoxEx.GetSelection(ChildHandle) local x, y = ComboBoxEx.GetText(MainHandle,idx) Dialog.Message(idx,y) end return Subclass.OldWinProc(hWnd, uMsg, wParam, lParam); end)
Leave a comment:
-
-
@Shrek
You have managed to get and process the CBEN_GETDISPINFO message (-800)? Can't I..
Leave a comment:
-
-
Originally posted by kingzooly View PostShrek is this going to be a plugin as I really interested in this option for a adding to a UI having a icon or image in a listbox like that would be great.
Leave a comment:
-
-
MemoryEx is great but it cant make plugins so the best I can do is share an LH module to load and use or the source so you can port it to AMS Plugin Maker.
Leave a comment:
-
-
Shrek is this going to be a plugin as I really interested in this option for a adding to a UI having a icon or image in a listbox like that would be great.
Leave a comment:
-
-
Whenever you use CreatewindowEx the window is put to the back of the z-order so you just bring it to the top:
Have you managed to get the icon transparency to show properly in CBS_DROPDOWNLIST mode where the icon is displayed on the drop down thing you click?, tried;
Code:[font=Courier New][size=2][color=#0000FF][b]local[/b][/color] hImageList [color=#FF0000]=[/color] ImageList[color=#FF0000].[/color]Create([color=#FF6600]16[/color][color=#FF0000],[/color] [color=#FF6600]16[/color][color=#FF0000],[/color] ILC_COLOR32[color=#FF0000],[/color] [color=#FF6600]3[/color]);[/size][/font]
Leave a comment:
-
-
Whenever you use CreatewindowEx the window is put to the back of the z-order so you just bring it to the top:
Code:User32Library = Library.Load("user32.dll"); ComboBoxEx = {} ComboBoxEx.BringToTop = function(SWnd) if tonumber(User32Library.BringWindowToTop(SWnd)) == 0 then return false, "Can't bring ComboBox to top" else return true, "OK" end end;
Code:Comctl32Library = Library.Load("Comctl32.dll"); ImageList.SetBGColour = function(hdl,col) return Comctl32Library.ImageList_SetBkColor(hdl,col) end;
Leave a comment:
-
-
I also created the object.
But faced with the problem that the object is activated only when I moved several times to the project window. This can be seen in the video. Maybe you know how to fix it?
Leave a comment:
-
-
@slota, cheers mate, its working well and I shall enjoy, for some strange reason, the ComboBoxEx:
Leave a comment:
-
-
I'm too lazy to understand your code.I wrote myself a working version.
Code:[font=Courier New][size=2]ILC_COLOR [color=#FF0000]=[/color] [color=#FF6600]0[/color]; ILC_COLOR4 [color=#FF0000]=[/color] [color=#FF6600]4[/color]; ILC_COLOR8 [color=#FF0000]=[/color] [color=#FF6600]8[/color]; ILC_COLOR16 [color=#FF0000]=[/color] [color=#FF6600]16[/color]; ILC_COLOR24 [color=#FF0000]=[/color] [color=#FF6600]24[/color]; ILC_COLOR32 [color=#FF0000]=[/color] [color=#FF6600]32[/color]; ILC_COLORDDB [color=#FF0000]=[/color] [color=#FF6600]254[/color]; ILC_NONE [color=#FF0000]=[/color] [color=#FF6600]0[/color]; ILC_MASK [color=#FF0000]=[/color] [color=#FF6600]1[/color]; ILC_MIRROR [color=#FF0000]=[/color] [color=#FF6600]2[/color]; ILC_PERITEMMIRROR [color=#FF0000]=[/color] [color=#FF6600]4[/color]; ImageList [color=#FF0000]=[/color] [color=#FF0000]{[/color][color=#FF0000]}[/color]; ImageList[color=#FF0000].[/color]Create [color=#FF0000]=[/color] [color=#0000FF][b]function[/b][/color] (nCX[color=#FF0000],[/color] nCY[color=#FF0000],[/color] nColor[color=#FF0000],[/color] nOptions[color=#FF0000],[/color] nInitial[color=#FF0000],[/color] nGrow) nCX [color=#FF0000]=[/color] nCX [color=#0000FF][b]or[/b][/color] [color=#FF6600]16[/color]; nCY [color=#FF0000]=[/color] nCY [color=#0000FF][b]or[/b][/color] [color=#FF6600]16[/color]; nColor [color=#FF0000]=[/color] nColor [color=#0000FF][b]or[/b][/color] ILC_COLOR24; nOptions [color=#FF0000]=[/color] nOptions [color=#0000FF][b]or[/b][/color] ILC_NONE; nInitial [color=#FF0000]=[/color] nInitial [color=#0000FF][b]or[/b][/color] [color=#FF6600]4[/color]; nGrow [color=#FF0000]=[/color] nGrow [color=#0000FF][b]or[/b][/color] [color=#FF6600]4[/color]; [color=#0000FF][b]local[/b][/color] nFlags [color=#FF0000]=[/color] [color=#FF6600]0[/color]; [color=#0000FF][b]if[/b][/color] Bitwise[color=#FF0000].[/color]And(nOptions[color=#FF0000],[/color] [color=#FF6600]1[/color]) [color=#FF0000]~[/color][color=#FF0000]=[/color] [color=#FF6600]0[/color] [color=#0000FF][b]then[/b][/color] nFlags [color=#FF0000]=[/color] Bitwise[color=#FF0000].[/color]Or(nFlags[color=#FF0000],[/color] [color=#FF6600]1[/color]); [color=#0000FF][b]end[/b][/color] [color=#0000FF][b]if[/b][/color] Bitwise[color=#FF0000].[/color]And(nOptions[color=#FF0000],[/color] [color=#FF6600]2[/color]) [color=#FF0000]~[/color][color=#FF0000]=[/color] [color=#FF6600]0[/color] [color=#0000FF][b]then[/b][/color] nFlags [color=#FF0000]=[/color] Bitwise[color=#FF0000].[/color]Or(nFlags[color=#FF0000],[/color] [color=#FF6600]8192[/color]); [color=#0000FF][b]end[/b][/color] [color=#0000FF][b]if[/b][/color] Bitwise[color=#FF0000].[/color]And(nOptions[color=#FF0000],[/color] [color=#FF6600]4[/color]) [color=#FF0000]~[/color][color=#FF0000]=[/color] [color=#FF6600]0[/color] [color=#0000FF][b]then[/b][/color] nFlags [color=#FF0000]=[/color] Bitwise[color=#FF0000].[/color]Or(nFlags[color=#FF0000],[/color] [color=#FF6600]32768[/color]); [color=#0000FF][b]end[/b][/color] nFlags [color=#FF0000]=[/color] Bitwise[color=#FF0000].[/color]Or(nFlags[color=#FF0000],[/color] nColor); [color=#0000FF][b]return[/b][/color] tonumber(DLL[color=#FF0000].[/color]CallFunction([color=#800080]"comctl32.dll"[/color][color=#FF0000],[/color] [color=#800080]"ImageList_Create"[/color][color=#FF0000],[/color] nCX[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]nCY[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]nFlags[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]nInitial[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]nGrow[color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL)); [color=#0000FF][b]end[/b][/color] ImageList[color=#FF0000].[/color]GetIconSize [color=#FF0000]=[/color] [color=#0000FF][b]function[/b][/color] (hWnd) [color=#0000FF][b]local[/b][/color] POINT [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]DefineStruct[color=#FF0000]{[/color]INT([color=#800080]"X"[/color]); INT([color=#800080]"Y"[/color]);[color=#FF0000]}[/color]; [color=#0000FF][b]local[/b][/color] tPOINT [color=#FF0000]=[/color] POINT[color=#FF0000]:[/color]New(); [color=#0000FF][b]local[/b][/color] pPOINT [color=#FF0000]=[/color] tPOINT[color=#FF0000]:[/color]GetPointer(); DLL[color=#FF0000].[/color]CallFunction([color=#800080]"comctl32.dll"[/color][color=#FF0000],[/color] [color=#800080]"ImageList_GetIconSize"[/color][color=#FF0000],[/color] hWnd [color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]pPOINT[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]pPOINT [color=#FF0000]+[/color] [color=#FF6600]4[/color][color=#FF0000],[/color] DLL_RETURN_TYPE_LONG[color=#FF0000],[/color] DLL_CALL_STDCALL); [color=#0000FF][b]local[/b][/color] tRet [color=#FF0000]=[/color] [color=#FF0000]{[/color]X [color=#FF0000]=[/color] tPOINT[color=#FF0000].[/color]X[color=#FF0000],[/color] Y [color=#FF0000]=[/color] tPOINT[color=#FF0000].[/color]Y[color=#FF0000]}[/color]; tPOINT[color=#FF0000]:[/color]Free(); [color=#0000FF][b]return[/b][/color] tRet; [color=#0000FF][b]end[/b][/color] ImageList[color=#FF0000].[/color]AddBitmap [color=#FF0000]=[/color] [color=#0000FF][b]function[/b][/color] (hWnd[color=#FF0000],[/color] sImage) [color=#0000FF][b]local[/b][/color] tSize [color=#FF0000]=[/color] ImageList[color=#FF0000].[/color]GetIconSize(hWnd); [color=#0000FF][b]local[/b][/color] pBuf [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]Allocate([color=#FF6600]256[/color]); MemoryEx[color=#FF0000].[/color]String(pBuf[color=#FF0000],[/color] [color=#FF0000]-[/color][color=#FF6600]1[/color][color=#FF0000],[/color] MEMEX_ASCII[color=#FF0000],[/color] sImage); [color=#0000FF][b]local[/b][/color] hImage [color=#FF0000]=[/color] DLL[color=#FF0000].[/color]CallFunction([color=#800080]"user32.dll"[/color][color=#FF0000],[/color] [color=#800080]"LoadImageA"[/color][color=#FF0000],[/color] [color=#800080]"0, "[/color][color=#FF0000].[/color][color=#FF0000].[/color]pBuf[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]",0,"[/color][color=#FF0000].[/color][color=#FF0000].[/color]tSize[color=#FF0000].[/color]X[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]tSize[color=#FF0000].[/color]Y[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]",16"[/color][color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL); MemoryEx[color=#FF0000].[/color]Free(pBuf); [color=#0000FF][b]if[/b][/color] (hImage [color=#FF0000]=[/color][color=#FF0000]=[/color] [color=#800080]'0'[/color]) [color=#0000FF][b]then[/b][/color] [color=#0000FF][b]return[/b][/color] [color=#0000FF][b]false[/b][/color]; [color=#0000FF][b]end[/b][/color] [color=#0000FF][b]local[/b][/color] nRet [color=#FF0000]=[/color] tonumber(DLL[color=#FF0000].[/color]CallFunction([color=#800080]"comctl32.dll"[/color][color=#FF0000],[/color] [color=#800080]"ImageList_Add"[/color][color=#FF0000],[/color] hWnd[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]hImage[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]",0"[/color] [color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL)); DLL[color=#FF0000].[/color]CallFunction([color=#800080]"gdi32.dll"[/color][color=#FF0000],[/color] [color=#800080]"DeleteObject"[/color][color=#FF0000],[/color] hImage [color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL); [color=#0000FF][b]return[/b][/color] nRet; [color=#0000FF][b]end[/b][/color] ImageList[color=#FF0000].[/color]AddIcon [color=#FF0000]=[/color] [color=#0000FF][b]function[/b][/color] (hWnd[color=#FF0000],[/color] sFile[color=#FF0000],[/color] nIndex[color=#FF0000],[/color] bLarge) [color=#0000FF][b]if[/b][/color] (bLarge [color=#FF0000]=[/color][color=#FF0000]=[/color] [color=#0000FF][b]nil[/b][/color]) [color=#0000FF][b]then[/b][/color] bLarge [color=#FF0000]=[/color] [color=#0000FF][b]false[/b][/color]; [color=#0000FF][b]end[/b][/color] [color=#0000FF][b]local[/b][/color] pIcon[color=#FF0000],[/color] nRet [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]Allocate([color=#FF6600]4[/color]); [color=#0000FF][b]if[/b][/color] bLarge [color=#0000FF][b]then[/b][/color] nRet [color=#FF0000]=[/color] tonumber(DLL[color=#FF0000].[/color]CallFunction([color=#800080]"shell32.dll"[/color][color=#FF0000],[/color] [color=#800080]"ExtractIconExA"[/color][color=#FF0000],[/color] [color=#800080]"\""[/color][color=#FF0000].[/color][color=#FF0000].[/color]sFile[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]"\", "[/color][color=#FF0000].[/color][color=#FF0000].[/color]nIndex[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]pIcon[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]", 0, 1"[/color][color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL)); [color=#0000FF][b]else[/b][/color] nRet [color=#FF0000]=[/color] tonumber(DLL[color=#FF0000].[/color]CallFunction([color=#800080]"shell32.dll"[/color][color=#FF0000],[/color] [color=#800080]"ExtractIconExA"[/color][color=#FF0000],[/color] [color=#800080]"\""[/color][color=#FF0000].[/color][color=#FF0000].[/color]sFile[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]"\", "[/color][color=#FF0000].[/color][color=#FF0000].[/color]nIndex[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]", 0, "[/color][color=#FF0000].[/color][color=#FF0000].[/color]pIcon[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]", 1"[/color][color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL)); [color=#0000FF][b]end[/b][/color] [color=#0000FF][b]if[/b][/color] (nRet [color=#FF0000]<[/color][color=#FF0000]=[/color] [color=#FF6600]0[/color]) [color=#0000FF][b]then[/b][/color] [color=#0000FF][b]return[/b][/color] [color=#0000FF][b]false[/b][/color]; [color=#0000FF][b]end[/b][/color] [color=#0000FF][b]local[/b][/color] hIcon [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]Integer(pIcon); nRet [color=#FF0000]=[/color] tonumber(DLL[color=#FF0000].[/color]CallFunction([color=#800080]"comctl32.dll"[/color][color=#FF0000],[/color] [color=#800080]"ImageList_ReplaceIcon"[/color][color=#FF0000],[/color] hWnd[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]",-1,"[/color][color=#FF0000].[/color][color=#FF0000].[/color]hIcon[color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL)); DLL[color=#FF0000].[/color]CallFunction([color=#800080]"user32.dll"[/color][color=#FF0000],[/color] [color=#800080]"DestroyIcon"[/color][color=#FF0000],[/color] hIcon[color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL); [color=#0000FF][b]if[/b][/color] (nRet [color=#FF0000]=[/color][color=#FF0000]=[/color] [color=#FF0000]-[/color][color=#FF6600]1[/color]) [color=#0000FF][b]then[/b][/color] [color=#0000FF][b]return[/b][/color] [color=#0000FF][b]false[/b][/color]; [color=#0000FF][b]end[/b][/color] [color=#0000FF][b]return[/b][/color] nRet; [color=#0000FF][b]end[/b][/color] ImageList[color=#FF0000].[/color]Destroy [color=#FF0000]=[/color] [color=#0000FF][b]function[/b][/color] (hWnd) [color=#0000FF][b]return[/b][/color] DLL[color=#FF0000].[/color]CallFunction([color=#800080]"user32.dll"[/color][color=#FF0000],[/color] [color=#800080]"ImageList_Destroy"[/color][color=#FF0000],[/color] hWnd[color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL) [color=#FF0000]~[/color][color=#FF0000]=[/color] [color=#800080]'0'[/color]; [color=#0000FF][b]end[/b][/color] [color=#008000][i]--Test--------------------------------------------------------------------------------[/i][/color] [color=#0000FF][b]local[/b][/color] hImageList[color=#FF0000],[/color] nInd [color=#FF0000]=[/color] ImageList[color=#FF0000].[/color]Create([color=#FF6600]32[/color][color=#FF0000],[/color] [color=#FF6600]32[/color]); [color=#0000FF][b]for[/b][/color] i [color=#FF0000]=[/color] [color=#FF6600]1[/color][color=#FF0000],[/color] [color=#FF6600]3[/color] [color=#0000FF][b]do[/b][/color] nInd [color=#FF0000]=[/color] ImageList[color=#FF0000].[/color]AddIcon(hImageList[color=#FF0000],[/color] _SystemFolder[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]"\\shell32.dll"[/color][color=#FF0000],[/color] [color=#FF6600]10[/color] [color=#FF0000]+[/color] i); Dialog[color=#FF0000].[/color]Message([color=#800080]""[/color][color=#FF0000],[/color] nInd[color=#FF0000],[/color] MB_OK[color=#FF0000],[/color] MB_ICONINFORMATION[color=#FF0000],[/color] MB_DEFBUTTON1); [color=#0000FF][b]end[/b][/color] nInd [color=#FF0000]=[/color] ImageList[color=#FF0000].[/color]AddBitmap(hImageList[color=#FF0000],[/color] [color=#800080]"C:\\32.bmp"[/color]); Dialog[color=#FF0000].[/color]Message([color=#800080]""[/color][color=#FF0000],[/color] nInd[color=#FF0000],[/color] MB_OK[color=#FF0000],[/color] MB_ICONINFORMATION[color=#FF0000],[/color] MB_DEFBUTTON1); ImageList[color=#FF0000].[/color]Destroy(hImageList);[/size][/font]
Leave a comment:
-
-
thanks, it returns 'false' and substituting the LoadImageA call with a known working call using a 32 image list with a 32x32 icon returns -1, trying with bmp or icons seems to make no difference.
Code:ImageList = {} ImageList.CreateImageList = function(s,max) local x = Comctl32Library.ImageList_Create(s,s,0x000000FE,0,max) if x and (type(x) ~= "number") then return false, "Can't create image list" end return true, x end; ImageList.LoadImage = function(sICO) local IMAGE_ICON = 1; local LR_LOADFROMFILE = 0x0010; local hBMP = User32Library.LoadImageA(0,sICO,IMAGE_ICON,0,0,LR_LOADFROMFILE) if (hBMP ~= nil and hBMP > 0) then return true, hBMP else return false, "Can't load image list" end end; ImageList.AddBitmap = function (hWnd, sImage) local x, hImage = ImageList.LoadImage(sImage) if not x then return false; end local nRet = tonumber(DLL.CallFunction("comctl32.dll", "ImageList_Add", hWnd..","..hImage..",0" , DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL)); DLL.CallFunction("gdi32.dll", "DeleteObject", hImage , DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL); return nRet; end ---call local x, ILhdl = ImageList.CreateImageList(32,20) if not x then Dialog.Message("Create List",ILhdl) else local x = ImageList.AddBitmap(ILhdl,_SourceFolder.."\\1.ico") Dialog.Message("Add Bitmap",tostring(x)) end
Leave a comment:
-
Leave a comment: