Page 3 of 3

Re: grid dblclick

Posted: Tue May 04, 2021 6:55 pm
by franco
Thanks Jimmy, I will try and let you know.
I got around stopping dblclick on cell 2 with the following which now all works.
There may be some here to help someone else.

Code: Select all

#include "HMG.CH"
# define blue (0,128,255)

FUNCTION main()
PRIVATE acell, GL:= 0
OPNFLS()
	
	DEFINE WINDOW Form_1 ;
		AT 10,0 ;
		WIDTH 1000 HEIGHT 900 ;
		TITLE 'HMG Grid Demo' ;
		Modal 
		

		DEFINE BUTTON button_1
		          ROW 800
			  COL 490
			  WIDTH 120
			  HEIGHT 30
			  CAPTION "SAVE && EXIT"
                          ACTION Form_1.Release

		   END BUTTON	  


		DEFINE GRID Grid_2
			ROW	60
			COL	20        //140
			WIDTH 490        //1100
			HEIGHT 325 // 310    //370
			BACKCOLOR  { 180, 180, 200}
			FONTCOLOR  { 0, 0, 0 }			
			HEADERS {'Item','Qty','Description','Sellprice','Total'}
			WIDTHS {100,70,100,90,100 }
			COLUMNCONTROLS { {'TEXTBOX','CHARACTER','!!!!!!!!!!!!!!!'},{'TEXTBOX','NUMERIC','9999.99'},;
				{'TEXTBOX','CHARACTER','!!!!!!!!!!!!!!!'},;
				{'TEXTBOX','NUMERIC','9999999.99'},{'TEXTBOX','NUMERIC','9999999.99'}}

			ROWSOURCE "PITEM" 
			COLUMNFIELDS { 'ITEM' , 'QTY','DESC', 'PRICE','VAL(STR(QTY*PRICE,10,2))'}
			JUSTIFY { GRID_JTFY_LEFT,GRID_JTFY_RIGHT,GRID_JTFY_LEFT, GRID_JTFY_RIGHT,GRID_JTFY_RIGHT }
			COLUMNWHEN { { || .F. },{ || iIf(HMG_GetLastVirtualKeyDown() == 13, .T., .F.)}, { || .T. },{ || .T. },{ || .F. }}
			ONHEADCLICK { {|| msgbox(item) }, {|| chinv() },{ || '' }, {|| '' }, { || ''} }
			VALUE {1,1}
			CELLNAVIGATION .F.
			ONCHANGE  { || {CH4()}}  
			ALLOWEDIT .T.
			LOCKCOLUMNS 5
		*	ALLOWDELETE .T.
		END GRID
 
 
		 

   END WINDOW


  CENTER WINDOW Form_1
  ACTIVATE WINDOW Form_1

RETURN

FUNCTION CH4
Local aCell ,   AcellValue, Change:=0    //********************** BEFORE EVERY RETURN NEEDS A HMG_CleanLastVirtualKeyDown()
PRIVATE OQty:= 0, Nqty:= 0, Inum := '', Qd:= 0
aCell:= Form_1.Grid_2.value
IF aCell[2] = 2 .AND. HMG_GetLastVirtualKeyDown() == 13
	select pitem
	Go Form_1.Grid_2.Recno               //sets the pinv_it file to grid
	INum := ALLTRIM(ITEM) 
	select inv
	seek INum
        if found()
		if rlock()
		else
			select pitem
			msginfo('Inventory Item in Use ** Try Later')
			HMG_CleanLastVirtualKeyDown()
			Form_1.Grid_2.ClearBuffer
			Form_1.Grid_2.value:=aCell
			return
		endif
	endif
	select pitem
	OQty := VAL(ALLTRIM(STR(PITEM->QTY,10,2)))
	Nqty := Form_1.Grid_2.CellEx (aCell[1] , aCell[2])
	Qd := val(alltrim(str(oQty,10,1)))-val(alltrim(str(nQty,10,2)))
	if rlock()
		replace qty with Nqty
	else
		msginfo('Can Not Lock Item')
		HMG_CleanLastVirtualKeyDown()
		select inv
		unlock
		select pitem
		Form_1.Grid_2.ClearBuffer
		Form_1.Grid_2.value:=aCell
		return
	endif
			
