| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> pb >> 编程技巧 >> 文章正文
PB编程技巧实例            【字体:
PB编程技巧实例
作者:-    文章来源:-    点击数:    更新时间:2007-1-19

随着数据库技术在各行各业的广泛应用,作为企业级数据库前端开发工具的Power Builder日益成为开发人员的得力助手。PowerBuilder以其开放的体系结构,友好的用户界面和简洁高效的开发环境赢得了众多程序员的喜爱,连续多年被评为美国计算机界的年度风云产品,在数据库开发工具领域占据了高达44%的市场份额。PowerBuilder进入我国的时间不长,许多编程人员希望了解并掌握这一先进工具。在这里,笔者将自己平日用PowerBuilder作开发的一些体会整理出来,奉献给大家。
PowerBuilder是由多个功能模块组成的可视化集成开发环境,是面向对象的开发工具,用它可以方便地建立起基于Windows的分布式数据库应用。其功能模块分别完成应用管理、窗口对象设计、菜单对象设计、数据窗对象设计和数据库查询等工作,这些功能模块由于PowerBuilder提供的色彩丰富的工具条而被称作"Painter"(画板)。下文便依据各模块作大的分类介绍相应的编程技巧。

一、有关应用的编程技巧仅让应用程序运行一次的技巧:

 有时需要限制一个PowerBuilder应用同时运行的实例(Instance)个数或仅让应用运行一次,我们可以通过调用WindowsSDK函数或使用PowerBuilder的Handle()函数来实现。
   先谈调用SDK函数的方法。为了调用SDK函数,需要在ApplicationPainter的菜单项Declare\GlobalExternalFunctions中定义:
   FunctionuintGetModuleHandle(stringModuleName)Library"Kernel.exe" FunctionuintGetModuleUsage(uintModuleHandle)Library"Kernel.exe"

下面这段程序写在Application的Open事件中。它先通过调用SDK函数GetModuleHandle()获得指定应用程序的句柄,然后调用GetModuleUsage()函数确定应用程序同时运行的实例个数。
uint IApplHandle
int App_num
IApplHandle=GetModuleHandle("ocmis.exe")
if IApplHandle>0 then
   App_num=GetModuleUsage(IApplHandle)
   if App_num>1 then
      Messagebox("注意","本程序已经运行!",Stopsign!)
      return
   endif
endif
Open(w_main)
  若需要限制应用同时运行的实例个数,比如仅允许同时运行N个实例,那么将上述程序中的语句 “if App_num>1 then”改为“if App_num>N then”即可。
  采用Handle()函数的方法更简洁一些,代码如下:
 int hand
 hand=Handle(this,TRUE)
 If hand>0 then
   Messagebox("注意","本程序已经运行!",Stopsign!)
   Halt
 else
 Open(w_main)
endif

 二、有关窗口的编程技巧

1、提供实时帮助条

中文之星2.0版的链形菜单管理器提供了实时帮助条,增强了系统的易用性,在PowerBuilder中也可以实现类似的功能。当鼠标移动到窗口中的某些控制(Control),如编辑器、图片等时,会在鼠标附近自动产生帮助条,实时地提示操作要领。

首先在窗口w_main中任意位置定义一个黄底黑字的静态文本st_help,设定st_help.visible=false,st_help.text=&Help;然后在该窗口模块的Declare\WindowFunctions...下定义函数show_help(),其参数只有一个,参数名为text,类型为string,通过传值方式接收参数;无返值。show_help()代码如下:
 if st_help.visible then
   return
endif
 st_help.text=text
 st_help.width=Len(st_help.text)*38
 st_help.x=w_main.PointerX()
 st_help.y=w_main.PointerY()+50
 if st_help.x+st_help.width>w_main.Workspacewidth() then
    st_help.x=w_main.Workspacewidth()-st_help.width
 endif
 if st_help.y+st_help.height>w_main.Workspaceheight()
   then st_help.y=w_main.Workspaceheight()-st_help.height
 endif
 st_help.visible=true
 接下来,我们就可以调用show_help()函数了。但PowerBuilder提供的所有控制均缺乏当鼠标移至其上就触发的事件,显然,需要定义相应的用户事件。先选中准备定义用户事件的控制,如某个单行编辑器,然后在窗口模块的菜单Declare\UserEvents...下,双击PasteEventID:中的pbm_mousemove条目,将其拷贝至EventID下,取EventName为Mouseon,这样,我们就定义好了相应控制的用户事件Mouseon。我们可以在该控制的用户事件Mouseon下,写下调用函数show_help()的语句:
   if st_help.visible then
      Hide(st_help)
      show_help("瞧!这便是实时帮助条!")
   endif

[1] [2] [3] [4] [5] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 制作中国式报表(二)

  • 制作中国式报表(一)

  • PB中隐藏下拉数据窗的检索参…

  • 在PB中巧用下拉数据窗口

  • PowerBuilder中数据窗口使用…

  • DataWindow的数据缓冲区

  • 利用PowerBuilder开发格式生…

  • 用DataWindow实现对多表的修…

  • 不安装Oracle数据库的连接方…

  • 如何恢复SybaseSQLAnywhere的…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |