软件注册站
热情软件屋

 
如何为vfp5加入一个scrollbar控制
编号: QA001204    
建立日期: 1999年6月19日 最后修改日期: 1999年6月19日
所属类别: FoxPro/Visual FoxPro - 数据控件
   
    vfp50
    win98
    我想在程序中使用滚动条,但不知道如何制作自己的滚动条(scrollbar)?(ganyanxin)
   
    首先进入vfp5/工具/选项/控件/ACTIVEX,加入MicroSoft Forms 2.0 Scrollbar 控件,并将它设置为默认值。按确定退出。
    下面的演示是在一个表单上加入两个scrollbar,并 加入一些按钮控件,其中一些故意设置在表单可视区外,当点选scrollbar时,改动这些控件的top、left等属性来移动这些控件,逐步使它们进入可视区,使之看上去如表单在滚动自己。
    新建一表单,属性采用预定义。点选表单控件工具栏/activex,此时在工具栏上应有一个提示为'Microsoft form 2.0 scrollbar'的快捷按钮,点选它至表单上,两次形成两个scrollbar控件。
    属性设置:
    scroll1 :orientation='2' name='scrollhoriz' largechange=100 smallchange=50
    
    scroll2: orientation='1' name='scrollvertical' largechange=100 smallchange=50
    
    largechange当用户直接拖动滑块时的滑动距离(根据实际需要调整,也可在表单的init事件中设置)
    smallchange当用户点键头或点空白处的滑动距离(根据实际需要调整)
    orientation为scrollbar是否为水平
    将表单最大化,放几个按钮在表单的右边和下方。另加
    几个按钮在表单运行时可见区域内,再将表单的windowstate设为普遍。(见附件scroll1)
    定义表单的resize方法:
    
    this.scrollhoriz.left=0
    this.scrollhoriz.top=this.height-15
    this.scrollhoriz.width=this.width-15
    
    this.scrollvertical.top=0
    this.scrollvertical.left=this.width-15
    this.scrollvertical.height=this.height-15
    
    this.refresh
    
    现在,为表单添加一个新的scroll方法(不能使用scroll命令)
    
    ***form.scroll
    
    LPARA lMoveStepX,lMoveStepY,nMoveStepLen
    ***lmovestepX、lmovestepy分别为当前是移动水平滚动条还是移动垂直滚动条的逻辑值,为真时移动
    ***nMoveSteplen表示移动的长度
    
    IF ALLT(TYPE('lMoveStepx'))+ALLT(TYPE('lMoveStepY'))+ALLT(TYPE('nMoveStepLen'))#'LLN' THEN
     MESSAGEBOX('参数类型出错!')
     RETURN .F.
    ENDIF
    
    FOR T=1 TO THIS.CONTROLCOUNT
     IF THIS.Controls[t].baseclass<>'Olecontrol' OR THIS.Controls[t].oleClass<>'Forms.scrollbar.1' THEN
     IF lMoveStepX THEN &&竖移
     THIS.Controls[t].top=this.Controls[t].top+nMoveStepLen
     ENDIF
     IF lMoveStepY THEN &&横移
     THIS.Controls[t].left=this.Controls[t].left+nMoveSteplen
     ENDIF
     ENDIF
    ENDFOR
    RETURN .T.
    
    现在为表单增添两个属性,scrollHvalue、scrollvvalue分别表示上一次移动后的滚动条value值,用来判别当前的移动方向.
    
    scroolbar有两个事件,change event和scroll event,发别在用户单击键头(空白区)和滑动块时激发。
    
    ***ScrollHoriz Change Event***
    IF THIS.OBJECT.VALUE     THISFORM.SCROLL(.F.,.T.,THIS.Smallchange) &&移动
    ENDIF
    IF THIS.OBJECT.VALUE>THISFORM.scrollhValue then
     THISFORM.SCROLL(.F.,.T.,THIS.Smallchange*-1) &&反向移动
    ENDIF
    THISFORM.scrollhValue=THIS.OBJECT.VALUE
    
    ***ScrollHoriz.Scroll Events***
    IF THIS.OBJECT.VALUE     THISFORM.SCROLL(.F.,.T.,THIS.largechange) &&移动
    ENDIF
    IF THIS.OBJECT.VALUE>THISFORM.scrollhValue then
     THISFORM.SCROLL(.F.,.T.,THIS.largechange*-1) &&反向移动
    ENDIF
    THISFORM.scrollhValue=THIS.OBJECT.VALUE
    按照以上两个事件定义scrollvertical的同样事件,将所有的'scrollhvalue'变为'scrollvvalue'、.f.,.t.交换即可.
    请注意scroll.object.value属性,它表示当前滚动块的位置值。以上程序尚需根据实际应用调整各项参数。
    运行时的效果分别见附件图scroll2、scroll3。
    
    

    

此问题由青熙回答。

附加关键字:编程, 源程序, programming, source code, FoxPro/Visual FoxPro, Foxbase, dBase, xbase, FoxPro, VFP, Visual FoxPro, 数据控件, data control

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio