1. TreeView events

I have a treeview that i need to capture the expanding of a treeview 
child.  I have it set up to capture the expanding, but I don't know how 
I can figure out which of the treeview items caused the expanding.  
'hitTestTV' does not work if the plus box is clicked next to the item

<code>
procedure myNotify(atom iMsg, atom wParam, atom lParam)
    atom lNewMsg, tvId, VOID
    integer id
    sequence dirData, currDir
    -- Only look at NOTIFY messages
    if iMsg = WM_NOTIFY then
        -- Get which notify message it is.
        lNewMsg = fetch( lParam, NMHDR_code )
        -- Get which control sent it.
        id = getId( fetch(lParam, NMHDR_hwndFrom ) )
        --use the ID in any way
    end if
end procedure
</code>

new topic     » topic index » view message » categorize

2. Re: TreeView events

Hello Tyler,

Here is a snippet from one of my projects! 

iMsg = peek4s(lParam + NMHDR_code)

      if iMsg = TVN_ITEMEXPANDING then    
                        
          hItem = peek4u(lParam + NMTVHDR_itemNew)
                 
                if peek4s(lParam + NMTVHDR_action) = TVE_EXPAND then  


With the (above), if you get to this point then your TreeView Item is expanding.

Good luck on your Treeview journey, it took me almost a month to get a directory
listing treeview similar to (BrowseforFolders)  written without shell commands
that is compatible with Win 95,98,2k,NT and XP. I dont release stuff like this
cause
in testing the waters with the user-contrib page I dont fair well with
smiley-faces.

I'll help if you have any further question though.

Hint for you, keep an eye on the Comctl32.dll version tables in the MS-SDK.
Most of the functionalilty you'll require will have to be written for version
4.71+

Euman
euman at bellsouth.net


From: "Tyler Southwick" <wick900 at operamail.com>

> I have a treeview that i need to capture the expanding of a treeview 
> child.  I have it set up to capture the expanding, but I don't know how 
> I can figure out which of the treeview items caused the expanding.  
> 'hitTestTV' does not work if the plus box is clicked next to the item
> 
> <code>
> procedure myNotify(atom iMsg, atom wParam, atom lParam)
>     atom lNewMsg, tvId, VOID
>     integer id
>     sequence dirData, currDir
>     -- Only look at NOTIFY messages
>     if iMsg = WM_NOTIFY then
>         -- Get which notify message it is.
>         lNewMsg = fetch( lParam, NMHDR_code )
>         -- Get which control sent it.
>         id = getId( fetch(lParam, NMHDR_hwndFrom ) )
>         --use the ID in any way
>     end if
> end procedure
> </code>
> 
> 
> 
>

new topic     » goto parent     » topic index » view message » categorize

3. Re: TreeView events

Hello again Tyler,

I thought I would give you alittle more to play with! 

Here it is, Good luck!

global atom txtbuff

global function filltvitem(atom Item, atom mask, atom state)
   poke4(tvitem + tvitem_hItem,Item)              
   poke4(tvitem + tvitem_mask,mask)
   poke4(tvitem + tvitem_stateMask, state)
   txtbuff = myalloc(256) 
   poke4(tvitem + tvitem_pszText,txtbuff) 
   poke4(tvitem + tvitem_cchTextMax,256) 
   return txtbuff
end function

function WndProc(atom hwnd, atom iMsg, atom wParam, atom lParam)

    elsif iMsg = WM_NOTIFY then

          id = peek4s(lParam + NMHDR_hwndFrom)

          if id = TreeView then               

              iMsg = peek4s(lParam + NMHDR_code)

              if iMsg = TVN_ITEMEXPANDING then    
                        
                 hItem = peek4u(lParam + NMTVHDR_itemNew)
                 
                     if peek4s(lParam + NMTVHDR_action) = TVE_EXPAND then  
                    
                        itxtbuff = filltvitem(hItem, TVIF_TEXT, 0)   
         
                        item = SendMessage(id, TVM_GETITEM, 0, tvitem) 



