荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店