I had reviewed the code and even though I could not follow the logic without knowing which values the internal HMG_SYSDATA variable hold, I had tested the code, after changing h_windows.prg as mentioned by Roberto.
Code: Select all
/*
* MiniGUI Grid Demo
* (c) 2009 Roberto Lopez
*/
#include "minigui.ch"
Function Main
Local aRows [40] [3]
lInit := .T.
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 640 ;
HEIGHT 400 ;
TITLE 'Mixed Data Type Grid Test' ;
MAIN
ON KEY ESCAPE ACTION Form_1.Release
DEFINE MAIN MENU
DEFINE POPUP 'File'
MENUITEM 'Set Value To {5,2}' ACTION Form_1.Grid_1.Value := {5,2}
MENUITEM 'Set Value To {0,0}' ACTION Form_1.Grid_1.Value := {0,0}
MENUITEM 'Get Value' ACTION GetSelectionValue()
MENUITEM 'Delete Item 5' ACTION Form_1.Grid_1.DeleteItem(5)
MENUITEM 'AddItem' ACTION Form_1.Grid_1.AddItem({'X','X','X'})
MENUITEM 'Delete All Items' ACTION Form_1.Grid_1.DeleteAllItems
END POPUP
END MENU
aRows [1] := {'Simpson','Homer','555-5555'}
aRows [2] := {'Mulder','Fox','324-6432'}
aRows [3] := {'Smart','Max','432-5892'}
aRows [4] := {'Grillo','Pepe','894-2332'}
aRows [5] := {'Kirk','James','346-9873'}
aRows [6] := {'Barriga','Carlos','394-9654'}
aRows [7] := {'Flanders','Ned','435-3211'}
aRows [8] := {'Smith','John','123-1234'}
aRows [9] := {'Pedemonti','Flavio','000-0000'}
aRows [10] := {'Gomez','Juan','583-4832'}
aRows [11] := {'Fernandez','Raul','321-4332'}
aRows [12] := {'Borges','Javier','326-9430'}
aRows [13] := {'Alvarez','Alberto','543-7898'}
aRows [14] := {'Gonzalez','Ambo','437-8473'}
aRows [15] := {'Batistuta','Gol','485-2843'}
aRows [16] := {'Vinazzi','Amigo','394-5983'}
aRows [17] := {'Pedemonti','Flavio','534-7984'}
aRows [18] := {'Samarbide','Armando','854-7873'}
aRows [19] := {'Pradon','Alejandra','???-????'}
aRows [20] := {'Reyes','Monica','432-5836'}
aRows [21] := {'Fernandez','Raul','321-4332'}
aRows [22] := {'Borges','Javier','326-9430'}
aRows [23] := {'Alvarez','Alberto','543-7898'}
aRows [24] := {'Gonzalez','Ambo','437-8473'}
aRows [25] := {'Batistuta','Gol','485-2843'}
aRows [26] := {'Vinazzi','Amigo','394-5983'}
aRows [27] := {'Pedemonti','Flavio','534-7984'}
aRows [28] := {'Samarbide','Armando','854-7873'}
aRows [29] := {'Pradon','Alejandra','???-????'}
aRows [30] := {'Reyes','Monica','432-5836'}
aRows [31] := {'Fernandez','Raul','321-4332'}
aRows [32] := {'Borges','Javier','326-9430'}
aRows [33] := {'Alvarez','Alberto','543-7898'}
aRows [34] := {'Gonzalez','Ambo','437-8473'}
aRows [35] := {'Batistuta','Gol','485-2843'}
aRows [36] := {'Vinazzi','Amigo','394-5983'}
aRows [37] := {'Pedemonti','Flavio','534-7984'}
aRows [38] := {'Samarbide','Armando','854-7873'}
aRows [39] := {'Pradon','Alejandra','???-????'}
aRows [40] := {'Reyes','Monica','432-5836'}
DEFINE GRID Grid_1
ROW 10
COL 10
WIDTH 500
HEIGHT 300
HEADERS {'Column 1','Column 2','Column 3'}
WIDTHS {100,100,100}
ITEMS aRows
VALUE 1
ALLOWEDIT .T.
CELLNAVIGATION .T.
ONCHANGE msginfo("Here")
/*
ONCHANGE { || IF( ( _IsControlDefined( "spnRow", "Form_1" ) .AND. ;
_IsControlDefined( "spnCol", "Form_1" ) ) ,;
( aCurValue := this.value,;
SetProperty( "Form_1", "spnRow", "Value", aCurValue[ 1 ] ),;
SetProperty( "Form_1", "spnCol", "Value", aCurValue[ 2 ] ) ), '' ) }
*/
END GRID // Grid_1
/*
@ 13, 520 LABEL lblRow WIDTH 50 VALUE "Row No:"
@ 53, 520 LABEL lblCol WIDTH 50 VALUE "Col No:"
DEFINE SPINNER spnRow
ROW 10
COL 580
WIDTH 50
RANGEMIN 1
RANGEMAX LEN( aRows )
VALUE 1
ONCHANGE { || aCurValue := GetProperty( "Form_1", "Grid_1", "Value" ),;
aCurValue[ 1 ] := this.Value,;
SetProperty( "Form_1", "Grid_1", "Value", aCurValue ) }
END SPINNER // spnRow
DEFINE SPINNER spnCol
ROW 50
COL 580
WIDTH 50
RANGEMIN 1
RANGEMAX 3
VALUE 1
ONCHANGE { || aCurValue := GetProperty( "Form_1", "Grid_1", "Value" ),;
aCurValue[ 2 ] := this.Value,;
SetProperty( "Form_1", "Grid_1", "Value", aCurValue ) }
END SPINNER // spnCol
*/
DEFINE STATUSBAR
STATUSITEM WIDTH 100
END STATUSBAR
END WINDOW
Form_1.Grid_1.setfocus
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return
Function GetSelectionValue
Local a
a := Form_1.Grid_1.Value
MsgInfo( Str ( a [1] ) + ' ' + Str ( a [2] ) )
Return nil
It is the last sample (without Spinners) by esgici.
I had changed the on change event to just a msginfo("Here") to find out how many times the on change event is fired. When run, to my surprise, while using keyboard navigation, row, col values change accordingly and on change event is fired once. In the case of mouse click (in a different row and col), on change event is fired once, but, the col value doesn't change at all. May be this is the reason?