BTW, I do not use Win32lib 'cos it's waayyy too slow for things like this.
You really need to have an in-lined method because when a treeview is
visible, your program generates WM_NOTIFY messages very often.

Euman
euman at bellsouth.net

new topic     » goto parent     » topic index » view message » categorize

4. Re: TreeView events

Hello all,

Most of what I write below is intended to spark-a-flame in a few on the list.
Win32lib isnt going anywhere at the moment so I thought I would help out.
Not with the coding though...

 From: "Matthew Lewis" <matthewwalkerlewis at YAHOO.COM>

> >From MSDN, when you get a WM_NOTIFY from a treeview, you've actually got an
> NMTREEVIEW structure, rather than a NMHDR structure.  

I know Matt was trying to be political about how you setup structures but if you
think far enough in advance and dont want any wasted space or memory
other controls can take advantage of the same or similar structures 
*WITHOUT ANY problems.

look at the below, I reuse these for listview and treeview
   *NMHDR_hwndFrom
   *NMHDR_code

   elsif iMsg = WM_NOTIFY then

          id = peek4s(lParam + NMHDR_hwndFrom)
                    
          if id = ListView1 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 = SendMessage(id,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 = SendMessage(id, LVM_GETITEM, 0, lvitem)               
                   text = peek_zstring(txtbuff)
                   
              end if
                   
          elsif id = TreeView1 then               

              iMsg = peek4s(lParam + NMHDR_code)

              if iMsg = TVN_ITEMEXPANDING then    
                        
                 hItem = peek4u(lParam + NMTVHDR_itemNew)
                 
                     if peek4s(lParam + NMTVHDR_action) = TVE_EXPAND then  
                     
                        itxtbuff = filltvitem(hItem, TVIF_TEXT, 0)            
                        item = SendMessage(id, TVM_GETITEM, 0, tvitem) 


> 
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/pla
> tform/CommCtls/TreeView/structures/NMTREEVIEW.asp
> 
> typedef struct tagNMTREEVIEW {
>     NMHDR hdr; 
>     UINT action;           
>     TVITEM itemOld; 
>     TVITEM itemNew; 
>     POINT ptDrag; 
> } NMTREEVIEW, FAR *LPNMTREEVIEW
> 
> You should be able to get the child id from itemOld

Should?  are you sure Matt?

> procedure myNotify(atom iMsg, atom wParam, atom lParam)
>     atom lNewMsg, tvId, VOID
>          , itemOld, childId  -- <== ADD THIS ****************************
>     integer id
>     sequence dirData, currDir
>     -- Only look at NOTIFY messages
>     if iMsg = WM_NOTIFY then
>         -- Get which notify message it is.
>         lNewMsg = fetch( lParam, NMHDR_code )
>         -- Get which control sent it.
>         id = getId( fetch(lParam, NMHDR_hwndFrom ) )
>         --use the ID in any way
> 
> -- ***************** HERE'S WHAT YOU NEED TO DO: ************************
>         if lNewMsg = TVN_ITEMEXPANDING then
> 
>             -- get the pointer to the tvitem
>             -- need to remember to include NMHDR in offset
>             itemOld = peek4u( lParam + 16 )
>       
>             -- Get the win32lib item id
>             childId = fetch( itemOld, TVITEM_lParam )
> 
>             -- Do your stuff....
>         end if
> -- ***************** END *************************************************

You MUST fill in the _itemNew so you'll know what item is expanding if you want
to track
the item later. There again, thinking far enough in advance of yourself..

global function filltvitem(atom Item, atom mask, atom state)
   poke4(tvitem + tvitem_hItem,Item)              
   poke4(tvitem + tvitem_mask,mask)
   poke4(tvitem + tvitem_stateMask, state)
   txtbuff = allocate(256) 
   poke4(tvitem + tvitem_pszText,txtbuff) 
   poke4(tvitem + tvitem_cchTextMax,256) 
   return txtbuff
end function

itxtbuff = filltvitem(hItem, TVIF_TEXT, 0)    
item = SendMessage(id, TVM_GETITEM, 0, tvitem) 

> 
>     end if
> end procedure
> > </code>
> 
> Now that you're starting to interface directly with windows (ie, looking at
> raw structures, unfiltered by win32lib), please remember to be patient
> (unless you're *very* fluent already with C structures).

Better off just learning to write your own code for Windows API 
because you *will outgrow win32lib eventually or need a feature thats missing.
If you know how to write API from the get-go, you want be at a loss when
the time comes. Alot of people think that Win32lib will allow them to write
some major apps in no time at all but this is huge misconception just look
at Judiths IDE. How long has it taken to get to this point? Could have written
the same thing without Win32lib alot faster and used less people to do it.

>  In my experience,
> if you find a bug that you can't track down, you're probably 

Probably? you dont sound sure or, is it because it's Win32lib?

> misusing a
> structure (declared wrong, improper offset, etc).
> 
> Win32Lib will probably be fast enough 

Matt doesnt sound so sure of himself, does he?

> for almost anything you want to do.

Note: almost! My opinion I will keep to myself.

> The one known area where it is lacking is in loading large amounts of data
> at once to a list/treeview. 

Yeah, didnt you write that part Matt?

> There are some on the list who have work
> arounds for that, 

Sure do!

> and something like these methods should be a part of the
> lib eventually.  Once Derek gets his priorities straight and gets back to
> his true calling (coding win32lib, of course!), everything will be better.
> ;)
> 
> Matt Lewis
 