***************** Inventory Update
	select Inv 
		replace qty with qty + Qd
	unlock
	select pitem	
	Form_1.Grid_2.value:=aCell
	Form_1.Grid_2.Refresh
ELSE
	HMG_CleanLastVirtualKeyDown()
	RETURN
ENDIF
HMG_CleanLastVirtualKeyDown()
RETURN

Function chinv
go form_1.grid_2.recno
select inv
seek pitem->item
msgbox(num1 + " On Hand "+ALLTRIM(str(INV->qty))+ "  "+PITEM->ITEM)
select pitem
return

FUNCTION CLOSEFLS
	CLOSE PITEM
	CLOSE INV
	CLEAR ALL
RETURN


FUNCTION OPNFLS
LOCAL CF, indcode := 65, IND:= '', KY := 'R'

if ! file('inv.dbf')
	CF := {}
	aADD(CF,{'NUM1'       ,'C' , 15,0})
	aADD(CF,{'DESC'       ,'C' , 15,0})
	aADD(CF,{'PRICE'       ,'N' ,10,2 })
	aADD(CF,{'QTY'       ,'N' ,10,0 })

	DBCREATE( 'INV.DBF',CF )
	USE
 
   USE INV EXCLUSIVE NEW 
	DO WHILE RECNO()< 5
*	IND := 'CHR('+ALLTRIM(STR(INDCODE))+')'
	INV->( DBAPPEND())
	INV->( FIELDPUT(1, 'P'+ALLTRIM(STR(100000+RECNO())) ))
	INV->( FIELDPUT(2, 'PARTS'))
	INV->( FIELDPUT(3, 24.95 - (RECNO()*3)))
	INDCODE:=INDCODE+1
	LOOP
	ENDDO
	INDEX ON NUM1 TO NUM1
	REPLACE ALL QTY WITH 1
	USE
ENDIF

SELECT 0
USE INV NEW SHARED
INDEX ON NUM1 TO NUM1
SET INDEX TO NUM1
GO 3
*RLOCK()
*INDEX ON ITEM TO ITEM
*NORD := INDEXORD()

if ! file('pitem.dbf')
	CF := {}
	aADD(CF,{'NUM1'       ,'C' , 15,0})
	aADD(CF,{'DESC'       ,'C' , 15,0})
	aADD(CF,{'PRICE'       ,'N' ,10,2})
	aADD(CF,{'QTY'       ,'N' ,10,2})
	aADD(CF,{'DESC'       ,'C' , 15,0})
	aADD(CF,{'ITEM'       ,'C' , 15,0})
	DBCREATE( 'PITEM.DBF',CF )
	USE

    USE PITEM EXCLUSIVE NEW 
       APPEND FROM INV
       REPLACE ALL ITEM WITH NUM1
       REPLACE  ALL QTY WITH 1
	INDEX ON ITEM TO NUM1
	USE
ENDIF
	SELECT 0
	USE PITEM SHARED 
*	SET INDEX TO ITEM
	INDEX ON ITEM TO ITEM
RETURN

Re: grid dblclick

Posted: Tue Jul 06, 2021 11:14 pm
by franco
New problem in grid column 2. When changing the value in the column I press enter to open the cell to change. If I change the value but do not press
enter to close the cell change but take the mouse and press anywhere away from the cell line I am on the program can carry on to different area.
Is there a way to shut the mouse off or is there a way to not allow exiting the cell 2 until the change is completed.
On change is not triggered until enter is pressed again, so the on change function is not processed.
Any thoughts, Franco

Re: grid dblclick

Posted: Wed Jul 07, 2021 7:03 pm
by franco
Found a way to get to work. Had to add a Function on the LOSTFOCUS of grid.

Code: Select all

ONLOSTFOCUS CH3()

FUNCTION CH3
LOCAL NQ, aCell:= Form_1.Grid_2.value
SELECT PITEM
NQ := Form_1.Grid_2.CellEx (aCell[1] , aCell[2])
Go Form_1.Grid_2.Recno 
IF ACELL[2] = 2 .AND. PITEM->QTY <> NQ .AND. HMG_GetLastVirtualKeyDown() <> 13
			select pitem
			msginfo('Quantity Not Set ** Returning To Reset Quantity')
			HMG_CleanLastVirtualKeyDown()
			Form_1.Grid_2.ClearBuffer
			aCell[2] = 2
			Form_1.Grid_2.value:=aCell
ENDIF

RETURN