5 |
The LA Fox Developer Newsletter
January
1998
Yet Another Approach to
Forms and Grids
by Nick Neklioudov
[Ed. Note: Nick Neklioudov is a Fox (“all-kinds-of”) programmer
for last 11 years and lives in Halifax, Nova Scotia. As CNA,
Nick also provides network implementation and support, as well
as different kinds of computer consulting, support and trouble-
shooting tasks. He is currently working on contract basis.]
I believe all of us are familiar with that set of four navigational
buttons “First”, “Prior”, “Next”, “Last” we use for data entry or
maintenance forms. You need to put some code in their Click()
events, enable or disable navigation buttons, according to the
position of record pointer in a table. Of course, usually all we do
it only once, and save this commandgroup as a class for reuse.
I would like to suggest another approach for VFP 5.0 which
eliminates the need in that commandgroup at all.
Everybody knows, that we can put any control into a grid cell,
but maybe not everybody realizes that it is possible to put there
also any container, even the whole form, which gives us some
extra opportunities.
I created this sample after discussion about “Scrolling grid” in
the thread, started by Jon Paskett on UT this January.
This example contains pageframe, placed into a grid cell
instead of default textbox. The pageframe contains 3 pages with
all necessary controls and should be saved as class in a class
library.
Say, we use EMPLOYEE.DBF from Tasmanian Traders sample
as our data source. Our pageframe has Height
=
300 and Width
=
400
,
so we create a form, with a grid of 1 column, then drop
our new pageframe class into grid’s column, set CurrentControl
for the Columni to the pageframe and remove default
textbox.
Also we have to make sure that grid properties are set to:
ColumnCount
=
I
DeleteMark= .F
GridLines
=
0
HeaderHeight
=
0.
Height 300
HighlightRow= .F.
RecordMark
=
.F.
RecordSource
=
“employee”
RowHeight
=
300
ScrollBars
=
2
Width
=
400
Column 1 .Width
=
400
Column 1 .Sparse
=
.F.
The trick is that now the grid cell has the exact size of the
pageframe.
After those settings we run our form and see the pageframe,
which has a vertical scrollbar on the right side. We can use this
scroilbar to navigate through our data source like we do it with a
text
in
MS Word. Note, that the record shown in the pageframe
is not the current record in our data source until we actually
click anywhere on the pageframe or any of its controls. Only
after that record pointer actually moves.
So, in this case we have no need in any code we previously
used in our navigational commandgroup.
This approach “as is” may be used for forms, which works
directly with tables or views, and use APPEND BLANK for
adding records, or, for any forms which are used just to repre-
sent data.
Sometimes, when you open this form in Form Designer again,
after adding pageframe to the grid, it can give you an error
message “Error loading file
record number X - Pageframel (or
one of its members). : Pageframe cannot be sized that small”,
despite of the fact, that pageframe instance in the grid column
has size 300 x 400 pixels. I opened my form’s .SCX file by USE
MYFORM.SCX and found, that by unknown reasons there are
no Width and Height properties defined in Properties field for the
record containing information about the pageframe. It never
happened, when I was experimenting in VFP 3.0. To fix that, it
is enough just to add to Property field manually:
Height = 300
Width = 400
By the way, I would not recommend this kind of grid for VFP
3.0, because it seems to work differently there, and give strange
visual effects, but for VFP 5.0, it works just fine, as far as I
tested it. I would be glad to get any feedback about any prob-
lems regarding this approach.
(Nick can be reached atad587@chebucto.ns.ca.]
Page
5
|
5 |