Euman

new topic     » goto parent     » topic index » view message » categorize

5. Re: TreeView events

On Wednesday 12 December 2001 02:28 pm, euman wrote:

> Better off just learning to write your own code for Windows API
> because you *will outgrow win32lib eventually or need a feature thats
> missing. If you know how to write API from the get-go, you want be at a
> loss when the time comes. Alot of people think that Win32lib will allow
> them to write some major apps in no time at all but this is huge
> misconception just look at Judiths IDE. How long has it taken to get to
> this point? Could have written the same thing without Win32lib alot faster
> and used less people to do it.

Anyone who outgrows Win32lib is much more likely to go to Delphi, so they 
can get something done, rather than fall back on the Windows API and C. 

Nobody really enjoys writing 100 lines of code to get an empty 
window on the screen, unless they just have nothing else to do. 
Borland found that out with their TPW and TPC environments - hardly 
anyone bought them, and those who were foolish enough to do so, 
like me, never used them for anything more than "Hello World".

Irv

new topic     » goto parent     » topic index » view message » categorize

6. Re: TreeView events

Modularity Irv.

Ive found that there are certain things like Window Creation
which most Common Controls derive from can be built
in seperate include's and when needed simply pluged into
code.

Tommorow, I will have A complete Drive/Directory Listing
TreeView that I will send to Robert for you to look at.

Once the hard work is thru Irv it is SO much simpler I think
that Win32lib to write a program and to prove this, I'll start
right now on the Demo and by Tommorow it'll be complete.

Much faster than Win32lib, Much Smaller, More reliable,
less sofisticated and just as easy to assemble.

Jacques Deschenes was on the right track when he wrote the API
wrappers and my demo will house a few of his plug-in routines
but for the most part, (98%) of the code was written by me.

I'll give the time it took to create the demo and lets see if someone 
can match or beat my time creating an identicle program.

Euman
euman at bellsouth.net


----- Original Message ----- 
From: <irvm at ellijay.com>
To: "EUforum" <EUforum at topica.com>
Sent: Wednesday, December 12, 2001 6:05 PM
Subject: Re: TreeView events


