Subject Re: Grid search
From Akshat Kapoor <akshat.kapoor@kapoorsons.in>
Date Mon, 28 Sep 2020 18:27:56 +0530
Newsgroups dbase.getting-started
Attachment(s) Mervynmuneem.cfm

> Would love to see Mervyn's detailed explanation, perhaps - between the 2
> of us we could "translate" it into something understandable by us little
> people.
>
> If we could hook into other programs with this it'd be awesome !

Good Evening Robbie,
Here it is.

Regards
Akshat



class muneem of keepsizeCform custom from "keepsize.cfm"
//class muneem of FORM custom
   with (this)
      colorNormal = "0xbffffe"
      height = 27.1364
      left = 80.1429
      top = 0.0
      width = 160.7143
      text = ""
      clientEdge = true
      windowState = 2        // Maximized
      autoCenter = true
   endwith

function add_item()
        on key label esc keyboard "{ALT+I}"
        form.additem.enabled = true
        form.additem.visible = true
        form.additem.mcomp.value           = mo_item.company
        form.additem.mitem.value           = mo_item.item
        form.additem.mdescrip.value        = mo_item.descrip
        form.additem.mmrp.value                  = mo_item.mrp
        form.additem.mdisc.value                  = mo_item.disc
        form.additem.mqty.value                        = 0
        form.additem.mmisc.value                = 0
//        if mo_item.offerp >0
//                form.additem.mrate.value         = mo_item.offerp
//        else
//                form.additem.mrate.value         = mo_item.mrp*(1-mo_item.disc/100)
//                form.additem.mrate.value   = round(form.additem.mrate.value,0)
//        endif
        form.additem.mrate.value         = mo_item.mrp*(1-mo_item.disc/100)
        form.additem.mrate.value   = round(form.additem.mrate.value,0)
        if mo_item.offerp >0 and mo_item.mrp > 0
                form.additem.mmisc.value         = form.additem.mrate.value-mo_item.offerp
   else if mo_item.offerp >0 and mo_item.mrp = 0
      form.additem.mrate.value         = mo_item.offerp
        endif
        form.additem.mcomment.value="COMMENT"
        form.additem.mrate.setfocus()
   if type("mo_item.bcde")#"U" and mo_item.bcde
      form.additem.mqty.value = 1
      form.additem.itemsave.setfocus()
   endif
        
return

      
function update_inv
parameters mrec,mqty,mlocation,msell , mrate
if mlocation $ "012" and mrec >0
   do case
      case mlocation ="0"
         mloc = 'hoqty'
      case mlocation = "1"
         mloc = 'go1qty'
      case mlocation = "2"
         mloc = 'go2qty'
   endcase
   if "KAPOORSONS" $ mcompany.company and mlocation = "1"
      cmd = "update inve"+mcompany.fyear+" SET " + mloc +" = "+ mloc +" - "+ mqty
      if mrate > 0
         cmd+= " ,"+ msell + "= "+ mrate
      endif
      cmd += " WHERE recno = " + mrec
   else
      cmd = "update inve"+mcompany.fyear+" SET " + mloc +" = "+ mloc +" - "+ mqty
      if mrate > 0
         cmd+= " ,"+ msell + "= "+ mrate
      endif
      cmd += " WHERE recno = " + mrec +" AND generic"
   endif
   mcompany.adodb.executesql(cmd)
else
        if mrec <=0
                //msgbox("mrec is zero or less than 0")
        else
                //msgbox("Unknown location cannot update inventory")
        endif
