pb资料

getobjectAtPointer()

 

 


  动态创建数据窗口 收藏
 
在实际应用中,经常需要根据用户需求来动态创建数据窗,一般方法是这样的。

  在一个window中加入一个数据窗控件,如dw_new,但是该数据窗没有data object,(空白的)就可以用以下语法来创建:

  dw_new.create(ls_syntax,ls_error) // 创建语法,错误信息

  ls_syntax可以用以下三种方法来形成:

 

  一、动态由sql语法创建:

  // 连接到pb的example数据库

  string ls_sql,ls_syntax,ls_error

  ls_syntax = 'select * from department'

  ls_syntax = sqlca.SyntaxFromSQL(ls_sql,'style(type=grid)',ls_error)

  if len(ls_error) >0 then

   messagebox('Error','SyntaxFromSQL Error:~r'+ls_error)

  else

   dw_new.create(ls_syntax,ls_error)

   if len(ls_error) >0 then

    MessageBox("Error", "Create have these errors: ~r" + ls_error)

   else

    dw_new.settransobject(sqlca)

    dw_new.retrieve()

   end if

  end if

 

  二、由另一个数据窗的syntax来创建

  string ls_syntax,ls_error

  ls_syntax = dw_test.describe('datawindow.syntax')

  dw_new.create(ls_syntax,ls_error)

  if ls_error <> '' then

   messagebox('Create Error',ls_error)

  else

   dw_new.settransobject(sqlca)

   dw_new.retrieve()

  end if

 

  三、读取psr文件来创建

  string ls_syntax,ls_error,ls_ret

  ls_ret = char(13)+char(10) //回车键

  int li_fileNum

  long li_length

  li_FileNum = FileOpen("efef.psr",Streammode!, read!, shared!, Replace!)

 

  if li_filenum >0 then

   FileSeek(li_FileNum, 158, FromBeginning!)

   li_length = fileRead(li_filenum,ls_syntax)

  end if

  fileclose(li_filenum)

  if li_length = 0 then return

  ls_syntax = "release 5;"+ls_ret+ls_syntax

 

  //截掉ls_syntax中的数据部分,5.0以"sparse(names="dept_name?) "作为参考位置

  //6.0以html(作为参考位置

  long pos1,pos2

  pos1 = pos(ls_syntax,'sparse(names="',1)

  pos2 = pos(ls_syntax,'"',pos1 +16)

  ls_syntax = left(ls_syntax,pos1) + mid(ls_syntax,pos1 +1,pos2 - pos1 +1)

  dw_New.create(ls_syntax,ls_error)

  if ls_error <> '' then

   messagebox('Create Error',ls_error)

  else

   dw_new.settransobject(sqlca)

   dw_new.retrieve()

  end if

  //pb6,pb7的代码可以参照pb5自己写,只是文件头和数据窗结束标记不同而已。

 

  PowerBuilder用Create()函数创建动态数据窗口,其语法格式为:dw.Create(Syntax[,ErrString])

  其中:dw为需创建的动态数据窗口名;Syntax为创建动态数据窗口的语法字符串;ErrString为可选参数,用来存放发生错误时的错误信息,若忽

略,发生错误时系统自动显示消息框,一般不符我们需要,所以需定义该参数。

 

  显然重点在Syntax, PowerBuilder提供LibraryExport()与SyntaxFromSQL()二个函数来达到这个目的:

 

  一、 LibraryExport()函数

  功能:从PowerBuilder库中输出一个对象,返回该对象的语法。

  语法格式:LibraryExport(LibName,ObjName,ObjType)

  其中:LibName 为带路径的PowerBuilder库名,若未指定路径,则按系统标准搜索路径搜索;ObjName为导出对象名,现为LibName中的数据窗口

