grid dblclick

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

franco
Posts: 816
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: grid dblclick

Post 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
All The Best,
Franco
Canada
franco
Posts: 816
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: grid dblclick

Post 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
All The Best,
Franco
Canada
franco
Posts: 816
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: grid dblclick

Post 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 
All The Best,
Franco
Canada
Post Reply