Re: GRID CONTROL problem
Posted: Sun Feb 12, 2017 9:48 am
Huiyi,
I think there is a solution to your problem. Your code has been modified as follows:
#include <hmg.ch>
Function Main
PRIVATE n // declare a private variable
MAKEDATA()
DEFINE WINDOW MAIN AT 213 , 425;
WIDTH 482 HEIGHT 350 VIRTUAL WIDTH Nil VIRTUAL HEIGHT Nil ;
TITLE "Test grid control" ICON NIL MAIN CURSOR NIL
DEFINE LABEL Label_1
ROW 30
COL 40
WIDTH 120
HEIGHT 24
VALUE "Enter filter value"
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ACTION Nil
AUTOSIZE .F.
BACKCOLOR NIL
FONTCOLOR NIL
RIGHTALIGN .T.
END LABEL
DEFINE TEXTBOX Text_1
ROW 30
COL 180
WIDTH 120
HEIGHT 24
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
CASECONVERT NONE
BACKCOLOR NIL
FONTCOLOR NIL
INPUTMASK "!!!!!"
FORMAT Nil
VALUE ""
END TEXTBOX
DEFINE BUTTON Button_1
ROW 30
COL 330
WIDTH 100
HEIGHT 28
ACTION FILTER(MAIN.TEXT_1.VALUE)
CAPTION "FILTER"
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
PICTURE Nil
PICTALIGNMENT TOP
END BUTTON
DEFINE GRID Grid_1
ROW 80
COL 30
WIDTH 420
HEIGHT 210
ITEMS { {""} }
VALUE Nil
WIDTHS {200,200 }
HEADERS {"field1","field2"}
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
BACKCOLOR NIL
FONTCOLOR NIL
HEADERIMAGES Nil
ROWSOURCE "test"
COLUMNFIELDS {"AA","BB"}
ALLOWAPPEND .F.
ALLOWDELETE .F.
BUFFERED .F.
DYNAMICDISPLAY Nil
ONSAVE Nil
LOCKCOLUMNS 0
ONCHANGE GridRefresh() // call a function when this event is fired
END GRID
END WINDOW
Main.Center
Main.Activate
Return
function makedata()
local astru:={{"AA","C",3,0},{"BB","C",5,0}}
dbcreate("test.dbf",astru)
use test new
dbAppend()
TEST->AA:="11"
TEST->BB:="AAAAA"
dbAppend()
TEST->AA:="12"
TEST->BB:="BBBBB"
dbAppend()
TEST->AA:="13"
TEST->BB:="AAAAA"
dbAppend()
TEST->AA:="14"
TEST->BB:="CCCCC"
dbAppend()
TEST->AA:="15"
TEST->BB:="AAAAA"
dbAppend()
TEST->AA:="16"
TEST->BB:="AAAAA"
count to n // store number of records
RETURN NIL
FUNCTION FILTER(CVALUE)
IF EMPTY(CVALUE)
dbClearFilter()
ELSE
dbSETFilter({||TEST->BB==CVALUE})
ENDIF
count to n // store number of filtered records
TEST->(DBGOTOP())
MAIN.GRID_1.REFRESH()
MAIN.GRID_1.SetFocus() // set focus on to the grid
keybd_event ( VK_DOWN ) //simulate key down and key up
keybd_event ( VK_UP )
RETURN NIL
Function GridRefresh()
MAIN.GRID_1.ItemCount := n // set grid itemcount to number of records
return NIL
It is working with HMG 3.4.3
I think there is a solution to your problem. Your code has been modified as follows:
#include <hmg.ch>
Function Main
PRIVATE n // declare a private variable
MAKEDATA()
DEFINE WINDOW MAIN AT 213 , 425;
WIDTH 482 HEIGHT 350 VIRTUAL WIDTH Nil VIRTUAL HEIGHT Nil ;
TITLE "Test grid control" ICON NIL MAIN CURSOR NIL
DEFINE LABEL Label_1
ROW 30
COL 40
WIDTH 120
HEIGHT 24
VALUE "Enter filter value"
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ACTION Nil
AUTOSIZE .F.
BACKCOLOR NIL
FONTCOLOR NIL
RIGHTALIGN .T.
END LABEL
DEFINE TEXTBOX Text_1
ROW 30
COL 180
WIDTH 120
HEIGHT 24
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
CASECONVERT NONE
BACKCOLOR NIL
FONTCOLOR NIL
INPUTMASK "!!!!!"
FORMAT Nil
VALUE ""
END TEXTBOX
DEFINE BUTTON Button_1
ROW 30
COL 330
WIDTH 100
HEIGHT 28
ACTION FILTER(MAIN.TEXT_1.VALUE)
CAPTION "FILTER"
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
PICTURE Nil
PICTALIGNMENT TOP
END BUTTON
DEFINE GRID Grid_1
ROW 80
COL 30
WIDTH 420
HEIGHT 210
ITEMS { {""} }
VALUE Nil
WIDTHS {200,200 }
HEADERS {"field1","field2"}
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
BACKCOLOR NIL
FONTCOLOR NIL
HEADERIMAGES Nil
ROWSOURCE "test"
COLUMNFIELDS {"AA","BB"}
ALLOWAPPEND .F.
ALLOWDELETE .F.
BUFFERED .F.
DYNAMICDISPLAY Nil
ONSAVE Nil
LOCKCOLUMNS 0
ONCHANGE GridRefresh() // call a function when this event is fired
END GRID
END WINDOW
Main.Center
Main.Activate
Return
function makedata()
local astru:={{"AA","C",3,0},{"BB","C",5,0}}
dbcreate("test.dbf",astru)
use test new
dbAppend()
TEST->AA:="11"
TEST->BB:="AAAAA"
dbAppend()
TEST->AA:="12"
TEST->BB:="BBBBB"
dbAppend()
TEST->AA:="13"
TEST->BB:="AAAAA"
dbAppend()
TEST->AA:="14"
TEST->BB:="CCCCC"
dbAppend()
TEST->AA:="15"
TEST->BB:="AAAAA"
dbAppend()
TEST->AA:="16"
TEST->BB:="AAAAA"
count to n // store number of records
RETURN NIL
FUNCTION FILTER(CVALUE)
IF EMPTY(CVALUE)
dbClearFilter()
ELSE
dbSETFilter({||TEST->BB==CVALUE})
ENDIF
count to n // store number of filtered records
TEST->(DBGOTOP())
MAIN.GRID_1.REFRESH()
MAIN.GRID_1.SetFocus() // set focus on to the grid
keybd_event ( VK_DOWN ) //simulate key down and key up
keybd_event ( VK_UP )
RETURN NIL
Function GridRefresh()
MAIN.GRID_1.ItemCount := n // set grid itemcount to number of records
return NIL
It is working with HMG 3.4.3