对象名;ObjType为该对象的类型,现为数据窗口,值为ExportDataWindow!。示例如下:

  String ls_DwSyntax,ls_Error

  ls_DwSyntax=LibraryExport("C:/PBExam/dy_dw.pbl","d_tbl1", ExportDataWindow!)

  //数据窗口dw_1的产生下面将详细讨论,现暂略

  dw_1.Create(ls_DwSyntax,ls_Error)

  //以下语句与下面示例中的相同,故此处略。

  LibraryExport()函数是利用已有的数据窗口对象创建动态数据窗口,有一定的使用价值,但不多见。

 

  二、 SyntaxFromSQL()函数

  功能:基于SQL的SELECT 语句产生创建数据窗口的语法。

  语法格式:Transaction.SyntaxFromSQL(SqlString,StyleString,ErrorString)

  其中:Transaction.为已连接的事务对象,一般即为SQLCA;SqlString为SQL--SELECT 语句;Stylestring为数据窗口的显示风格字符串,比较复

杂,一般常用"Style(Type=Grid)";ErrorString用来存放发生错误时的错误信息。

  一般来说,SyntaxFromSQL()函数灵活性高、功能强,因此创建动态数据窗口大都使用该函数,下面的示例也是使用该函数。

 

  三、创建动态数据窗口的一般步骤

  创建动态数据窗口的一般步骤如下:

  1、在某窗口(如w_main)上用鼠标点建一个数据窗口控件(如dw_1),其DataObject为空。

  2、构造SyntaxFromSQL()函数的语法字符串。这是PowerBuilder动态数据窗口的关键,稍为复杂一些,具体做法请见下面实例。

  3、用Create()函数创建动态数据窗口dw_1,并用SetTransObject()函数为其分配事务对象,具体做法请见下面实例。

  这种方法的主要缺点是必须在设计阶段先建数据窗口控件,运行时无法增减,这对于一些较为特殊的应用(如设计阶段尚不知需几个数据窗口)

