打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Adding Checkbox to Grid header #VFP

* [Edited: modified version using ObjToClienT()]
* Source : Stefan Wuebbe – http://www.foxite.com/archives/0000331613.htm
LOCAL oForm as Form
oForm = CREATEOBJECT(‘TestForm’)
oForm.Show(1)
RETURN

DEFINE CLASS TestForm as Form
AutoCenter = .T.
Width = 500
Height = 600
MinWidth = 200
MinHeight = 100

PROCEDURE Load
CREATE CURSOR temp (f1 L, f2 L, f3 L, f4 C(30))
LOCAL i
FOR i = 1 TO 30
INSERT INTO temp VALUES (i%2=0, i%3=0, i%4=0, REPLICATE(TRANSFORM(i),10))
ENDFOR
GO TOP IN temp
ENDPROC

ADD OBJECT grdTest as Grid WITH ;
Left = 10, Top = 10, Width = 480, Height = 580, ;
DeleteMark = .F., RecordMark = .F., ;
Anchor = 15, RecordSource = ‘temp’
PROCEDURE grdTest.Init
STORE 75 TO This.Column1.Width, This.Column2.Width, This.Column3.Width

LOCAL loColumn as Column, loCheckbox as CheckBox
FOR EACH loColumn IN This.Columns
IF TYPE(‘EVALUATE(m.loColumn.ControlSource)’) = ‘L’

* Add Header CheckBox
*!* loColumn.Header1.Caption = “”
loColumn.AddProperty(‘myCheckbox’,SYS(2015))
Thisform.NewObject(m.loColumn.myCheckbox,’HeaderCheckbox’)
loCheckbox = GETPEM(Thisform,m.loColumn.myCheckbox)
loCheckbox.cColumnName = ‘Thisform.grdTest.’ + m.loColumn.Name
loCheckbox.AfterInit()
loCheckbox.Visible = .T.

* Add Column CheckBox
loColumn.AddObject(‘Check1′,’Checkbox’)
WITH loColumn.Check1 as CheckBox
.Caption = “”
.Visible = .T.
ENDWITH
loColumn.CurrentControl = ‘Check1′
loColumn.Sparse = .F.

ENDIF
NEXT
ENDPROC
ENDDEFINE

DEFINE CLASS HeaderCheckbox as Checkbox
Caption = “”
Value = .F.
Width = 15
cColumnName = “”

PROCEDURE AfterInit
LOCAL llSuccess, lcErrorMessage, ;
loColumn as Column, ;
loGrid as Grid, ;
loException as Exception
llSuccess = .T.
lcErrorMessage = “”
TRY
loColumn = EVALUATE(This.cColumnName)
loGrid = m.loColumn.Parent
FOR EACH loColumn IN m.loGrid.Columns
BINDEVENT(m.loColumn,’Resize’, This,’AutoPos’)
BINDEVENT(m.loColumn,’Moved’, This,’AutoPos’)
BINDEVENT(m.loColumn.Header1,’Click’, This,’AutoPos’)
BINDEVENT(m.loColumn.Header1,’MouseDown’, This,’AutoPos’)
BINDEVENT(m.loColumn.Parent,’Scrolled’, This,’AutoPos’)
NEXT
CATCH TO loException
llSuccess = .F.
lcErrorMessage = m.loException.Message
ENDTRY
ASSERT m.llSuccess MESSAGE m.lcErrorMessage

IF m.llSuccess
BINDEVENT(Thisform,’Resize’, This,’AutoPos’)
This.AutoPos()
ENDIF
ENDPROC

PROCEDURE AutoPos(dummy1, dummy2, dummy3, dummy3) && dummies for BindEvent(“MouseDown”/”Scrolled”)

LOCAL ;
llSuccess, lcErrorMessage, ;
loColumn as Column, loGrid as Grid, ;
lnTop, lnLeft, ;
loException as Exception
llSuccess = .T.
lcErrorMessage = “”
TRY
loColumn = EVALUATE(This.cColumnName)
loGrid = m.loColumn.Parent
lnTop = m.loGrid.Top + 2
lnLeft = OBJTOCLIENT(m.loColumn, 2)
IF m.lnLeft > 10
lnLeft = m.lnLeft + m.loColumn.WidthThis.Width*2
ENDIF

IF BETWEEN(m.lnLeft, 11,m.loGrid.Width – SYSMETRIC(5))
This.Visible = .T.
This.Move(m.lnLeft,m.lnTop)
ELSE
This.Visible = .F.
ENDIF
CATCH TO loException
llSuccess = .F.
lcErrorMessage = m.loException.Message
ENDTRY
ASSERT m.llSuccess MESSAGE m.lcErrorMessage
ENDPROC

PROCEDURE Valid
LOCAL loColumn as Column, lcAlias, lnRecNo
loColumn = EVALUATE(This.cColumnName)
lcAlias = GETWORDNUM(m.loColumn.ControlSource,1,’.’)
lnRecNo = RECNO(m.lcAlias)
REPLACE (m.loColumn.ControlSource) WITH This.Value ALL IN (m.lcAlias)
GO RECORD (m.lnRecno) IN (m.lcAlias)

Thisform.SetAll(‘lAutoPos’,.T.)
ENDPROC

PROCEDURE Destroy
UNBINDEVENTS(This)
ENDPROC

lAutoPos = .F.
PROCEDURE lAutoPos_assign(tlNewVal)
IF m.tlNewVal
This.AutoPos()
ENDIF
ENDPROC
ENDDEFINE

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VFP 主表单代码
TEST Training
如何获取datagridview中checkbox控件选中的多行数据?
Jquery为单选框checkbox绑定单击事件
Flutter组件精讲【78】复选框CheckBox
[html] 第112天 你知道checkbox有几种状态吗?它们分别用来表示什么?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服