[返回]
中国计算机报1999年第47期

PB中窗口自动居中

李 晶

  在新推出的PowerBuilder 6.0 中,可以直接在数据窗口对象中放置按钮对象,而且开发人员即可以给这些按钮制定缺省的操作,也可以自己定义按钮的功能。在数据窗口需要相应的按钮时,只需要加入按钮对象然后指定其功能就行了。

  上述做法对于少量的数据窗口而言是合适的,但如果要对大量的数据窗口都采用这种方法添加按钮,其工作量是非常可观的,而且还不能保证界面的一致性。实际上我们可以利用PowerBuilder面向对象的编程技术,实现一个包含标准操作按钮的数据窗口对象,这样在需要用到标准操作的时候,只需要从该对象继承即可。下面具体给出该对象的实现方法:

  由于在用户对象画板中不能直接往数据窗口中添加按钮,因此,需要用改变数据窗口语法串的方法来添加按钮,我们用一个专用的函数来实现这一功能。首先,建立一个新的全局函数,取名为f—AddDWButton,它带有一个字符串参数as—oldsyntax,其返回值为一字符串,下面是其实现代码:

  //功能:修改数据窗口语法串,为其增加常用功能按钮

  //入口参数:as—oldsyntax 原有数据窗口语法串

  //返回值: ls—NewSyntax 修改后的语法串

  //应用条件:数据窗口中有Footer区, 高度为88的区域是按钮带区

  String ls—AddString, ls—NewSyntax

  ls—NewSyntax = as—oldsyntax

  //添加按钮语法串

  //检索按钮

  ls—AddString =′button(name=cb—retrieve band=footer′+ &

   ′font.charset="0" font.face="Arial" ′ + &

   ′font.family="2" font.height="-9" font.pitch="2" font.weight="400" ′ + &

   ′background.mode="2" background.color="12639424" ′ +&

   ′filename="" action="2" vtextalign="0" htextalign="0" ′ +&

   ′x="14" y="4" height="80" width="292" color="8388608" ′ +&

   ′text="检索" defaultpicture=no suppresseventprocessing=no )~r~n′

  ls—NewSyntax=ls—NewSyntax+ls—AddString

  //首页按钮

  ls—AddString = ′button(name=cb—top band=footer ′ + &

   ′font.charset="0" font.face="Arial" font.family="2" ′ + &

   ′font.height="-9" font.pitch="2" font.weight="400" ′ + &

   ′background.mode="2" background.color="12639424" ′ + &

   ′filename="" action="6" vtextalign="0" htextalign="0" ′ + &

   ′x="333" y="4" height="80" width="146" color="8388608" ′ + &

   ′text="首页" defaultpicture=no suppresseventprocessing=no )~r~n′

  ls—NewSyntax = ls—NewSyntax + ls—AddString

  //上页按钮

  ls—AddString = ′button(name=cb—prior band=footer ′ + &

   ′font.charset="0" font.face="Arial" font.family="2" ′ + &

   ′font.height="-9" font.pitch="2" font.weight="400" ′ + &

   ′background.mode="2" background.color="12639424" ′ + &

   ′filename="" action="5" vtextalign="0" htextalign="0" ′ + &

   ′x="484" y="4" height="80" width="146" color="8388608" ′ + &

   ′text="上页" defaultpicture=no suppresseventprocessing=no )~r~n′

  ls—NewSyntax = ls—NewSyntax + ls—AddString

  ……

  //添加按钮

  ls—AddString = ′button(name=cb—append band=footer ′ + &

   ′font.charset="0" font.face="Arial" font.family="2" ′ + &

   ′font.height="-9" font.pitch="2" font.weight="400" ′ + &

   ′background.mode="2" background.color="12639424" ′ + &

   ′filename="" action="11" vtextalign="0" htextalign="0" ′ + &

   ′x="964" y="4" height="80" width="146" color="8388608" ′ + &

   ′text="添加" defaultpicture=no suppresseventprocessing=no )~r~n′

  ls—NewSyntax = ls—NewSyntax + ls—AddString

  //保存按钮

  ls—AddString = ′button(name=cb—update band=footer ′ + &

   ′font.charset="0" font.face="Arial" font.family="2" ′ + &

   ′font.height="-9" font.pitch="2" font.weight="400" ′ + &

   ′background.mode="2" background.color="12639424" ′ + &

   ′filename="" action="13" vtextalign="0" htextalign="0" ′ + &

   ′x="1266" y="4" height="80" width="146" color="8388608" ′ + &

   ′text="保存" defaultpicture=no suppresseventprocessing=no )~r~n′

  ls—NewSyntax = ls—NewSyntax + ls—AddString

  ls—NewSyntax = ls—NewSyntax + ls—AddString

  return ls—newsyntax

  有了上述函数之后,第二步就可以做数据窗口了:建立一个标准的可视用户对象,该对象类型为datawindow,取名为:u—dw—toolbutton,然后在该用户对象的constructor事件中添加如下代码:

  //建立数据窗口按钮

  String ls—Syntax

  //获取设计时的数据窗口语法串

  ls—Syntax =

  String( this.object.DataWindow.Syntax )

  //添加按钮语法串

  ls—Syntax = f—AddDWButton( ls—Syntax )

  if this.Create( ls—Syntax ) <> 1 then

   Error.object = this.ClassName()

   Error.ObjectEvent = "Create DataWindow from Syntax"

   Error.Line = 6

   Error.Number = SQLCA.SQLDBCode

   Error.text = SQLCA.SQLErrText

   //Display error

   Open( w—error )

  End If

  将上述工作保存后,就万事大吉了。以后只需要从u—dw—toolbutton对象继承就可以拥有标准操作按钮了(注意:在数据窗口中要有Footer区,且该区高度要大于80PBU)。

  从上面的例子中我们可以看到,PowerBuider不仅有许多封装好的高级控件,同时还具有强大的程序语言设计能力,在数据库的开发工具中,能将两者结合得如此完美的,尚不多见。