就不太适合了。那如何解决这个问题呢?经过一番摸索并查阅了一些资料,终于找到了二种解决方法,现分别介绍如下:  1、创建一个标准可视数据窗口用户对象u_d_sample

  PowerBuilder6.0/6.5中步骤为:点击工具栏上的UserObject图标,在弹出的Select User Object窗口中点击New按钮,出现New User Object窗口,双击其中Visual下的Standard图标, 在弹出的Select Standard Visual Type窗口中双击datawindow选项,即出现User Object(Untitled)窗口,点击工具栏上的Save图标,弹出的Save User Object窗口,在User Objects: 中输入u_d_sample回车即进入User Object---u_d_sample窗口,关闭该窗口,标准可视数据窗口用户对象u_d_sample即告建成。

 

  PowerBuilder7.0中步骤为:点击工具栏上的New图标,在弹出的New窗口中选择Object页面,双击其中的Standard Visual图标, 在弹出的Select Standard Visual Type窗口中双击datawindow选项,出现User Object(Untitled)inherited from datawindow窗口,将其右边的Title栏中的none删除,再点击左边空白区,然后点击工具栏上的Save图标,以后的操作步骤与PowerBuilder6.0/6.5大致相同。至于PowerBuilder8.0则与PowerBuilder7.0大体相同,不再赘述。

 

  2、直接定义DataWindow型变量dw_1如下:

  DataWindow dw_1

  dw_1=Create DataWindow

  其实第1种方法还须定义dw_1,形式如下:

  u_d_sample dw_1

  dw_1=Create u_d_ sample //此句可省略

  这二种方法的关键都是使用OpenUserObject()函数,其功能即为打开一个用户对象,语法格式:w_name.OpenUserObject(ObjName[,x,y]) 其中ObjName为需打开的用户对象名;x、y为用户对象的打开位置,省略时值均为0。

  下面请见具体实例, 该实例在Win98、PowerBuilder8.0/PowerBuilder7.0/PowerBuilder6.5下通过,ODBC数据源已配置,为FoxPro25(可根据需要使用其他数据库),数据表为bb.dbf。请先建窗口w_main,在其Open事件中写入以下代码:(注意:PowerBuilder8.0中先须创建WorkSpace(*.pbw),其他操作基本同PowerBuilder7.0)

 

  //动态数据窗口dw_1创建实例

  string lserr,lsSQLstr,lsDWsyntax,lserrC

  SQLCA.DBMS="ODBC"

  SQLCA.DBParm="ConnectString='DSN=FoxPro25'" //本例使用FoxPro25数据库,可根据需要用其他数据库

  Connect;

  //下面3条语句即为关键,若dw_1为鼠标点建请删除这3条语句,否则会出错。

  DataWindow dw_1 //若采用数据窗口用户对象u_d_sample,则可改为:u_d_sample dw_1

  dw_1=Create DataWindow //若采用数据窗口用户对象u_d_sample,此句应去除。

  OpenUserObject(dw_1)

  //Select…As…的As可将列标题显示为As之后的字符,较为灵活方便。

  //可根据实际情况设计生成Select语句及Where子句的可视化界面

  lsSQLstr="Select A12 As 主管部门,A01 As 法人代码,mc As 企业名称,A06 From bb Where A12<'1'"

  lsDwsyntax=SQLCA.SyntaxFromSQL(lsSQLstr,"style(type=Grid)",lserr) //构造SyntaxFromSQL()函数

  If Len(lserr)>0 Then

   //如果构造SyntaxFromSQL()函数失败,则显示错误信息并退出

   messagebox("错误信息!",lserr)

   Return

  end if

  dw_1.Create(lsDwsyntax,lserrC) //创建动态数据窗口dw_1

  If Len(lserrC)>0 Then

   //如果创建动态数据窗口dw_1失败,则显示错误信息并退出

   messagebox("错误信息!",lserrC)

   Return

  end if

  //以下设置dw_1的一些属性,可根据实际需要设置。

  dw_1.X=5

  dw_1.Y=5

  dw_1.width=1500

  dw_1.height=650

  dw_1.Visible=True

  dw_1.Enabled=True

  dw_1.HScrollBar=True

  dw_1.VScrollBar=True

  //为dw_1分配事务对象SQLCA

  dw_1.SetTransObject(SQLCA)

  //提取数据

  dw_1.Retrieve()

 

  第2种方法的优点大家一看即知,不必费劲去创建一个标准可视数据窗口用户对象,但存在不足之处:不能在窗口w_main的其他事件或控件中引用dw_1。解决方法很简单:将dw_1定义为实例变量(Instance Variable)。PowerBuilder6.0/6.5中:在窗口画笔(w_main)的菜单上点击Declareà Instance Variables…,在弹出窗口Declare Instance Variables中输入datawindow dw_1, 点击Ok按钮即告完成。PowerBuilder7.0/8.0中:打开窗口画笔,在其下半部的窗口Declare Instance Variables中输入datawindow dw_1, 点击工具栏上的Save

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yishanhai/archive/2008/11/14/3294372.aspx

 

PB_EventID 详情

