荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: huanghm (东方不败), 信区: Program
标 题: 在VFP中实现命令控件的动态变化
发信站: BBS 荔园晨风站 (Tue Jun 2 05:30:30 1998), 转信
在目前许多CAI教学软件中,多采用变化的动态界面
,即当鼠标指针指到某一项时,该项就发生变化(如字体
、大小、颜色等),为用户提供了较为轻松的操作界面。V
isual FoxPro中也能实现上述功能,用键盘操作时,我们
可以利用每个对象的GetFocus事件和LostFocus事件,当
对象发生GetFocus事件时,我们可改变对象的height、wid
th、forecolor、fontsize等属性值,使其大小、颜色、
字体等发生变化;当发生LostFocus事件时通过恢复其属性
值再使其还原。用鼠标操作时,我们可在MouseMove事件
采用类似方法,当鼠标移到对象上时对象大小、颜色、字
体发生变化。但是VFP没有为对象提供鼠标离开时的事件,
因此我们需要为对象新增一个鼠标离开对象时发生的事件
,恢复在MouseMove事件中改变的属性。
笔者设计了一个能使Command控件具有上述功能的类
。具体制作过程如下:
首先制作命令控件类
在命令窗输入命令:create class changecommand
在“新类”窗体中选择其基类为“commandbutton”
并选定要存贮的文件名。
在该类Init事件中写入以下代码:
public pnCommandWidth
pnCommandWidth=this.width &&保存命令控件的
初始宽度
在Gotfocus事件中写入以下代码:
*对象得到焦点时发生变化(针对键盘操作)
if this.width=pnCommandWidth &&当前宽度和初
始宽度比较
为对象设置新属性值即命令控件变化后的值
this.height=this.height+20
this.width=this.width+20
this.left=this.left-10
this.top=this.top-10
this.fontsize=this.fontsize+5
this.fontbold=.t.
this.forecolor=rgb(0,0,255)
this.fontname=′隶书′
this.parent.commandchange=.t.
&&commandchange属性为表单类的新增属性用来检
测命令控件是否发生变化
endif
在Lostfocus事件中写入以下代码:
对象失去焦点时发生变化(针对键盘操作)
if this.width<>pnCommandWidth
对象属性值还原
this.height=this.height-20
this.width=this.width-20
this.left=this.left+10
this.top=this.top+10
this.fontsize=this.fontsize-5
this.fontbold=.f.
this.fontitalic=.f.
this.fontoutline=.f.
this.forecolor=rgb(0,0,0)
this.fontname=′宋体′
this.parent.commandchange=.f.
endif
在MouseMove事件中写入以下代码:
鼠标指针移动到对象上时发生变化
LPARAMETERS nButton, nShift, nXCoord, nYCoord
if this.width=pnCommandWidth
this.height=this.height+20
this.width=this.width+20
this.left=this.left-10
this.top=this.top-10
this.fontsize=this.fontsize+5
this.fontbold=.t.
this.forecolor=rgb(0,0,255)
this.fontname=′隶书′
this.parent.commandchange=.t.
endi
制作表单类
在命令窗输入命令:create class changeform
在“新类”窗体中选择其基类为“form”并选定要存
贮的文件名。为该类增添一新属性:“commandchange”
(用来检测命令控件是否发生变化)和一个新方法:
“MouseLeave”(该方法使鼠标指针离开表单上comma
nd控件时,command控件还原)
在该类Init事件中写入以下代码:
统计command控件个数
public pnCommandCount
local lnI
pnCommandCount=0
for lnI=1 to thisform.Controlcount
if thisform.controls(lnI).class=′Changecomm
and′
pnCommandcount=PncommandCount+1
endi
endfor
在该类MouseMove 事件中写入以下代码:
LPARAMETERS nButton, nShift, nXCoord, nYCoord
if thisform.commandchange &&如果该表单中
有command控件发生变化,则调用MouseLeave方法使其还原
)
thisform.Mouseleave()
endi
在该类新增的MouseLeave事件中写入以下代码:
local I,lnJ
for lnJ=1 to pnCommandCount
I=allt(str(lnJ))
if thisform.changecommand&I..width<>pnComma
ndWidth
&&如果该command控件发生变化则其还原
thisform.changecommand&I..height=thisform.
changecommand&I..height-20
thisform.changecommand&I..width=thisform.c
hangecommand&I..width-20
thisform.changecommand&I..left=thisform.ch
angecommand&I..left+10
thisform.changecommand&I..top=thisform.cha
ngecommand&I..top+10
thisform.changecommand&I..fontsize=thisfor
m.changecommand&I..fontsize-5
thisform.changecommand&I..fontbold=.f.
thisform.changecommand&I..fontitalic=.f.
thisform.changecommand&I..fontoutline=.f.
thisform.changecommand&I..forecolor=rgb(0,
0,0)
thisform.changecommand&I..fontname=′宋体
′
thisform.commandchange=.f.
endi
endfor
该类在应用过程中要注意以下几点:
1.在form上添加command控件时,所有commnd控件大
小要一样。
2. form上添加的command控件间的距离不能太近。
以上方法也可以运用到CommandGroup、OptionButton
、OptionGroup、Toolbar等控件类的动态变化制作。
--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.25]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店