I needed to see if a memo field was changed in a browse window.  In browse the :V is not called, but the :W is called when entering the field and when you exit from editing the memo, (not just from exiting the memo field).  

I created two functions to determine if the memo field has been changed and then sent e_mail to notify the individual there was a change.

Create two global variables to hold the memo size and the unique identifier.
   gc_sectid, gn_memosize

SYNTAX
:W=fmemo("individual_id",memosize("memo_field_name"))

***********************************
Function memosize
parameter lmemo
private lname, larry

lname = sys(3)                 && get a unique name
lname = lname+".txt"          
copy memo (lmemo) to (lname)
=adir(larry,(lname))
delete file (lname)
return larry(2)

** I dislike the procedure of file creating but
** I tried to use the LEN() function, but it wasn't consistent
** if you have somthing better, please contact me

**********************************
function fmemo
parameter lid, lsize

** first time in function fmemo
if empty(gc_sectid)
   gc_sectid = lid
   gn_memosize = lsize
   return .t.
endif

** if same person and memo has changed size, send mail
if gc_sectid = lid and gn_memosize != lsize
   gcto = GETaddress(sections.sect_id)  && e_mail address
   IF !empty(gcto)
      lmesg = "Work assignment update"
      msgtxt = "ID  "+tfields(1)+"  JOB Description: "+tfields(2)
      msgtxt = msgtxt + " work instructions have been changed"
      =DDESetOption('SAFETY',.f.)
      channum = DDEInitiate('MailMan', 'SendMail')
      if channum < 0
         !/N7 C:\MAILMAN\MAILMAN.EXE
         channum = DDEInitiate('MailMan', 'SendMail')
      endif
      if channum != -1
         if !DDEExecute(channum,;
            '[SendStr("#To:&gcto#Subject:&lmesg ;
            #Message:&msgtxt #NoSave")]')
            =FMsgBox("Unable to send E-Mail","ok","!","E-MAIL ERROR")
         endif
         = DDETerminate(channum)  && Close the channel
      endif
   endif
*** always reset the global variables
  gn_memosize = lsize
  gc_sectid = lid
else
*** always reset the global variables
  gn_memosize = lsize
  gc_sectid = lid
endif
return .t.