单选或多选按钮消息(前缀:pbm_bm)
pbm_bmgetcheck 单选按钮或多选按钮是否被选。
pbm_bmgetstate 按钮是否加亮。
pbm_bmsetcheck 将无线按钮或确认框的选中状态改为未选中状态,反之亦然。
pbm_bmsetstate 加亮或不加亮按钮。
pbm_bmchange 改变按钮的风格,例如,改为单选按钮或组合框。
单选或多选按钮通知消息(前缀:pbm_bn)
pbm_bnclicked 按钮控件被点中。
pbm_bndisable 使按钮控件无效。
pbm_bndoubleclicked 按钮控件被双点。
pbm_bndragdrop 一个对象被放到按钮控件。
pbm_bndragenter 一个对象被拖到按钮控件。
pbm_bndragleave 一个对象被拖离按钮控件。
pbm_bndragover 一个对象被拖经按钮控件。
pbm_bnhilite 按钮控件被加亮。
pbm_bnpaint 按钮控件被绘制。
pbm_bnsetfocus 按钮控件获得聚焦。
pbm_bnunhilite 按钮控件不被加亮。
通用对话框消息(前缀:pbm_cb)
pbm_cbaddstring 将字符串加到通用对话框。
pbm_cbdeletestring 从通用对话框删除一个字符串。
pbm_cbdir 加一个目录列表到通用对话框。
pbm_cbfindstring 搜索以一组字符开头的字符串。
pbm_cbfindstringexact 搜索与所提供的字符完全匹配的字符串。
pbm_cbgetcount 列表框中的项数。
pbm_cbgetcursel 当前被选项的数目。
pbm_cbgetdroppedcontrolset 列表框在屏幕上的坐标位置。
pbm_cbgeteditsel 编辑器控件中被选字符的范围。
pbm_cbgetextendedui 缺省或扩展的用户界面。
pbm_cbgetitemdata 重画的列表框中的4字节(32位)项。
pbm_cbgetitemheight 列表框中某一项的高度。
pbm_cbgetlbtext 列表框中的文本。
pbm_cbgetlbtextlen 列表框中文本的长度。
pbm_cbinsertstring 向列表框中增加新的字符串或4字节项。
pbm_cblimittext 限制能被输入到列表框中的字符数。
pbm_cbresetcontent 删除列表框中所有元素。
pbm_cbselectstring 搜索匹配的字符串并显示。
pbm_cbsetcursel 在列表框中选择并显示一项。
pbm_cbseteditsel 在列表框的编辑区域中选择一块文本。
pbm_cbsetextendedui 设置缺省或扩展的用户界面。
pbm_cbsetitemdata 在列表框中设定4字节(32位)项。
pbm_cbsetitemheight 设置列表框中项的高度。
pbm_cbshowdropdown 转换(显示或隐藏)列表框中拖放区域。
通用对话框通知消息(前缀:pbm_cbn)
pbm_cbndblclk 用户在列表中某一项上双点。
pbm_cbndragdrop 一个对象被放到通用对话框控件上。
pbm_cbndragenter 一个对象被拖到通用对话框控件上。
pbm_cbndragleave 一个对象被拖离通用对话框控件。
pbm_cbndragover 一个对象被拖经通用对话框控件。
pbm_cbndropdown 列表框的下放区域即将被显示。
pbm_cbneditchange 编辑器控件中的文本发生变化。
pbm_cbneditupdate 列表框编辑器控件中的文本即将被改变。
pbm_cbnerrspace 列表框满,不能再向其中加入项。
pbm_cbnkillfocus 通用列表框失去聚焦。
pbm_cbnselchange 列表框中被选文本被改变。
pbm_cbnselendcancel 用户按下了"取消"按钮。
pbm_cbnselendok 用户按下了"确认"按钮。
pbm_cbnsetfocus 通用对话控件拥有聚焦。
数据窗口消息(前缀:pbm_dw)
pbm_dwclosedropdown 关闭下拉式数据窗口。
pbm_dwscrollend 在数据窗口中卷滚到最后一行。
pbm_dwscrollhome 在数据窗口中卷滚到第一行。
pbm_dwscrolllineend 卷滚到当前行的行尾(水平方向)。
pbm_dwscrolllinehome 卷滚到当前行的行首(水平方向)。
数据窗口通知消息(前缀:pbm_dwn)
pbm_dwnbacktabout 即将通过Shift+Tab组合键离开该控件。
pbm_dwnchanging 控件即将被改变。
pbm_dwndropdown 下拉式列表框的下拉部分即将可见。
pbm_dwngraphcreate 即将创建图形。
pbm_dwnitemchangefocus 数据窗口控件中当前项的聚焦改变。
pbm_dwnitemvalidationerror 对当前项的修改引起了一个合法性检查错误。
pbm_dwnkey 有键被按下。使用KeyDown()处理键盘值。
pbm_dwnlbuttondown 鼠标左键被按下。
pbm_dwnlbuttonup 鼠标左键被松开。
pbm_dwnmbuttonclk 鼠标中键点击。
pbm_dwnmbuttondbclk 鼠标中键双击。
pbm_dwnmousemove 鼠标移动。
pbm_dwnprintmarginchange 打印边界被改变。
pbm_dwnprocessenter 回车键被按下。
pbm_dwnrowchange 数据窗口中聚焦从一行转向另一行。
pbm_dwntabdownout 用户在数据窗口最后一行按了下箭头键。
pbm_dwntabout 用户在数据窗口的最后一行/列中按了tab键。
pbm_dwntabupout 用户在数据窗口第一行中按了上箭头键。
动态数据交换(DDE)消息(前缀:pbm_dde)
pbm_ddeddeack 收到一个DDE消息。
pbm_ddeddeinitiate 开始一个DDE会话。
pbm_ddeddeterminate 终止一个DDE会话。
编辑器控件消息(前缀:pbm_em)
pbm_emcanundo 编辑器控件是否能撤消上一次修改。
pbm_ememptyundobuffer 清空由Windows管理的取消操作的缓冲区。
pbm_emfmtlines 在多行编辑器控件的行尾增加或删除回车换行。
pbm_emgetfirstvisibleline 返回编辑器控件中可见的第一行的行号。
pbm_emgethandle 获得编辑器控件使用的内存句柄。
pbm_emgetline 从编辑器控件中复制一行到内存中的一个缓冲区。
pbm_emgetlinecount 返回多行编辑器控件的行数。
pbm_emgetmodify 文本是否被用户修改。
pbm_emgetrect 返回控件的长方形域。
pbm_emgetsel 返回被选文本的起始位置。
pbm_emlimittext 限制用户键入的文本长度。
pbm_emlinefromchar 返回被选文本的行号。
pbm_emlineindex 返回编辑器控件中被选行第一个字符在编辑串中的位置。
pbm_emlinelength 返回编辑器控件中被选行中的字符数。
pbm_emlinescroll 水平或垂直卷滚编辑器控件。
pbm_emreplacesel 从剪贴板或从键盘上用新文本替换被选文本。
pbm_emsethandle 设置编辑器控件的句柄指向内存中的一个缓冲区。
pbm_emsetmodify 设置编辑器控件的modified标志。
pbm_emsetpasswordchar 设置用户输入任何文本时显示的字符,在输入密码时的显示。
pbm_emsetrect 设置/重置编辑器控件所在的长方形区域,编辑器控件中的文本被重画。
pbm_emsetrectnp 除了不重画文本,大致与setrect相同。
pbm_emsetsel 选择字符。
pbm_emsettabstops 在多行编辑器控件中设置tabstops。
pbm_emsetwordbreak 设置新的词拆分函数。
pbm_emsetwordbreakproc 设置新的词拆分过程。
pbm_emundo 撤消最近的编辑操作。
编辑控件通知消息(前缀:pbm_en)
pbm_enchange 编辑器控件中的文本发生改变。
pbm_enerrspace 编辑器控件内存缓冲区溢出。
pbm_enhscroll 用户点中上水平卷滚条。
pbm_enmaxtext 用户试图输入比允许更多的文本。
pbm_enupdate 编辑器控件即将显示用户的修改。
pbm_envscroll 用户点中了垂直卷滚条。
列表框消息(前缀:pbm_lb)
pbm_lbaddstring 向列表框控件中增加一项或一个字符串。
pbm_lbdeletestring 从列表框中删除一项或一个字符串。
pbm_lbdir 用目录列表填充列表框。
pbm_lbfindstring 在列表框中搜索与所给字符串部分匹配的第一项。
pbm_lbfindstringexact 在列表框中搜索与所给字符串精确匹配的第一项。
pbm_lbgetcaretindex 在列表框中搜索拥有聚焦的项。
pbm_lbgetcount 确定列表框中的项数。
pbm_lbgetcursel 确定所选项是第几项。
pbm_lbgethorizontalextent 获得列表框的宽度、计算水平卷滚。
pbm_lbgetitemheight 确定列表框控件中项的高度。
pbm_lbgetitemrect 确定列表框的尺寸。
pbm_lbgetsel 获得列表框中当前所选的项。
pbm_lbgetselcount 在多选列表框中获得所选项的数目。
pbm_lbgetselitems 用列表框中表框各自的项号填充一个给定的整数数组。
pbm_lbgettext 获得列表框中当前所选项的文本。
pbm_lbgettextlen 获得列表框中当前所选项的文本中的字符数。
pbm_lbgettopindex 确定列表框中可见的最上面一项的项号。
pbm_lbinsertstring 向列表框中加入一个新字符串。
pbm_lbresetcontent 重置(消除)列表框中的内容。
pbm_lbselectstring 搜索并加亮与所给字符匹配的字符串。
pbm_lbselitemrange 选择/取消列表框中某一范围中的项。
pbm_lbsetcaretindex 设置列表框中的某一项拥有聚焦。
pbm_lbsetcolumnwidth 设置列表框中列的宽度。
pbm_lbsetcursel 在列表框中选择并加亮一项;如果需要,卷滚到列表框。
pbm_lbsethorizontaltext 设置列表框中被水平卷滚的单元数。
pbm_lbsetitemdata 设置与列表框相关的32位/4字节值。
pbm_lbsetitemheight 设置列表框中项的高度。
pbm_lbsetsel 在列表框中选择一个字符串。
pbm_lbsettabstops 设置列表框控件中tabstops的位置。
pbm_lbsettopindex 卷滚列表框使特定的项成为可见的最上面一项。
列表框通知消息(前缀:pbm_en)
pbm_endblclk 用户在列表框控件中的某一项上双击。
pbm_enerrspace 用户试图超越可在列表框中输入字符的最大限制。
pbm_enselcancel 当前选取文本被取消。
pbm_enselchange 用户在列表框中选择或取消了一项。
窗口消息(前缀:pbm_)
pbm_activateapp 被激活的窗口属于另外一个应用。
pbm_askcbformatname 要求剪贴板中的内容被复制到一个使用自定义格式的文本缓冲区中。
pbm_char 传送键盘上按下的键。
pbm_chartoitem 通过转换键盘来的字符,帮助列表框定位其中的项。
pbm_childactivate 一个子窗口被移动或激活。
pbm_clear 用户要删除当前编辑器控件中的内容。
pbm_command 用户选择了一个菜单项、控件,或使用了加速键。
pbm_compacting 系统内存资源不足;当Windows占用了多于1/8的CPU时间紧缩内存时,产生这条消息。
pbm_compareitem 当新的一项被加入列表框或组合框时产生此消息,Window用这条消息进行项之间的比较。
pbm_ctlcolor 一个控件即将被画出,可在此时改变控件的颜色。
pbm_deadchar 用户选择了一种非英语字符集或其它特殊字符集,这将改变下面将要输入的字符。
pbm_deleteitem 从列表框或通用对话框中移去一项。
pbm_destroyclipboard 剪贴板内容被清除。
pbm_devmodechanged WIN.INI中的一个设备名被修改。
pbm_drawclipboard 剪贴板内容发生改变。
pbm_drawitem 列表框或通用对话框的一项内容被改变。
pbm_dropfiles 当鼠标左键在一个注册为拖放文件接受器的应用上释放时,发出该消息。
pbm_erasebkgnd 窗口的客户区需要重画。
pbm_fontchange 应用可用的字体数改变。
pbm_getdlgcode 通知消息,说明当前使用哪种类型的键盘。
pbm_getfont 获取当前激活的字体。
pbm_getminmaxinto Windows正在检查最小化或最大化窗口的尺寸。
pbm_gettext 从一个控件(如按钮或编辑器控件)中复制文本到一个内存缓冲区。
pbm_gettextlength 用来确定一个控件中的字符数。
pbm_hscrollclipboard 剪贴板的水平卷滚条被使用。
pbm_iconerasebkgnd 一个最小化窗口需要重化背景。
pbm_initdialog 一个对话框即将被显示。
pbm_initmenu 一个菜单即将被显示。
pbm_initmenupopup 一个弹出式窗口即将被显示。
pbm_keydown 键盘上的一个键被按下。
pbm_keyup 键盘上的一个键被释放。
pbm_mdiactive 一个MDI子窗口(表单)被激活。
pbm_mdicascade 以重叠的形式重排所有的表单。
pbm_mdicreate 创建一个表单。
pbm_mdidestroy 从MDI框架中移去一个表单。
pbm_mdigetactive 获得当前活动的MDI表单的句柄。
pbm_mdiiconrange 在一个MDI框架中重排最小化表单的图标。
pbm_mdimaximize 最大化一个MDI子表单。
pbm_mdinext 激活下一个MDI表单(紧接着活动表单的表单)。
pbm_mdirestore 把MDI表单恢复到它原来的大小。
pbm_mdisetmenu 将一个菜单与一个MDI表单联系起来。
pbm_mdifitle 平铺所有的MDI表单。
pbm_measureitem 这个消息被送给即将创建的、内有按钮或其它控件的窗口。
pbm_menuchar 用户使用了一个快捷键,但系统不支持该快捷键。
pbm_menuselect 用户选择了一个菜单项。
pbm_mouseactivate 用户在一个非活动窗口中点击了鼠标。
pbm_mousemove 用户移动了鼠标。
pbm_ncactivate 窗口的非客户区即将被激活。
pbm_nccalcsize 窗口的尺寸需要重新计算。
pbm_nccreate 窗口即将创建它的非客户区。
pbm_ncdestroy 窗口的非共享区被析构。
pbm_nchittest 每次非客户区被移动时都发送该消息。
pbm_nclbuttondblclk 用户在非客户区双点了鼠标左键。
pbm_ncpaint 非客户需要画出。
pbm_nextdlgctl 在对话框中将聚焦转给另一个控件。
pbm_paint 窗口的客户区需要被画出。
pbm_paintclipboard 剪贴板应用有剪贴操作,剪贴板查看器需重画。
pbm_palettechanged 系统调色板被改变。
pbm_paletteischanging 系统调色板即将被改变。
pbm_parentnotify 通知父窗口一个子窗口即将被创建。
pbm_querydragicon 用户要拖一个最小化窗口。
pbm_queryendsession 通知消息,说明窗口即将被关闭。
pbm_querynewpalette 应用即将收到输入聚焦,应该执行必要的颜色调整。
pbm_queryopen 一个最小化窗口即将被恢复。
pbm_quit 应用处理的最后一个消息。
pbm_renderallformats 通知一个剪贴板格式的拥有者,应用将失去所有的格式。
pbm_renderformats 通知消息,说明放在剪贴板中的数据应该用一种特殊格式传送。
pbm_setcursor 通知消息,说明鼠标指针在一个窗口中移动。
pbm_setfont 用来在对话框中改变字体。
pbm_setredraw 在加一个新项之前发送给列表框或通用对话框。
pbm_settext 用来改变窗口的标题或文本。
pbm_sizeclipboard 剪贴板查看器应用改变尺寸。
pbm_spoolerstatus 一个打印管理器任务被添加或删除。
pbm_syschar <ALT>键和其它某键同时被按下。
pbm_syscolorchange 一种或多种系统颜色被改变。
pbm_syscommand 用户选择了一个系统菜单命令。
pbm_sysdeadchar 通知消息,说明一种非英语字符集被选定。
pbm_syskeydown 用户按下某键的同时按下了<ALT>键。
pbm_syskeyup 用户释放了<ALT>组合键。
pbm_timechange 系统时钟被修改。
pbm_undo 从undo缓冲区复制文本到编辑器控件。
pbm_vkeytoitem 当一个列表框拥有聚焦时,用户按下了一个键。
pbm_vscroll 用户点击了垂直卷滚条。
pbm_vscrollclipboard 剪贴板查看器的垂直卷滚条被点击。
pbm_windowposchanged 窗口位置发生改变。
pbm_windowposchanging 窗口位置即将发生改变。
pbm_wininichange WIN.INI文件被修改。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/leniz/archive/2007/07/26/1709517.aspx

 

  [PB]pb中数据窗口的两点应用技巧 收藏
