HMG 3.3.1 Patch 4
New features:
– <ParentWindowName>.<GridControlName>.CheckBoxes [ := | –>] lBoolean
– <ParentWindowName>.<GridControlName>.CheckBoxItem ( nRow ) [ := | –>] lBoolean
– <ParentWindowName>.<GridControlName>.GroupEnabled [ := | –>] lBoolean
– <ParentWindowName>.<GridControlName>.GroupDeleteAll
– <ParentWindowName>.<GridControlName>.GroupDelete ( nGroupID )
– <ParentWindowName>.<GridControlName>.GroupExpand ( nGroupID )
– <ParentWindowName>.<GridControlName>.GroupCollapsed ( nGroupID )
– <ParentWindowName>.<GridControlName>.GroupAdd ( nGroupID [, nPosition ] )
– <ParentWindowName>.<GridControlName>.GroupInfo ( nGroupID );
[ := | –>] { [ cHeader ] , [ nAlignHeader ] , [ cFooter ] , [ nAlingFooter ] , [ nState ] }
– <ParentWindowName>.<GridControlName>.GroupItemID ( nItem ) [ := | –>] nGroupID
nAlignHeader & nAlingFooter –> GRID_GROUP_LEFT | GRID_GROUP_CENTER | GRID_GROUP_RIGHT
nState –> GRID_GROUP_NORMAL | GRID_GROUP_COLLAPSED
See this demo:
#include "hmg.ch" Function Main Local aRows DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 800 ; HEIGHT 600 ; TITLE "Demo: GRID Group" ; MAIN aRows := ARRAY (20) aRows [1] := {'Simpson', 'Homer', '555-5555', 1,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [2] := {'Mulder', 'Fox', '324-6432', 2,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [3] := {'Smart', 'Max', '432-5892', 3,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [4] := {'Grillo', 'Pepe', '894-2332', 4,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [5] := {'Kirk', 'James', '346-9873', 5,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [6] := {'Barriga', 'Carlos', '394-9654', 6,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [7] := {'Flanders', 'Ned', '435-3211', 7,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [8] := {'Smith', 'John', '123-1234', 8,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [9] := {'Pedemonti', 'Flavio', '000-0000', 9,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [10] := {'Gomez', 'Juan', '583-4832', 10,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [11] := {'Fernandez', 'Raul', '321-4332', 11,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [12] := {'Borges', 'Javier', '326-9430', 12,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [13] := {'Alvarez', 'Alberto', '543-7898', 13,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [14] := {'Gonzalez', 'Ambo', '437-8473', 14,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [15] := {'Batistuta', 'Gol', '485-2843', 15,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [16] := {'Vinazzi', 'Amigo', '394-5983', 16,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [17] := {'Pedemonti', 'Flavio', '534-7984', 17,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [18] := {'Samarbide', 'Armando', '854-7873', 18,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [19] := {'Pradon', 'Alejandra', '???-????', 19,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} aRows [20] := {'Reyes', 'Monica', '432-5836', 20,; HMG_TimeToTime( TIME(), _TIMESHORT12H )} bColor := { || if ( This.CellRowIndex/2 == int(This.CellRowIndex/2),; {128,128,128} , {192,192,192} ) } fColor := { || if ( This.CellRowIndex/2 == int(This.CellRowIndex/2),; BLUE , RED ) } @ 50,10 GRID Grid_1 ; WIDTH 750 ; HEIGHT 340 ; HEADERS {'Last Name', 'First Name', 'Phone', 'Row', 'Time'}; WIDTHS {140, 140, 140, 140, 140}; ITEMS aRows; COLUMNCONTROLS {NIL,NIL,NIL, { 'SPINNER', 0 , 50 },; { "TIMEPICKER", _TIMESHORT12H }}; VALUE 1 EDIT; DYNAMICBACKCOLOR {bColor, bColor, bColor, bColor, bColor}; DYNAMICFORECOLOR {fColor, fColor, fColor, fColor, fColor}; TOOLTIP 'Editable Grid Control'; CELLNAVIGATION /* - ..CheckBoxes [ := | -->] lBoolean - ..CheckBoxItem ( nRow ) [ := | -->] lBoolean - ..GroupEnabled [ := | -->] lBoolean - ..GroupDeleteAll - ..GroupDelete ( nGroupID ) - ..GroupExpand ( nGroupID ) - ..GroupCollapsed ( nGroupID ) - ..GroupAdd ( nGroupID [, nPosition ] ) - ..GroupInfo ( nGroupID ) [ := | -->] { [; cHeader ],; [ nAlignHeader ],; [ cFooter ],; [ nAlingFooter ],; [ nState ] } - ..GroupItemID ( nItem ) [ := | -->] nGroupID nAlignHeader & nAlingFooter --> GRID_GROUP_LEFT | GRID_GROUP_CENTER | GRID_GROUP_RIGHT nState --> GRID_GROUP_NORMAL | GRID_GROUP_COLLAPSED */ #define GROUP1_ID 100 #define GROUP2_ID 200 Form_1.Grid_1.GroupEnabled := .T. Form_1.Grid_1.GroupAdd ( GROUP1_ID , NIL ) Form_1.Grid_1.GroupAdd ( GROUP2_ID , NIL ) Form_1.Grid_1.GroupInfo ( GROUP1_ID ) := { "Header Group 1",; GRID_GROUP_CENTER , "Footer Group 1" ,; GRID_GROUP_CENTER,; GRID_GROUP_NORMAL } Form_1.Grid_1.GroupInfo ( GROUP2_ID ) := { "Header Group 2",; GRID_GROUP_CENTER , "Footer Group 2",; GRID_GROUP_CENTER,; GRID_GROUP_NORMAL } FOR i := 1 TO Form_1.Grid_1.ItemCount IF i <= Form_1.Grid_1.ItemCount/2 Form_1.Grid_1.GroupItemID (i) := GROUP2_ID ELSE Form_1.Grid_1.GroupItemID (i) := GROUP1_ID ENDIF NEXT @ 450, 55 BUTTON Button_1 CAPTION "G1-NORMAL" ACTION ; Form_1.Grid_1.GroupExpand ( GROUP1_ID ) @ 450, 155 BUTTON Button_2 CAPTION "G1-COLLAPSED" ACTION ; Form_1.Grid_1.GroupCollapsed ( GROUP1_ID ) @ 450, 355 BUTTON Button_3 CAPTION "G1-GetInfo" ACTION ; MsgDebug (Form_1.Grid_1.GroupInfo ( GROUP1_ID )) @ 500, 55 BUTTON Button_4 CAPTION "G2-NORMAL" ACTION ; Form_1.Grid_1.GroupExpand ( GROUP2_ID ) @ 500, 155 BUTTON Button_5 CAPTION "G2-COLLAPSED" ACTION ; Form_1.Grid_1.GroupCollapsed ( GROUP2_ID ) @ 500, 355 BUTTON Button_6 CAPTION "G2-GetInfo" ACTION ; MsgDebug (Form_1.Grid_1.GroupInfo ( GROUP2_ID )) @ 450, 555 BUTTON Button_7 CAPTION "Group ON/OFF" ACTION ; Form_1.Grid_1.GroupEnabled := .NOT.; Form_1.Grid_1.GroupEnabled END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return
PS: this patch include all new features of previous patches.