I placed a statement to log how my grid's DynamicFontBold expression is being called and I'm dismayed to see that VFP loops through the set of displayed records multiple times during it's grid GUI update logic.
Listed below is a log of what's happening. The output shows what's happening relative to other control events.
In a nutshell, VFP calls the Dynamic* expression 4 times for each visible record before the grid even has focus. A similar set of repeated calls to Dynamic* expressions occurs during the grid "focus" event and while navigating in the grid.
Some interesting observations so far:
1. Dynamic*Color expressions get called twice in a row for each record as opposed to DynamicFont* expressions. Sounds like a bug to me?
2. Grid "update" events (and the invokation of Dynamic* expressions) don't appear to be available for study via the "set eventtracking" command.
My goal is to reduce/eliminate redundant calls to grid Dynamic* expressions. Any ideas?
Thanks!
Malcolm
Log output that results when I show a form with one button (gets initial focus) and a grid and then exit without giving grid focus. The text that follows record numbers are the functions/events directly above the expression being called based on walking call stack backwards using program( one level up ), program( two levels up ):
[9/3/2003 2:51:52 PM TEST12] Form.Init().Start
[9/3/2003 2:51:52 PM TEST12] Form.Init().End
[9/3/2003 2:51:52 PM TEST12] Column1.Init()
[9/3/2003 2:51:52 PM TEST12] Grid.Init().Start
[9/3/2003 2:51:52 PM TEST12] Grid.Init().End
[9/3/2003 2:51:52 PM TEST12] Form.Refresh().Start
[9/3/2003 2:51:52 PM CLSFORM.REFRESH] Grid.Refresh().Start
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 1; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 2; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 3; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 4; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 5; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 6; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 7; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.REFRESH] Grid.Refresh().End
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 1; CLSFORM.GRIDCELLPAINT, CLSFORM.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 2; CLSFORM.GRIDCELLPAINT, CLSFORM.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 3; CLSFORM.GRIDCELLPAINT, CLSFORM.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 4; CLSFORM.GRIDCELLPAINT, CLSFORM.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 5; CLSFORM.GRIDCELLPAINT, CLSFORM.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 6; CLSFORM.GRIDCELLPAINT, CLSFORM.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 7; CLSFORM.GRIDCELLPAINT, CLSFORM.REFRESH
[9/3/2003 2:51:52 PM TEST12] Form.Refresh().End
[9/3/2003 2:51:52 PM TEST12] Grid.Refresh().Start
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 1; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 2; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 3; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 4; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 5; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 6; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 7; CLSFORM.GRIDCELLPAINT, CLSFORM.GRDGRID.REFRESH
[9/3/2003 2:51:52 PM TEST12] Grid.Refresh().End
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 1; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 2; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 3; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 4; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 5; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 6; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 7; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 1; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 2; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 3; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 4; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 5; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 6; CLSFORM.GRIDCELLPAINT, TEST12
[9/3/2003 2:51:52 PM CLSFORM.GRIDCELLPAINT] record = 7; CLSFORM.GRIDCELLPAINT, TEST12