powerbuilder是大家公认的、最佳的数据库前端 开发工具之一,数据窗口(datawindow)是powerbuilder中的关键技术,它能够灵活的组织 数据库中的各种数据,用户能用一个简单的查询窗口就可以得到丰富的查询结果,并且能 够对查询结果集通过程序控制,得出各种用户想得到最终结果。如果能够熟练的运用数据 窗口这一专利技术,这无疑会给开发人员和用户带来巨大的方便。我们用powerbuilder开 发过一些应用系统,在开发过程中也积累了一些数据窗口的应用技巧,现提供给各位,希望 能够在您的开发过程中提供一定的帮助。

  在开发应用系统的时候,数据窗口中用户焦点要从一 个字段转移到另外一个字段的时候,只能用tab键来实现,而用户通常是用回车键来改变焦点, 为了保持用户的习惯,在系统中实现良好的用户操作界面,我们就必须实现在数据窗口中用enter 代替tab在字段间移动。实现方法:
  1)您需要创建一个可视的用户对象(userobject), 在标准(standard)对象中选择datawindow。

  2)选择declare菜单项中的userevents子菜单, 定义一个用户事件,取用户事件名为pb_enter(事件名可任意指定),事件号(eventid)选 择pbm_dwnprocessenter(此事件号不能任意指定)。点ok按纽退回。

  3)在创建的用户对象上单击鼠标右键,选择弹出 菜单上的scripts项来编写程序,在selectevent上选择你刚才定义的pb_enter事件,在编 辑窗中输入以下两条语句后退出: send(handle(this),256,9,long(0,0)) return1

  4)给你的用户对象取一个名字后保存即可。

  在你新建窗口需要用到数据窗口对象时,你就可 以把你所定义的用户对象放入你的窗口中来代替pb提供的数据窗口对象,它就可以实现用enter 代替tab在字段间移动。


  我们在powerbuilder应用程序的开发过程中,使用数 据窗口时,经常会遇到某列的数据太长,不能同时全部显示的情况.若采用自动水平滚动,操 作起来又不够简便.下面介绍一种方法,实现列数据多行显示,即实现列数据的自动折行.具 体步骤如下:
  1)打开一个数据窗口。

  2)在需设定自动折行的列上双击鼠标,弹开此列 的属性窗口。

  3)选择position标签,选中autosizeheight复 选框。

  4)选择edit标签,不选中autohorzscroll复选 框。

  5)单击ok按钮,保存所做的修改。

  6)点中detail带(写有detail的灰色长带), 击鼠标右键,选择properties菜单项。

  7)选中autosizeheight复选框。

  8)单击ok按钮,保存所做的修改。

  9)保存此数据窗口。

  注意:连在一起的汉字(中间没有标点或空格分隔), 系统将认为是一个单词,不会自动进行折行。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/leniz/archive/2007/07/04/1678810.aspx


  [POWERBUILDER]PB 收集资料 收藏
  string   str_savename,named,s_grxh  
  int     excelok,li_net  
  long   li_count,i  
   
   
  oleobject   excelserver  
  excelserver=create   oleobject    
  excelok=excelserver.connecttonewobject("excel.application")    
   
  //检查返回值,以确保已成功地连接到了Excel  
  if   excelok   <>   0   then    
  messagebox("信息提示","连接EXCEL失败,请检查计算机中是否安装了EXCEL!")    
  return   -1  
  end   if    
  li_net   =   GetFileOpenName("选择文件",   str_savename,named,"xls","Excel文件(*.xls),*.xls")    
  if   li_net   >   0   then  
  if   str_savename   =   ""   then     return   -1  
  dw.settransobject(sqlca)  
  dw.reset()  
  excelserver.workbooks.open(str_savename)    
  excelserver.activesheet.cells.copy  
  li_count   =   dw.importclipboard(2)     //导入数据    
  clipboard("")   
 
  excelserver.quit()    
  excelserver.disconnectobject()    
  destroy   excelserver    
  return   1  
  else  
  messagebox('信息提示','没有指定导入文件!')  
  return   -1  
  end   if    

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/leniz/archive/2007/01/02/1472190.aspx

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值