Puedes hacerlo con el diseñador de clases.
[New]
En la caja de
diálogo que aparece pones el nombre que tendrá tu clase, En el combo
Based on seleccionas Commandgroup y en Store In indicas el nombre de la
biblioteca vcx en la que estará tu clase (no uses la bibilioteca
autogenerada, si no creaste ninguna clase, reemplaza por el nombre que
quieras darle).
Una vez aceptado podrás modificar la clase como necesites.
En el ejemplo le agrego a la clase una propiedad objGrid=null (valor inicial). Este valor será modificado en tiempo de ejecución con la referencia de objeto del control Grid en el que deba producir sus efectos.
Supongamos que la biblioteca (vcx) se llama "MisClases" y la clase commandgroup creada se llama "cmgMovimGrid", en cualquier formulario que tenga uno o más controles grids podrás agreagar para cada uno de ellos esta clase:
Thisform.NewObject("cmgMvmGrilla","cmgMovimGrid","MisClases.vcx")
thisform.cmgMvmGrilla.ObjGrid = Thisform.Grilla && donde Grilla es un Control Grid Name="Grilla"
Thisform.NewObject("cmgMvmGrillo","cmgMovimGrid","MisClases.vcx")
thisform.cmgMvmGrillo.ObjGrid = Thisform.Grillo && donde Grillo es un Control Grid Name="Grillo"
Esto sería una forma de agregarlos por código (tendrás que indicarle la ubicación). También lo puedes agregar manualmente desde la biblioteca (View Classes).
De manera similar te conviene programar una clase Grid que resuelva todos los temas comunes.
Lo que sigue es un segmento de la versión creada con Foxbin2prg (de Fernando D. Bozzo) de la clase commandgroup, para darte una idea de como se puede armar.
Como podrás ver, no hay código en los botones, solamente las dimensiones y la asignación de Picture y DisabledPicture.
Todo el código está en el evento click de la clase.
DEFINE CLASS thmovim AS commandgroup
*< CLASSDATA: Baseclass="commandgroup" Timestamp="" Scale="Pixels" Uniqueid="" />
*<DefinedPropArrayMethod>
*p: objgrid
*</DefinedPropArrayMethod>
BackColor = 201,210,211
ButtonCount = 5
Height = 28
Name = "thmovim"
objgrid = null
Value = 1
Width = 111
Command1.Caption = ""
Command1.DisabledPicture = ..\graphics\flemtle32cn.bmp
Command1.FontSize = 8
Command1.Height = 20
Command1.Left = 4
Command1.Name = "Command1"
Command1.Picture = ..\graphics\flemtle32c.bmp
Command1.ToolTipText = "Ir al Inicio de la Tabla."
Command1.Top = 4
Command1.Width = 20
Command2.Caption = ""
Command2.DisabledPicture = ..\graphics\flemtri32cn.bmp
Command2.Height = 20
Command2.Left = 24
Command2.Name = "Command2"
Command2.Picture = ..\graphics\flemtri32c.bmp
Command2.ToolTipText = "Ir al Final de la Tabla."
Command2.Top = 4
Command2.Width = 20
Command3.Caption = ""
Command3.DisabledPicture = ..\graphics\flemle32cn.bmp
Command3.Height = 20
Command3.Left = 44
Command3.Name = "Command3"
Command3.Picture = ..\graphics\flemle32c.bmp
Command3.ToolTipText = "Ir al Registro Anterior."
Command3.Top = 4
Command3.Width = 20
Command4.Caption = ""
Command4.DisabledPicture = ..\graphics\flemri32cn.bmp
Command4.Height = 20
Command4.Left = 64
Command4.Name = "Command4"
Command4.Picture = ..\graphics\flemri32c.bmp
Command4.ToolTipText = "Ir al Registro Siguiente."
Command4.Top = 4
Command4.Width = 20
Command5.Caption = ""
Command5.DisabledPicture = ..\graphics\fledup32cn.bmp
Command5.Height = 20
Command5.Left = 84
Command5.Name = "Command5"
Command5.Picture = ..\graphics\fledup32b.bmp
Command5.ToolTipText = "Enfocar la Cuadrícula."
Command5.Top = 4
Command5.Width = 24
PROCEDURE Click
SELECT (This.objGrid.RecordSource )
do case
case this.value=1
go top
case this.value=2
go bott
case this.value=3
IF !BOF()
SKIP -1
ENDIF
case this.value=4
IF !EOF()
SKIP
ENDIF
case this.value=5
This.objGrid.REfresh
endcase
This.objGrid.SetFocus
ENDPROC