endif
return


   function num_onOpen()
      parameters repeat
      if not repeat
      #include winuser.h
      if type("GetCurrentThreadId") # "FP"
         extern CULONG GetCurrentThreadId() kernel32 from "GetCurrentThreadId"
      endif    
      if type("GetWindowLong") # "FP"
         extern CLONG GetWindowLong(CHANDLE, CINT) user32 from "GetWindowLongW"
      endif
      if type("SetWindowsHookEx") # "FP"
         extern CLONG SetWindowsHookEx(CINT, CPTR, CHANDLE, CULONG) user32 from "SetWindowsHookExW"
      endif
      if type("UnhookWindowsHookEx") # "FP"
         extern CLOGICAL UnhookWindowsHookEx(CHANDLE) user32 from "UnhookWindowsHookEx"
      endif
      if type("CallNextHookEx") # "FP"
         extern CLONG CallNextHookEx(CHANDLE, CINT, CUINT, CUINT) user32 from "CallNextHookEx"
      endif
      if type("GetAsyncKeyState") # "FP"
       extern CSHORT GetAsyncKeyState(CSHORT)  user32
      endif
                CALLBACK CLONG hookWndProc(CINT, CUINT, CUINT) OBJECT this
      endif
      this.hookProc = GetCallAddress(class::HOOKWNDPROC)
      this.hInst = GetWindowLong(form.hwnd, GWL_HINSTANCE)
      this.hook = SetWindowsHookEx(WH_KEYBOARD, form.hookProc, this.hInst, GetCurrentThreadId())
      return

   function num_canClose
      UnhookWindowsHookEx(this.hook)
      return true

   function num_key_pressed(num_key)
      if num_key = 0x60
         cKey = 'VK_NUMPAD0'
                        keyboard "0"
      elseif num_key = 0x61
         cKey ='VK_NUMPAD1'
                        keyboard "1"
      elseif num_key = 0x62
         cKey ='VK_NUMPAD2'
                        keyboard "2"
      elseif num_key = 0x63
         cKey ='VK_NUMPAD3'
                        keyboard "3"
      elseif num_key = 0x64
         cKey ='VK_NUMPAD4'
                        keyboard "4"
      elseif num_key = 0x65
         cKey ='VK_NUMPAD5'
                        keyboard "5"
      elseif num_key = 0x66
         cKey ='VK_NUMPAD6'
                        keyboard "6"
      elseif num_key = 0x67
         cKey ='VK_NUMPAD7'
                        keyboard "7"
      elseif num_key = 0x68
         cKey ='VK_NUMPAD8'
                        keyboard "8"
      elseif num_key = 0x69
         cKey ='VK_NUMPAD9'
                        keyboard "9"
      elseif num_key = 0x6B
         cKey ='VK_NUMPAD+'
                        keyboard "+"
      elseif num_key = 0x6A
         cKey ='VK_NUMPAD*'
                        keyboard "*"
      elseif num_key = 0x6C
         cKey ='VK_NUMPAD/'
                        keyboard "/"
      elseif num_key = 0x6D
         cKey ='VK_NUMPAD-'
                        keyboard "-"
      elseif num_key = 0x6E
         cKey ='VK_NUMPAD.'
                        keyboard "."
      elseif num_key = 0x6F
         cKey ='VK_NUMPAD/'
                        keyboard "/"
      endif        
      return
      

   function hookWndproc(hCode, wParam, lParam)
    cRet = CallNextHookEx(this.hook, hCode, wParam, lParam)
      if wParam >= VK_NUMPAD0 and wParam <= VK_DIVIDE and hcode = 0 and (not bitset(lparam,31))
         if not bitset(GetAsyncKeyState(VK_MENU),31) //Alt key down
             class::num_key_pressed(wParam)
             cRet = 1 //Hot key. Don't pass key press on to next hook for processing.
         else
             cRet = CallNextHookEx(this.hook, hCode, wParam, lParam) //Not a hot key. Process key press
         endif
      endif
      return cRet

//   function editorControl_beforeCellPaint(bSelectedRow)
//      if this.parent.parent.invedatamodule1.inve.rowset.fields["clearance"].value=1
//         if.not.bSelectedRow
//            this.colorNormal = "red/0xbffffe"
//         else
//            this.colornormal = "white"
//         endif
//      else
//         if.not.bSelectedRow
//            this.colornormal = ""
//         endif
//      endif
//      return true

endclass