> 
> On Wednesday 12 December 2001 02:28 pm, euman wrote:
> 
> > Better off just learning to write your own code for Windows API
> > because you *will outgrow win32lib eventually or need a feature thats
> > missing. If you know how to write API from the get-go, you want be at a
> > loss when the time comes. Alot of people think that Win32lib will allow
> > them to write some major apps in no time at all but this is huge
> > misconception just look at Judiths IDE. How long has it taken to get to
> > this point? Could have written the same thing without Win32lib alot faster
> > and used less people to do it.
> 
> Anyone who outgrows Win32lib is much more likely to go to Delphi, so they 
> can get something done, rather than fall back on the Windows API and C. 
> 
> Nobody really enjoys writing 100 lines of code to get an empty 
> window on the screen, unless they just have nothing else to do. 
> Borland found that out with their TPW and TPC environments - hardly 
> anyone bought them, and those who were foolish enough to do so, 
> like me, never used them for anything more than "Hello World".
> 
> Irv
> 
> 
> 
>

new topic     » goto parent     » topic index » view message » categorize

7. TreeView events

Modularity Irv.
 
 Ive found that there are certain things like Window Creation
which most Common Controls derive from can be built
in seperate include's and when needed simply pluged into
code.
 
 Tommorow, I will have A complete Drive/Directory Listing
TreeView that I will send to Robert for you to look at.
 
 Once the hard work is thru Irv it is SO much simpler I think
that Win32lib to write a program and to prove this, I'll start
right now on the Demo and by Tommorow it'll be complete.
 
 Much faster than Win32lib, Much Smaller, More reliable,
less sofisticated and just as easy to assemble.
 
 Jacques Deschenes was on the right track when he wrote the API
wrappers and my demo will house a few of his plug-in routines
but for the most part, (98%) of the code was written by me.
 
 I'll give the time it took to create the demo and lets see if someone 
 can match or beat my time creating an identicle program.
 
 Euman
euman at bellsouth.net

new topic     » goto parent     » topic index » view message » categorize

8. Re: TreeView events

Hello Matt / Irv

Im finished with the Drive/Directory Listing Treeview Demo!
Very much like Shell32's BrowseforFolders dialog
except this demo uses (0) no Shell commands and doesnt even use
Euphoria's Dir( ) procedure. I made my own version and it's on
the user-contrib page already.

20 minutes was all I needed to cut/past code.

This version will not check for comctl32.dll version
so if you dont have version 4.71 or higher the demo
will not work.  Win95 w/IE4+ has this version.

I need to zip it up and send it to Rob, look for it in a day or
so on the user-contrib page.

Euman

----- Original Message ----- 
From: <euman at bellsouth.net>
To: "EUforum" <EUforum at topica.com>
Sent: Wednesday, December 12, 2001 6:31 PM
Subject: TreeView events


> 
> Modularity Irv.
>  
>  Ive found that there are certain things like Window Creation
> which most Common Controls derive from can be built
> in seperate include's and when needed simply pluged into
> code.
>  
>  Tommorow, I will have A complete Drive/Directory Listing
> TreeView that I will send to Robert for you to look at.
>  
>  Once the hard work is thru Irv it is SO much simpler I think
> that Win32lib to write a program and to prove this, I'll start
> right now on the Demo and by Tommorow it'll be complete.
>  
>  Much faster than Win32lib, Much Smaller, More reliable,
> less sofisticated and just as easy to assemble.
>  
>  Jacques Deschenes was on the right track when he wrote the API
> wrappers and my demo will house a few of his plug-in routines
> but for the most part, (98%) of the code was written by me.
>  
>  I'll give the time it took to create the demo and lets see if someone 
>  can match or beat my time creating an identicle program.
>  
>  Euman
> euman at bellsouth.net
> 
> 
> 
>

new topic     » goto parent     » topic index » view message » categorize

9. Re: TreeView events

Win32Lib is good becuase it's simple.
I wrote my WinMania library because I didn't want to learn new functions,
new names, what they do,
and I already had good manual (MSDN) for C functions.
Otherwise Win32Lib is great.

----- Original Message -----
From: <euman at bellsouth.net>
To: "EUforum" <EUforum at topica.com>
Subject: Re: TreeView events


>
> Hello all,
>
> Most of what I write below is intended to spark-a-flame in a few on the
list.
> Win32lib isnt going anywhere at the moment so I thought I would help out.
> Not with the coding though...

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu