1. RE: COMING REAL SOON !
- Posted by sephiroth _ <euman2376 at yahoo.com> Jul 20, 2001
- 374 views
you know, i was pretty sure one of you would say i was pulling an MTS when i mentioned my new virtual machine. <shameless plug> btw, it's almost done. i just need some more instructions, have to fix up the assembler, and figure out a way to add protected memory to the emulator(like x86 protected mode, except all references are already 32-bit ) </shameless plug> cense at mail.ru wrote: > > I think too many people remember MTS too well on this list, Bernie.
2. RE: COMING REAL SOON !
- Posted by Bernie Ryan <xotron at localnet.com> Jul 21, 2001
- 387 views
euman at bellsouth.net wrote: > Im almost finished with the same ("similar") thing. > > elsif iMsg = WM_NOTIFY then > id = peek4s(lParam + NMHDR_hwndFrom) > if id = ListView then > iMsg = peek4s(lParam + NMHDR_code) > if iMsg = LVN_COLUMNCLICK then -- ListView "could run a sort routine > here" > elsif iMsg = NM_CLICK then -- ListView Item Clicked > junk = c_func(SendMessage,{ListView1,LVM_GETNEXTITEM,-1, > LVNI_FOCUSED}) > poke4(lvitem + lvitem_iItem,junk) > poke4(lvitem + lvitem_iSubItem,0) > poke4(lvitem + lvitem_mask,LVIF_TEXT) > txtbuff = allocate(256) > poke4(lvitem + lvitem_pszText,txtbuff) > poke4(lvitem + lvitem_cchTextMax,256) > cmd = c_func(SendMessage,{ListView1, LVM_GETITEM, 0, > lvitem}) > lvtxt = peek_string(txtbuff) > free(txtbuff) > end if > elsif id = TreeView then > iMsg = peek4s(lParam + NMHDR_code) > if iMsg = TVN_SELCHANGED then --NM_CLICK then -- TreeView > count = c_func(SendMessage,{TreeView1, TVM_GETCOUNT, 0, 0}) > item = c_func(SendMessage,{TreeView1,TVM_GETNEXTITEM, 0, > TVGN_ROOT}) > poke4(tvitem + tvitem_hItem,item) > poke4(tvitem + tvitem_mask,TVIF_TEXT) > poke4(tvitem + tvitem_stateMask, TVIS_SELECTED) > txtbuff = allocate(256) > poke4(tvitem + tvitem_pszText,txtbuff) > poke4(tvitem + tvitem_cchTextMax,256) > ok = c_func(SendMessage,{TreeView1, TVM_GETITEM, 0, > tvitem}) > for i = 1 to count do > cmd = peek4s(tvitem + tvitem_state ) > if and_bits(cmd, TVIS_SELECTED) then > exit > end if > item = c_func(SendMessage,{TreeView1, TVM_GETNEXTITEM, > TVGN_NEXTVISIBLE, item}) > poke4( tvitem + tvitem_hItem, item) > ok = c_func(SendMessage,{TreeView1, TVM_GETITEM, 0, > tvitem}) > end for > Here is the same code using the w32engin.ew. -- type LPITEM(atom d) return pointer(d) end type -- -- declare pointer to a LPITEM structure LPITEM lvitem -- Second if I find no built-in description for LPITEM -- structure in the library -- I can add the structure discription to the library through -- the piston.ew file Or I can create it immediately -- just for this one program like this. -- lvitem = struc( "uint : mask : 1 "& "int : iItem : 1 "& "int : iSubItem : 1 "& "uint : state : 1 "& "uint : stateMask : 1 "& "pointer : pszText : 1 "& "int : cchTextMax : 1 "& "int : iImage : 1 "& "dword : lParam : 1 "& "int : iIndent : 1 ") -- declare pointer to a NMHDR structure LPNMHDR lpnm -- catch all variable RESULT void -- create text buffer LPTSTR txtbuf txtbuff = string(256) elsif case = WM_NOTIFY then -- for clarity lpNM = lParam -- associate the lParam with NMHDR that Window's places in memory AssociatePtr(lpNM,"NMHDR") case = grab(lpNM,"hwndFrom") if case = ListView then case = grab(lpNM,"code") if case = LVN_COLUMNCLICK then ---- > ListView "could run a sort routine here" elsif case = NM_CLICK then index = SendMessageA({ListView1,LVM_GETNEXTITEM, -1,LVNI_FOCUSED}) put(lvitem,"iItem", index) put(lvitem,"iSubItem", 0) put(lvitem,"mask", LVIF_TEXT ) put(lvitem,"pszText", txtbuff ) put(lvitem,"cchTextMax", sizeof(txtbuff) ) void = SendMessageA({ListView1,LVM_GETITEM,0,lvitem}) -- At this point you could use any of the -- "C" string functions in the library -- to manipulte the text in the buffer -- or you can convert to a Euphoria sequence lvtxt = str2seg(txtbuff) free_mem(txtbuff) elsif case = TreeView then case = grab(lpNM,"code") if case = TVN_SELCHANGED then count = SendMessageA({TreeView1,TVM_GETCOUNT,0,0}) item = SendMessage(TreeView1,TVM_GETNEXTITEM,0,TVGN_ROOT}) put(tvitem,"hItem",item) put(tvitem,"mask",TVIF_TEXT) put(tvitem,"stateMask", TVIS_SELECTED) put(tvitem,"pszText",txtbuff) put(tvitem,"cchTextMax,sizeof(txtbuff)) ok = SendMessageA({TreeView1,TVM_GETITEM,0,tvitem}) for i = 1 to count do cmd = grab(tvitem,"state") if and_bits(cmd,TVIS_SELECTED) then exit end if item = SendMessage({TreeView1,TVM_GETNEXTITEM, TVGN_NEXTVISIBLE,item}) put(tvitem,"hItem",item) void = SendMessageA({TreeView1,TVM_GETITEM,0,tvitem}) end for -- You can use a library "C" string function -- while its still in the buffer txtlen = strlen(txtbuff) -- convert it 2 a sequence lvtxt = str2seq(txtbuff) Bernie
3. RE: COMING REAL SOON !
- Posted by Bernie Ryan <xotron at localnet.com> Jul 21, 2001
- 355 views
Bernie Ryan wrote: > -- Second if I find no built-in description for LPITEM > -- structure in the library > -- I can add the structure discription to the library through > -- the piston.ew file Or I can create it immediately > -- just for this one program like this. > -- > lvitem = struc( > "uint : mask : 1 "& > "int : iItem : 1 "& > "int : iSubItem : 1 "& > "uint : state : 1 "& > "uint : stateMask : 1 "& > "pointer : pszText : 1 "& > "int : cchTextMax : 1 "& > "int : iImage : 1 "& > "dword : lParam : 1 "& > "int : iIndent : 1 ") CORRECTION THIS CODE SHOULD HAVE READ -- Second I find no built-in description for LVITEM -- structure in the library -- I can add this permanetly to the library through -- the piston.ew file Or I can create it immediately -- just for this one program like this. -- lvitem = struc( "mask :uint : 1 "& "iItem :int : 1 "& "iSubItem :int : 1 "& "state :uint : 1 "& "stateMask :uint : 1 "& "pszText :pointer : 1 "& "cchTextMax :int : 1 "& "iImage :int : 1 "& "lParam :dword : 1 "& "iIndent :int : 1 ") Bernie
4. RE: COMING REAL SOON !
- Posted by Bernie Ryan <xotron at localnet.com> Jul 21, 2001
- 377 views
euman at bellsouth.net wrote: > cosider this listview.ew file I still think your missing the point All the following constants are already predefine in w32engin.ew ------------------------------------ FROM HERE > > global constant > LVS_REPORT = 1, > LVS_SHOWSELALWAYS = 8, > LVIF_TEXT = #0001, > LVIF_PARAM = #0004, > > LVIS_SELECTED = #0002, > LVNI_FOCUSED = 1, > > LVCF_FMT = 1, > LVCF_WIDTH = 2, > LVCF_TEXT = 4, > LVCF_SUBITEM = 8, > LVCF_ORDER = 20, > LVCFMT_LEFT = 0, > LVM_INSERTCOLUMN = 4123, > LVS_SHAREIMAGELISTS = 40, > LVM_SETITEM = 4102, > LVM_INSERTITEM = 4103, > LVM_GETNEXTITEM = 4108, > > LVM_SETBKCOLOR = 4097, > LVM_SETTEXTBKCOLOR = 4134, > LVM_SETTEXTCOLOR = 4132, > LVM_SETEXTENDEDLISTVIEWSTYLE = 4150, > LVS_EX_GRIDLINES = 1, > LVS_EX_TRACKSELECT = 8, > LVS_EX_HEADERDRAGDROP = 10, > LVS_EX_FULLROWSELECT = 20, > LVS_EX_ONECLICKACTIVATE = 40 > ----------------------------------- TO HERE > constant > lvcol_mask = 0, ------------------------- THESE CONSTANTS ARE NOT > lvcol_fmt = 4, NEEDED in w32engin.ew > lvcol_cx = 8, > lvcol_pszText = 12, > lvcol_cchTextMax = 16, > lvcol_iSubItem = 20, > lvcol_iOrder = 24, > sizeof_lvcol = 28 > > global constant > lvitem_mask = 0, > lvitem_iItem = 4, > lvitem_iSubItem = 8, > lvitem_state = 12, > lvitem_stateMask = 16, > lvitem_pszText = 20, > lvitem_cchTextMax = 24, > lvitem_iImage = 28, > lvitem_lParam = 32, > lvitem_iIdent = 36, > sizeof_lvitem = 40 > --------------------------------- TO HERE --------------------------------- THESE ARE NOT NEED > global constant > LVN_COLUMNCLICK = -108, > NM_CLICK = -2, > LVM_GETITEM = 4101, > LVM_GETITEMSTATE = 4140, > LVM_GETSELECTEDCOUNT = 4146 > -- This creates a LVITEM structure lvitem = struc( "mask :uint : 1 "& "iItem :int : 1 "& "iSubItem :int : 1 "& "state :uint : 1 "& "stateMask :uint : 1 "& "pszText :pointer : 1 "& "cchTextMax :int : 1 "& "iImage :int : 1 "& "lParam :dword : 1 "& "iIndent :int : 1 ") You will NOTICE that this is along text string ( SEQUENCE ). The function struc() will automatically read this text string ( SEQUENCE ) and build a structure in memory and automatically calculate all the offsets by the sizes that used in your definition and intialize it to all zeros. The pointer returned allows you to manipulate the structure by using JUST THE NAMES that you used in your definition. -- Insert 12345 in "lParam" -- NOTICE A NAME -- in the LVITEM structure pointed to by lvitem -- AND WILL automatically check that your using a DWORD put(lvitem,"lParam",12345) -- return the "stateMask" LVITEM structure pointed to by lvitem grab(lvitem,"stateMask") -- This would print size in bytes of the structure ? sizeof(lvitem) -- If the structure is already PREDEFINED in the library -- You can do declare it like this. lvitem = struc("LVITEM") -- Or you can also declare and initialize it -- Create a RECT structure and initialize at the same time -- to some values rect = struc({"RECT",{0,0,200,300}}) -- clone a structure another_rect = dups(rect) -- Print the size of a PREDEFINED structure by name ? sizeof("RECT") -- or use the rect pointer ? sizeof(rect) ALSO it can use ARRAYS of STRUCTURES etc ............... NO NEED TO CALCULATE OFFSETS AND THE struc() function can do this with ANY structure that you describe to the library. This is only some of the structure features in w32engin.ew. Bernie
5. RE: COMING REAL SOON !
- Posted by Bernie Ryan <xotron at localnet.com> Jul 21, 2001
- 383 views
euman at bellsouth.net wrote: > poke4( tvstruct + TVINSERTSTRUCTITEM_iImage,0) > poke4( tvstruct + TVINSERTSTRUCTITEM_iSelectedImage,1) > > there is no difference in the two languages as for functioning code > (sorta) > > Are you going to take this into consideration, there is a catch in > notifying > the control owner and this is where the second structure come into play. > > if iMsg = TVN_SELCHANGED then --NM_CLICK then -- TreeView > > count = c_func(SendMessage,{id, TVM_GETCOUNT, 0, 0}) > item = c_func(SendMessage,{id,TVM_GETNEXTITEM, 0, > TVGN_ROOT}) > poke4(tvitem + tvitem_hItem,item) > > poke4(tvitem + tvitem_mask,TVIF_TEXT) > poke4(tvitem + tvitem_stateMask, TVIS_SELECTED) > txtbuff = allocate(256) > poke4(tvitem + tvitem_pszText,txtbuff) > poke4(tvitem + tvitem_cchTextMax,256) > > note that the structure used here for the treeview notification is not > the same > as the first > used to create the treeview, it's the second because of its 8 bytes > offset. A > question > I recently asked the list about and its pretty straight forward. How > will your > engine account > for this? Will it be faster than what I already have? I think your talking about the UNION in the TVINSERTSTRUCT structure. I would do this: sequence def def = "hParent: pointer: 1 "& "hInsertAfter: pointer: 1 " if WIN32_IE >= #400 then -- union DUMMYUNIONNAME def &= "itemex : pointer: 1 "& def &= "item : pointer: 1 " else -- single pointer def &= "item : pointer: 1 " end if -- Create the structure WIN32_IE LP_TVINSERTSTRUCT = struc(def) Bernie