Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Subclassing headers
Message
 
 
General information
Forum:
Visual FoxPro
Category:
Classes - VCX
Miscellaneous
Thread ID:
00163637
Message ID:
00163704
Views:
24
Michelle,

>Getting the header into my grid, I think, can be done the same as with textboxes. I just run a program on the .SCX that replaces all of the classes.

NO, NO, NO.. doing this will probably make the form impossible to open in the form designer. There was an article about playing this kind of trick on VFP in FPA a while back, but I didn't trust it enough to ever rely on it continuing to work. The header substitution needs to be done at runtime.

>The thing I'm missing is what would the header class look like? I don't know how to programatically make a header.

Here's the current state of my grid header class:
* ccontrol.prg 

* 26-Oct-98 major rev

define class hdrSeeker as Header

Name = "hdrSeeker"
mcArrowName = ""    && name of the arrow used for all headers of the grid
mlAscending = .f.   && flag for sort order
mlColumnMoved = .f. && flag indicating column was moved
mnColumnOrder = 0   && original column order
mlColumnSized = .f. && flag indicating column was resized
mnColumnWidth = 0   && original size of column
mcTag = ""          && name of the index tag

procedure Init( pcTag )
local lcName

this.mcTag = iif( ! empty( pcTag ), pcTag, "" )
this.FontBold = ! empty( this.mcTag )

lcName = this.parent.parent.Name + "lblHeaderArrow"
this.mcArrowName = "this.parent.parent.parent." + lcName

if ( type( (this.mcArrowName) ) == "U" )
   * arrow doesn't exist yet so create it
   lcGrid = FullName( this.parent.parent )
   lcGrid = "thisform" + substr( lcGrid, at( '.', lcGrid ) )
   this.parent.parent.parent.AddObject( (lcName), "lblHeaderArrow", lcGrid )
endif

if ( ! empty( this.mcTag ) )
   this.parent.Width = this.parent.Width + 5
endif

endproc

procedure Click()
local loArrow

loArrow = evaluate( this.mcArrowName )

if ( ! empty( this.mcTag ) and ! this.mlColumnMoved and ! this.mlColumnSized )
   * sortable column that was clicked
   this.mlAscending = ! this.mlAscending
   this.parent.parent.Reorder( this.mcTag, this.mlAscending )
   loArrow.mcColumnName = this.parent.Name
endif

loArrow.SetPosition() && update position
endproc

procedure MouseDown
LPARAMETERS nButton, nShift, nXCoord, nYCoord

with this
   * initialize items that will be tested in MouseUp
   .mnColumnOrder = this.parent.ColumnOrder
   .mnColumnWidth = this.parent.Width
endwith
endproc

procedure MouseUp
LPARAMETERS nButton, nShift, nXCoord, nYCoord

with this
   * check to see if this was a resize or move
   .mlColumnMoved = ( this.parent.ColumnOrder != .mnColumnOrder )
   .mlColumnSized = ( this.parent.Width != .mnColumnWidth )
endwith
endproc

procedure Error
LPARAMETERS nError, cMethod, nLine
ObjError( this, nError, cMethod, nLine )
endproc

enddefine
df (was a 10 time MVP)

df FoxPro website
FoxPro Wiki site online, editable knowledgebase
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform