posted @ 2010-06-16 15:45 tangdh 阅读(143) 评论(0)
编辑
pb函数库之打印函数
Print()
功能以当前字体在打开的打印作业中打印一行或多行文本。
语法Print(printjobnumber,{tab1,}string{,tab2})
参数printjobnumber:用PrintOpen()函数打开的打印作业号tab1:Integer类型,可选项,指定文本开始打印的位置,在开始打印字符串之前将打印光标移动到该位置,从打印区的左边界开始计算,以千分之一英寸为单位。如果打印光标已经位于指定位置、或打印光标已经超过了指定位置、或省略了该参数,那么,Print()函数从打印光标的当前位置开始打印string:string类型,指定要打印的字符串。如果字符串中包括回车换行字符(~r~n),那么该字符串将被分成多行输出,但是,除第一行之外,其它行忽略tab1参数指定的起始打印位置tab2:Integer类型,可选项,指定字符串打印结束后打印光标移动到的位置,从打印区的左边界开始计算,以千分之一英寸为单位。如果打印光标已经超过了指定位置,那么Print()函数忽略该参数,打印光标位于已打印字符串的尾部。如果省略了该参数,Print()函数把打印光标移动到下一行的起始位置。返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,Print()函数返回NULL。用法在打印作业中,PowerBuilder使用打印光标来跟踪打印位置。打印光标保存了即将打印区域左上角的坐标。使用Print()函数打印文本后,PowerBuilder自动更新打印光标。PowerBuilder使用行距来决定打印出的两行文本之间的距离,行距与字符的高度成比例,缺省的行距是字符高度的1.2倍。使用PrintSetSpacing()函数可以改变行距。当Print()函数在下一行打印输出时,它把打印光标的x坐标设置为0、y坐标增加当前行距指示的数值。由于每打印一行时Print()函数都自动调整打印光标的y坐标位置,因此,该函数会自动处理分页,因此,应用程序没有必要调用PrintPage()函数进行分页。打印区由纸张的物理尺寸和边界空白决定,PrintSend()函数能够发送具体打印机的ESC控制序列,使用这个函数可以改变边界空白的大小。另外,在打印开始之前,使用PrintDefineFont()和PrintSetFont()函数可以改变Print()使用的字体。
PrintBitmap()
功能在打印区域的指定位置打印位图。
语法PrintBitmap ( printjobnumber, bitmap, x, y, width, height )
参数printjobnumber:用PrintOpen()函数打开的打印作业号bitmap:string类型,指定要打印的位图文件的文件名x:integer类型,指定位图起始打印位置的x坐标,以千分之一英寸为单位y:integer类型,指定位图起始打印位置的y坐标,以千分之一英寸为单位width:integer类型,指定位图的打印宽度,以千分之一英寸为单位。如果该参数的值指定为0,那么按图像的原始宽度打印height:integer类型,指定位图的打印高度,以千分之一英寸为单位。如果该参数的值指定为0,那么按图像的原始高度打印返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintBitmap()函数返回NULL。用法执行PrintBitmap()函数后,打印光标的位置不变,依然停留在执行该函数前的位置上。
PrintCancel()
功能取消用PrintOpen()函数启动的打印作业。
语法PrintCancel ( printjobnumber )
参数printjobnumber:要取消的打印作业的作业号返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果参数printjobnumber的值为NULL,PrintCancel()函数返回NULL。用法PrintCancel()函数取消指定的打印作业,删除相应的打印池文件,关闭打印作业,所以,应用程序执行了PrintCancel()函数之后,不需要再执行PrintClose()函数关闭打印作业了。
PrintClose()
功能关闭打印作业并把打印页面发送到打印机上。
语法PrintClose ( printjobnumber )
参数printjobnumber:要关闭的打印作业的作业号返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果参数printjobnumber的值为NULL,PrintClose()函数返回NULL。用法应用程序使用PrintOpen()函数启动打印作业后,必须使用PrintClose()在完成打印任务后关闭打印作业,或根据需要使用PrintCancel()函数取消打印作业。
PrintDataWindow()
功能打印数据窗口控件的内容,用该函数可以在一个打印作业中打印多个数据窗口控件的内容,每个都从新的一页开始打印。
语法PrintDataWindow ( printjobnumber, dwcontrol )
参数printjobnumber:用PrintOpen()函数打开的打印作业号dwcontrol:要打印其内容的数据窗口控件名或子数据窗口控件名返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果参数printjobnumber的值为NULL,PrintDataWindow()函数返回NULL。用法应用程序通过多次执行PrintDataWindow()函数可以在一个打印作业中一次打印多个数据窗口的内容,并且每个数据窗口都从新的一页开始打印。当数据窗口的表现风格为RichTextEdit时,数据窗口中的每一行都在新的一页上开始打印。需要注意的是,PrintDataWindow()函数在打印数据窗口时使用数据窗口本身定义的字体以及风格,使用PrintDefineFont()和PrintSetFont()函数为当前作业定义的字体不起作用。
PrintDefineFont()
功能定义打印作业使用的字体,对每个打印作业PowerBuilder支持八种字体。
语法PrintDefineFont(printjobnumber,fontnumber,facename,height,weight,fontpitch,fontfamily, italic,underline)
参数printjobnumber:用PrintOpen()函数打开的打印作业号fontnumber:指定赋给当前定义字体的编号,有效值在1到8之间 facename:string类型,指定字体名称,该字体应该是你的打印机支持的字体,比如"宋体"height:Integer类型,使用正值指定字体的高度,以千分之一英寸为单位;使用负值指定字体点数,比如,-18代表18点。一般来说,使用点数更精确些weight:指定字体的磅数,正常字体为400磅,粗体为700磅fontpitch:FontPitch枚举类型,指定字体标准。有效取值为:Default! - 缺省值;Fixed! - 固定形式;Variable! - 可变形式fontfamily:FontFamily枚举类型,指定字体系列。有效取值为:AnyFont!、Decorative!、Modern!、Roman!、Script!、Swiss!italic:boolean类型,指定是否使用斜体样式。有效取值为:TRUE - 使用斜体样式;FALSE - 不使用斜体样式。缺省值为FALSEunderline:boolean类型,指定是否加下划线。有效取值为:TRUE - 加下划线;FALSE - 不加下划线。缺省值为FALSE返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintDefineFont()函数返回NULL。用法在一个打印作业中,应用程序能够最多同时定义8种字体。当应用程序需要使用更多的字体时,可以在使用了某个字体号输出内容后使用PrintDefineFont()函数将该字体号对应的字体更换为其它字体。
PrintLine()
功能在当前打印页上绘出指定厚度的一条线。
语法PrintLine ( printjobnumber, x1, y1, x2, y2, thickness )
参数printjobnumber:用PrintOpen()函数打开的打印作业号x1:integer类型,指定直线起点的x坐标,以千分之一英寸为单位y1:integer类型,指定直线起点的y坐标,以千分之一英寸为单位x2:integer类型,指定直线终点的x坐标,以千分之一英寸为单位y2:integer类型,指定直线终点的y坐标,以千分之一英寸为单位thickness:integer类型,指定直线的厚度,以千分之一英寸为单位返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintLine()函数返回NULL。用法应用程序执行了PrintLine()函数后,该函数并不改变打印光标的位置。
PrintOpen()
功能启动打印作业并返回作业号。
语法PrintOpen ( { jobname } )
参数jobname:string类型,可选项,指定要打开打印作业的名称,该名称将显示在打印管理器窗口中返回值Long。函数执行成功时返回打印作业号,发生错误时返回-1。如果任何参数的值为NULL,PrintOpen()函数返回NULL。用法应用程序执行PrintOpen()函数后,启动新的打印作业并走纸到下一页,同时将打印机缺省字体设置为该打印作业的字体。打印光标的位置位于打印区的左上角。其它同组的打印函数使用PrintOpen()函数返回的作业号来标识作业。需要注意的是,使用PrintOpen()函数打开打印作业、使用同组的其它函数完成打印任务后,必须使用PrintClose()关闭打印作业,或根据需要使用PrintCancel()函数取消打印作业。
*PrintOval()*功能在指定位置以指定线宽绘制椭圆或圆。
语法PrintOval ( printjobnumber, x, y, width, height, thickness )
参数printjobnumber:用PrintOpen()函数打开的打印作业号x:integer类型,指定椭圆或圆外形框左上角的x坐标,以千分之一英寸为单位y:integer类型,指定椭圆或圆外形框左上角的y坐标,以千分之一英寸为单位width:integer类型,指定椭圆或圆外形框的宽度,以千分之一英寸为单位height:integer类型,指定椭圆或圆外形框的高度,以千分之一英寸为单位thickness:integer类型,指定椭圆或圆外边线的厚度,以千分之一英寸为单位返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintOval()函数返回NULL。用法应用程序执行了PrintOval()函数后,该函数并不改变打印光标的位置。PrintOval()函数绘出的椭圆或圆是实心的,也就是说,执行该函数后,椭圆或圆下面的文字或图像将完全被覆盖。如果想在椭圆或圆中输出文字或图形,那么应用程序应该首先绘制椭圆或圆,然后使用其它函数在椭圆或圆中输出文字或图形。
PrintPage()
功能将当前页发送给打印机或打印池并在当前打印作业中启动一个新的打印页。
语法PrintPage ( printjobnumber )
参数printjobnumber:用PrintOpen()函数打开的打印作业号返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintPage()函数返回NULL。
PrintRect()
功能在指定位置以指定线宽打印矩形。
语法PrintRect ( printjobnumber, x, y, width, height, thickness )
参数printjobnumber:用PrintOpen()函数打开的打印作业号x:integer类型,指定矩形左上角的x坐标,以千分之一英寸为单位y:integer类型,指定矩形左上角的y坐标,以千分之一英寸为单位width:integer类型,指定矩形的宽度,以千分之一英寸为单位height:integer类型,指定矩形的高度,以千分之一英寸为单位thickness:integer类型,指定矩形边线的厚度,以千分之一英寸为单位返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintRect()函数返回NULL。用法应用程序执行了PrintRect()函数后,该函数并不改变打印光标的位置。PrintRect()函数绘出实心的矩形,也就是说,执行该函数后,矩形下面的文字或图像将完全被覆盖。如果想在矩形中输出文字或图形,那么应用程序应该首先绘制矩形,然后使用其它函数在矩形中输出文字或图形。
PrintRoundRect()
功能在指定位置以指定线宽打印圆角矩形。
语法PrintRoundRect(printjobnumber,x,y,width,height,xradius,yradius,thickness)
参数printjobnumber:用PrintOpen()函数打开的打印作业号x:integer类型,指定圆角矩形左上角的x坐标,以千分之一英寸为单位y:integer类型,指定圆角矩形左上角的y坐标,以千分之一英寸为单位width:integer类型,指定圆角矩形的宽度,以千分之一英寸为单位height:integer类型,指定圆角矩形的高度,以千分之一英寸为单位xradius:integer类型,指定圆角矩形圆角部分的x半径,以千分之一英寸为单位yradius:integer类型,指定圆角矩形圆角部分的y半径,以千分之一英寸为单位thickness:integer类型,指定圆角矩形边线的厚度,以千分之一英寸为单位返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintRoundRect()函数返回NULL。用法应用程序执行了PrintRoundRect()函数后,该函数并不改变打印光标的位置。PrintRoundRect()函数绘出实心的圆角矩形,也就是说,执行该函数后,圆角矩形下面的文字或图像将完全被覆盖。如果想在圆角矩形中输出文字或图形,那么应用程序应该首先绘制圆角矩形,然后使用其它函数在圆角矩形中输出文字或图形。
PrintScreen()
功能在打印作业中打印屏幕图像。
语法PrintScreen ( printjobnumber, x, y {, width, height } )
参数printjobnumber:用PrintOpen()函数打开的打印作业号x:integer类型,指定要打印屏幕图像左上角在打印页上的x坐标,以千分之一英寸为单位y:integer类型,指定要打印屏幕图像左上角在打印页上的y坐标,以千分之一英寸为单位width:integer类型,可选项,指定屏幕图像的打印宽度,以千分之一英寸为单位。如果省略了该参数,那么PowerBuilder按屏幕的原始宽度打印屏幕图像。如果指定了该参数,必须同时指定height参数height:integer类型,可选项,指定屏幕图像的打印高度,以千分之一英寸为单位。如果省略了该参数,那么PowerBuilder按屏幕的原始高度打印屏幕图像返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintScreen()函数返回NULL。
PrintSend()
功能直接向打印机发送任意字符串,通常用于发送打印机的控制代码。
语法PrintSend ( printjobnumber, string {, zerochar } )
参数printjobnumber:用PrintOpen()函数打开的打印作业号string:string类型,指定发送到打印机的字符串。在该字符串中,使用非打印字符的ASCII码值表示非打印字符zerochar:integer类型,可选项,指定在string参数中用于表示数值0的ASCII码值。有效取值在1到255之间返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintSend()函数返回NULL。用法应用程序使用PrintSend()函数可以直接向打印机发送控制序列(换码序列),比如,设置打印文字的浓淡、打印页的四周空白等。不同类型的打印机使用不同的控制序列,你需要翻一翻你的打印机手册。由于PowerBuilder使用数值0(即ASCII码为0的字符)结束每个字符串,因此,如果打印控制序列中包含了数值0,应用程序需要使用其它字符在参数string中替代数值0,并用zerochar参数指明这个替代字符。一般来说,应该选择一个打印机控制序列中不使用的字符作为0值字符的替代字符。通常情况下,按下述次序组织打印作业:1. 使用PrintOpen()函数打开打印作业2. 使用PrintSend()函数设置打印机特性,比如打印方向、四周空白等3. 使用PrintDefineFont()和PrintSetFont()函数设置该打印作业使用的字体4. 使用该组的其它函数打印输出文字或图形5. 执行PrintClose()函数关闭打印作业
PrintSetFont()
功能设置当前打印作业使用的字体。
语法PrintSetFont ( printjobnumber, fontnumber )
参数printjobnumber:用PrintOpen()函数打开的打印作业号fontnumber:指定该打印作业使用字体的字体编号,该编号与PrintDefineFont()函数中定义的编号应该对应,字体编号的有效取值在1到8之间,0表示使用打印机的缺省字体返回值Integer。函数执行成功时返回当前字体的高度,发生错误时返回-1。如果任何参数的值为NULL,PrintSetFont()函数返回NULL。
PrintSetSpacing()
功能设置行间距因子,打印函数将使用该因子来决定行间距。
语法PrintSetSpacing ( printjobnumber, spacingfactor )
参数printjobnumber:用PrintOpen()函数打开的打印作业号spacingfactor:指定行间距因子,用字符高度的倍数表示,缺省值为1.2返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintSetSpacing()函数返回NULL。用法在PowerBuilder应用程序中,行间距与字符的高度成正比,缺省值为字符高度的1.2倍。当Print组函数生成新行时,系统自动把打印光标的x坐标位置设置为0,y坐标位置在原有基础上增加当前行距值。使用PrintSetSpacing()函数可以改变当前打印作业的行距。
PrintSetup()
功能打开打印机设置对话框。
语法PrintSetup ( )
返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintSetup()函数返回NULL。用法当系统中安装了多种打印机时,在Windows 95中PrintSetup()函数打开如图2-1所示的对话框,单击"Setup"按钮设置打印机各种特性。如果系统中只有一个打印机,则直接打开该打印机的打印设置对话框。需要注意的是,在Windows95和Windows NT 3.51以后的版本中,使用PrintSetup()函数设置的打印机设置只对当前应用起作用,并不影响其它应用的打印机设置。对Windows 3.1来说,使用PrintSetup()函数设置的打印机设置影响系统中的所有应用。
PrintText()
功能在指定位置打印一行文本。
语法PrintText ( printjobnumber, string, x, y {, fontnumber } )
参数printjobnumber:用PrintOpen()函数打开的打印作业号string:string类型,指定要打印的文本x:integer类型,指定文本开始打印位置的x坐标,以千分之一英寸为单位y:integer类型,指定文本开始打印位置的y坐标,以千分之一英寸为单位fontnumber:可选参数,指定打印文本使用的字体号,该编号由PrintDefineFont()函数确定。省略该参数时,以打印作业的当前字体打印文本返回值Integer。函数执行成功时返回文本打印后打印光标的x位置,即参数x的值加上打印文本的宽度。发生错误时返回-1。如果任何参数的值为NULL,PrintText()函数返回NULL。
PrintWidth()
功能确定一个字符串在指定打印作业中按当前字体所占的宽度,以千分之一英寸为单位。
语法PrintWidth ( printjobnumber, string )
参数printjobnumber:用PrintOpen()函数打开的打印作业号string:string类型,指定要决定其打印宽度的字符串返回值Integer。函数执行成功时返回按当前字体计算的字符串打印宽度,以千分之一英寸为单位,发生错误时返回-1。如果任何参数的值为NULL,PrintWidth()函数返回NULL。
PrintX()
功能返回打印光标的x坐标位置。
语法PrintX ( printjobnumber )
参数printjobnumber:用PrintOpen()函数打开的打印作业号返回值Integer。函数执行成功时返回打印光标的x坐标位置,以千分之一英寸为单位,发生错误时返回-1。如果任何参数的值为NULL,PrintX()函数返回NULL。
PrintY()
功能返回打印光标的y坐标位置。
语法PrintY ( printjobnumber )
参数printjobnumber:用PrintOpen()函数打开的打印作业号返回值Integer。函数执行成功时返回打印光标的y坐标位置,以千分之一英寸为单位,发生错误时返回-1。如果任何参数的值为NULL,PrintY()函数返回NULL。
posted @ 2010-06-16 15:41 tangdh 阅读(570) 评论(0)
编辑
PB Send()函数应用有关数据整理
Send()函数定义:Send(handle,message#,lowword,long)
其中的message#是一个UnsignedIntege,就是WM_COMMAND,其定义可以从微软的SDK中的WINDOWS.H中找到。
WM_NULL =$0000;
WM_CREATE =$0001;
应用程序创建一个窗口
WM_DESTROY =$0002;
一个窗口被销毁
WM_MOVE =$0003;
移动一个窗口
WM_SIZE =$0005;
改变一个窗口的大小
WM_ACTIVATE =$0006;
一个窗口被启动或失去启动状态;
WM_SETFOCUS =$0007;
获得焦点后
WM_KILLFOCUS =$0008;
失去焦点
WM_ENABLE =$000A;
改变enable状态
WM_SETREDRAW =$000B;
设置窗口是否能重画
WM_SETTEXT =$000C;
应用程序发送此消息来设置一个窗口的文本
WM_GETTEXT =$000D;
应用程序发送此消息来复制对应窗口的文本到缓冲区
WM_GETTEXTLENGTH =$000E;
得到与一个窗口有关的文本的长度(不包含空字符)
WM_PAINT =$000F;
要求一个窗口重画自己
WM_CLOSE =$0010;
当一个窗口或应用程序要关闭时发送一个信号
WM_QUERYENDSESSION =$0011;
当用户选择结束对话框或程序自己调用ExitWindows函数
WM_QUIT =$0012;
用来结束程序运行或当程序调用postquitmessage函数
WM_QUERYOPEN =$0013;
当用户窗口恢复以前的大小位置时,把此消息发送给某个图示
WM_ERASEBKGND =$0014;
当窗口背景必须被擦除时(例在窗口改变大小时)
WM_SYSCOLORCHANGE =$0015;
当系统颜色改变时,发送此消息给所有顶级窗口
WM_ENDSESSION =$0016;
当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,
通知它对话是否结束
WM_SYSTEMERROR =$0017;
WM_SHOWWINDOW =$0018;
当隐藏或显示窗口是发送此消息给这个窗口
WM_ACTIVATEAPP =$001C;
发此消息给应用程序哪个窗口是启动的,哪个是非启动的;
WM_FONTCHANGE =$001D;
当系统的字体资源库变化时发送此消息给所有顶级窗口
WM_TIMECHANGE =$001E;
当系统的时间变化时发送此消息给所有顶级窗口
WM_CANCELMODE =$001F;
发送此消息来取消某种正在进行的摸态(操作)
WM_SETCURSOR =$0020;
如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口
WM_MOUSEACTIVATE =$0021;
当光标在某个非启动的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口
WM_CHILDACTIVATE =$0022;
发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被启动,移动,改变大小
WM_QUEUESYNC =$0023;
此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序
分离出用户输入消息
WM_GETMINMAXINFO =$0024;
此消息发送给窗口当它将要改变大小或位置;
WM_PAINTICON =$0026;
发送给最小化窗口当它图标将要被重画
WM_ICONERASEBKGND =$0027;
此消息发送给某个最小化窗口,仅当它在画图示前它的背景必须被重画
WM_NEXTDLGCTL =$0028;
发送此消息给一个对话框程序去更改焦点位置
WM_SPOOLERSTATUS =$002A;
每当打印管理列队增加或减少一条作业时发出此消息
WM_DRAWITEM =$002B;
当button,combobox,listbox,menu的可视外观改变时发送
此消息给这些空件的所有者
WM_MEASUREITEM =$002C;
当button,combobox,listbox,listviewcontrol,ormenuitem被创建时
发送此消息给控件的所有者
WM_DELETEITEM =$002D;
当thelistbox或combobox被销毁或当某些项被删除通过LB_DELETESTRING,LB_RESETCONTENT,CB_DELETESTRING,orCB_RESETCONTENT消息
WM_VKEYTOITEM =$002E;
此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息
WM_CHARTOITEM =$002F;
此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息
WM_SETFONT =$0030;
当绘制文本时程序发送此消息得到控件要用的颜色
WM_GETFONT =$0031;
应用程序发送此消息得到当前控件绘制文本的字体
WM_SETHOTKEY =$0032;
应用程序发送此消息让一个窗口与一个热键相关连
WM_GETHOTKEY =$0033;
应用程序发送此消息来判断热键与某个窗口是否有关联
WM_QUERYDRAGICON =$0037;
此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能
返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标
WM_COMPAREITEM =$0039;
发送此消息来判定combobox或listbox新增加的项的相对位置
WM_GETOBJECT =$003D;
WM_COMPACTING =$0041;
显示内存已经很少了
WM_WINDOWPOSCHANGING=$0046;
发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数
WM_WINDOWPOSCHANGED=$0047;
发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数
WM_POWER =$0048;(适用于16位的windows)
当系统将要进入暂停状态时发送此消息
WM_COPYDATA =$004A;
当一个应用程序传递数据给另一个应用程序时发送此消息
WM_CANCELJOURNAL =$004B;
当某个用户取消程序日志启动状态,提交此消息给程序
WM_NOTIFY =$004E;
当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口
WM_INPUTLANGCHANGEREQUEST=$0050;
当用户选择某种输入语言,或输入语言的热键改变
WM_INPUTLANGCHANGE =$0051;
当平台现场已经被改变后发送此消息给受影响的最顶级窗口
WM_TCARD =$0052;
当程序已经初始化windows帮助例程时发送此消息给应用程序
WM_HELP =$0053;
此消息显示用户按下了F1,如果某个菜单是启动的,就发送此消息个此窗口关联的菜单,否则就
发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前启动的窗口
WM_USERCHANGED =$0054;
当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体
设置信息,在用户更新设置时系统马上发送此消息;
WM_NOTIFYformAT =$0055;
公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构
在WM_NOTIFY消息,使用此控件能使某个控件与它的父控件之间进行相互通信
WM_CONTEXTMENU =$007B;
WM_styleCHANGING =$007C;
当调用SETWINDOWLONG函数将要改变一个或多个窗口的风格时发送此消息给那个窗口
WM_styleCHANGED =$007D;
当调用SETWINDOWLONG函数一个或多个窗口的风格后发送此消息给那个窗口
WM_DISPLAYCHANGE =$007E;
当显示器的分辨率改变后发送此消息给所有的窗口
WM_GETICON =$007F;
此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄;
WM_SETICON =$0080;
程序发送此消息让一个新的大图标或小图标与某个窗口关联;
WM_NCCREATE =$0081;
当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送;
WM_NCDESTROY =$0082;
此消息通知某个窗口,非客户区正在销毁
WM_NCCALCSIZE =$0083;
当某个窗口的客户区域必须被核算时发送此消息
WM_NCHITTEST =$0084;//移动鼠标,按住或释放鼠标时发生
WM_NCPAINT =$0085;
程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时;
WM_NCACTIVATE =$0086;
此消息发送给某个窗口仅当它的非客户区需要被改变来显示是启动还是非启动状态;
WM_GETDLGCODE =$0087;
发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件
通过响应WM_GETDLGCODE消息,应用程序可以把他当成一个特殊的输入控件并能处理它
WM_NCMOUSEMOVE =$00A0;
当光标在一个窗口的非客户区内移动时发送此消息给这个窗口 file://
非/客户区为:窗体的标题栏及窗体的边框体
WM_NCLBUTTONDOWN =$00A1;
当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息
WM_NCLBUTTONUP =$00A2;
当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息;
WM_NCLBUTTONDBLCLK =$00A3;
当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息
WM_NCRBUTTONDOWN =$00A4;
当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息
WM_NCRBUTTONUP =$00A5;
当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息
WM_NCRBUTTONDBLCLK =$00A6;
当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息
WM_NCMBUTTONDOWN =$00A7;
当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息
WM_NCMBUTTONUP =$00A8;
当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息
WM_NCMBUTTONDBLCLK =$00A9;
当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息
WM_KEYFIRST =$0100;
WM_KEYDOWN =$0100;
WM_MOUSEFIRST =$0200;
WM_MOUSEMOVE =$0200;
移动鼠标
WM_LBUTTONDOWN =$0201;
按/下鼠标左键
WM_LBUTTONUP =$0202;
释放鼠标左键
WM_DEVICECHANGE =537;
当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序
WM_IME_STARTCOMPOSITION =$010D;
WM_IME_ENDCOMPOSITION =$010E;
WM_IME_COMPOSITION =$010F;
WM_IME_KEYLAST =$010F;
WM_IME_SETCONTEXT =$0281;
WM_IME_NOTIFY =$0282;
WM_IME_CONTROL =$0283;
WM_IME_COMPOSITIONFULL =$0284;
WM_IME_SELECT =$0285;
WM_IME_CHAR =$0286;
WM_IME_REQUEST =$0288;
WM_IME_KEYDOWN =$0290;
WM_IME_KEYUP =$0291;
WM_MDICREATE =$0220;
应用程序发送此消息给多文文件的客户窗口来创建一个MDI子窗口
WM_MDIDESTROY =$0221;
应用程序发送此消息给多文文件的客户窗口来关闭一个MDI子窗口
WM_MDIACTIVATE =$0222;
应用程序发送此消息给多文文件的客户窗口通知客户窗口启动另一个MDI子窗口,当客户窗口收到
此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未启动)启动它;
WM_MDIRESTORE =$0223;
程序发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小
WM_MDINEXT =$0224;
程序发送此消息给MDI客户窗口启动下一个或前一个窗口
WM_MDIMAXIMIZE =$0225;
程序发送此消息给MDI客户窗口来最大化一个MDI子窗口;
WM_MDITILE =$0226;
程序发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口
WM_MDICASCADE =$0227;
程序发送此消息给MDI客户窗口以层迭方式重新排列所有MDI子窗口
WM_MDIICONARRANGE =$0228;
程序发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口
WM_MDIGETACTIVE =$0229;
程序发送此消息给MDI客户窗口来找到启动的子窗口的句柄
WM_MDISETMENU =$0230;
程序发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单
WM_ENTERSIZEMOVE =$0231;
WM_EXITSIZEMOVE =$0232;
WM_DROPFILES =$0233;
WM_MDIREFRESHMENU =$0234;
WM_MOUSEHOVER =$02A1;
WM_MOUSELEAVE =$02A3;
WM_CUT =$0300;
程序发送此消息给一个编辑框或combobox来删除当前选择的文本
WM_COPY =$0301;
程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板
WM_PASTE =$0302;
程序发送此消息给editcontrol或combobox从剪贴板中得到数据
WM_CLEAR =$0303;
程序发送此消息给editcontrol或combobox清除当前选择的内容;
WM_UNDO =$0304;
程序发送此消息给editcontrol或combobox撤消最后一次操作
WM_RENDERformAT =$0305;
WM_RENDERALLformATS=$0306;
WM_DESTROYCLIPBOARD=$0307;
当调用ENPTYCLIPBOARD函数时发送此消息给剪贴板的所有者
WM_DRAWCLIPBOARD =$0308;
当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口;它允许用剪贴板观察窗口来
显示剪贴板的新内容;
WM_PAINTCLIPBOARD =$0309;
当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画;
WM_VSCROLLCLIPBOARD=$030A;
WM_SIZECLIPBOARD =$030B;
当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者;
WM_ASKCBformATNAME =$030C;
通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字
WM_CHANGECBCHAIN =$030D;
当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口;
WM_HSCROLLCLIPBOARD=$030E;
此消息通过一个剪贴板观察窗口发送给剪贴板的所有者;它发生在当剪贴板包含CFOWNERDISPALY格式的数据并且有个事件在剪贴板观察窗的水平滚动条上;所有者应滚动剪贴板图像并更新滚动条的值;
WM_MOUSEFIRST =$0200;
WM_MOUSEMOVE =$0200;
// 移动鼠标
WM_LBUTTONDOWN =$0201;
按/下鼠标左键
WM_LBUTTONUP =$0202;
释/放鼠标左键
WM_LBUTTONDBLCLK =$0203;
双/击鼠标左键
WM_RBUTTONDOWN =$0204;
按/下鼠标右键
WM_RBUTTONUP =$0205;
释/放鼠标右键
WM_RBUTTONDBLCLK =$0206;
双/击鼠标右键
WM_MBUTTONDOWN =$0207;
按/下鼠标中键
WM_MBUTTONUP =$0208;
释/放鼠标中键
WM_MBUTTONDBLCLK =$0209;
双/击鼠标中键
WM_MOUSEWHEEL =$020A;
当鼠标轮子转动时发送此消息个当前有焦点的控件
WM_MOUSELAST =$020A;
WM_PARENTNOTIFY =$0210;
当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时发送此消息给它的父窗口
WM_ENTERMENULOOP =$0211;
发送此消息通知应用程序的主窗口that已经进入了菜单循环模式
WM_EXITMENULOOP =$0212;
发送此消息通知应用程序的主窗口that已退出了菜单循环模式
WM_NEXTMENU =$0213;
WM_SIZING =532;
当用户正在调整窗口大小时发送此消息给窗口;通过此消息应用程序可以监视窗口大小和位置
也可以修改他们
WM_CAPTURECHANGED =533;
发送此消息给窗口当它失去捕获的鼠标时;
WM_MOVING =534;
当用户在移动窗口时发送此消息,通过此消息应用程序可以监视窗口大小和位置
也可以修改他们;
WM_POWERBROADCAST =536;
此消息发送给应用程序来通知它有关电源管理事件;
WM_DEVICECHANGE =537;
当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序
WM_IME_STARTCOMPOSITION =$010D;
WM_IME_ENDCOMPOSITION =$010E;
WM_IME_COMPOSITION =$010F;
WM_IME_KEYLAST =$010F;
WM_IME_SETCONTEXT =$0281;
WM_IME_NOTIFY =$0282;
WM_IME_CONTROL =$0283;
WM_IME_COMPOSITIONFULL =$0284;
WM_IME_SELECT =$0285;
WM_IME_CHAR =$0286;
WM_IME_REQUEST =$0288;
WM_IME_KEYDOWN =$0290;
WM_IME_KEYUP =$0291;
WM_MDICREATE =$0220;
应用程序发送此消息给多文文件的客户窗口来创建一个MDI子窗口
WM_MDIDESTROY =$0221;
应用程序发送此消息给多文文件的客户窗口来关闭一个MDI子窗口
WM_MDIACTIVATE =$0222;
应用程序发送此消息给多文文件的客户窗口通知客户窗口启动另一个MDI子窗口,当客户窗口收到
此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未启动)启动它;
WM_MDIRESTORE =$0223;
程序发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小
WM_MDINEXT =$0224;
程序发送此消息给MDI客户窗口启动下一个或前一个窗口
WM_MDIMAXIMIZE =$0225;
程序发送此消息给MDI客户窗口来最大化一个MDI子窗口;
WM_MDITILE =$0226;
程序发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口
WM_MDICASCADE =$0227;
程序发送此消息给MDI客户窗口以层迭方式重新排列所有MDI子窗口
WM_MDIICONARRANGE =$0228;
程序发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口
WM_MDIGETACTIVE =$0229;
程序发送此消息给MDI客户窗口来找到启动的子窗口的句柄
WM_MDISETMENU =$0230;
程序发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单
WM_ENTERSIZEMOVE =$0231;
WM_EXITSIZEMOVE =$0232;
WM_DROPFILES =$0233;
WM_MDIREFRESHMENU =$0234;
WM_MOUSEHOVER =$02A1;
WM_MOUSELEAVE =$02A3;
WM_CUT =$0300;
程序发送此消息给一个编辑框或combobox来删除当前选择的文本
WM_COPY =$0301;
程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板
WM_PASTE =$0302;
程序发送此消息给editcontrol或combobox从剪贴板中得到数据
WM_CLEAR =$0303;
程序发送此消息给editcontrol或combobox清除当前选择的内容;
WM_UNDO =$0304;
程序发送此消息给editcontrol或combobox撤消最后一次操作
WM_RENDERformAT =$0305;
WM_RENDERALLformATS=$0306;
WM_DESTROYCLIPBOARD=$0307;
当调用ENPTYCLIPBOARD函数时发送此消息给剪贴板的所有者
WM_DRAWCLIPBOARD =$0308;
当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口;它允许用剪贴板观察窗口来
显示剪贴板的新内容;
WM_PAINTCLIPBOARD =$0309;
当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画;
WM_VSCROLLCLIPBOARD=$030A;
WM_SIZECLIPBOARD =$030B;
当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者;
WM_ASKCBformATNAME =$030C;
通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字
WM_CHANGECBCHAIN =$030D;
当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口;
WM_HSCROLLCLIPBOARD=$030E;
此消息通过一个剪贴板观察窗口发送给剪贴板的所有者;它发生在当剪贴板包含CFOWNERDISPALY格式的数据并且有个事件在剪贴板观察窗的水平滚动条上;所有者应滚动剪贴板图像并更新滚动条的值;
WM_QUERYNEWPALETTE =$030F;
此消息发送给将要收到焦点的窗口,此消息能使窗口在收到焦点时同时有机会实现他的逻辑调色板
WM_PALETTEISCHANGING=$0310;
当一个应用程序正要实现它的逻辑调色板时发此消息通知所有的应用程序
WM_PALETTECHANGED =$0311;
此消息在一个拥有焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重迭的窗口,以此
来改变系统调色板
WM_HOTKEY =$0312;
当用户按下由REGISTERHOTKEY函数注册的热键时提交此消息
WM_PRINT =791;
应用程序发送此消息仅当WINDOWS或其它应用程序发出一个请求要求绘制一个应用程序的一部分;
WM_PRINTCLIENT =792;
WM_HANDHELDFIRST =856;
WM_HANDHELDLAST =863;
WM_PENWINFIRST =$0380;
WM_PENWINLAST =$038F;
WM_COALESCE_FIRST =$0390;
WM_COALESCE_LAST =$039F;
WM_DDE_FIRST =$03E0;
WM_DDE_INITIATE =WM_DDE_FIRST+0;
一个DDE客户程序提交此消息开始一个与服务器程序的会话来响应那个指定的程序和主题名;
WM_DDE_TERMINATE =WM_DDE_FIRST+1;
一个DDE应用程序(无论是客户还是服务器)提交此消息来终止一个会话;
WM_DDE_ADVISE =WM_DDE_FIRST+2;
一个DDE客户程序提交此消息给一个DDE服务程序来请求服务器每当数据项改变时更新它
WM_DDE_UNADVISE =WM_DDE_FIRST+3;
一个DDE客户程序通过此消息通知一个DDE服务程序不更新指定的项或一个特殊的剪贴板格式的项
WM_DDE_ACK =WM_DDE_FIRST+4;
此消息通知一个DDE(动态数据交换)程序已收到并正在处理WM_DDE_POKE,WM_DDE_EXECUTE,WM_DDE_DATA,WM_DDE_ADVISE,WM_DDE_UNADVISE,orWM_DDE_INITIAT消息
WM_DDE_DATA =WM_DDE_FIRST+5;
一个DDE服务程序提交此消息给DDE客户程序来传递个一数据项给客户或通知客户的一条可用数据项
WM_DDE_REQUEST =WM_DDE_FIRST+6;
一个DDE客户程序提交此消息给一个DDE服务程序来请求一个数据项的值;
WM_DDE_POKE =WM_DDE_FIRST+7;
一个DDE客户程序提交此消息给一个DDE服务程序,客户使用此消息来请求服务器接收一个未经同意的数据项;服务器通过答复WM_DDE_ACK消息提示是否它接收这个数据项;
WM_DDE_EXECUTE =WM_DDE_FIRST+8;
一个DDE客户程序提交此消息给一个DDE服务程序来发送一个字符串给服务器让它象串行命令一样被处理,服务器通过提交WM_DDE_ACK消息来作响应;
WM_DDE_LAST =WM_DDE_FIRST+8;
WM_APP=$8000;
WM_USER =$0400;
此消息能帮助应用程序自定义私有消息;
/////////////////////////////////////////////////////////////////////
通知消息(Notificationmessage)是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通
知父窗口。通知消息只适用于标准的窗口控件如按钮、列表框、组合框、编辑框,以及Windows95公
共控件如树状视图、列表视图等。例如,单击或双击一个控件、在控件中选择部分文本、操作控件的
滚动条都会产生通知消息。
按扭
BN_CLICKED 用/户单击了按钮
BN_DISABLE 按/钮被禁止
BN_DOUBLECLICKED file://
用/户双击了按钮
BN_HILITE 用/户加亮了按钮
BN_PAINT按钮应当重画
BN_UNHILITE加亮应当去掉
组合框
CBN_CLOSEUP组合框的列表框被关闭
CBN_DBLCLK用户双击了一个字符串
CBN_DROPDOWN组合框的列表框被拉出
CBN_EDITCHANGE用户修改了编辑框中的文本
CBN_EDITUPDATE编辑框内的文本即将更新
CBN_ERRSPACE组合框内存不足
CBN_KILLFOCUS组合框失去输入焦点
CBN_SELCHANGE在组合框中选择了一项
CBN_SELENDCANCEL用户的选择应当被取消
CBN_SELENDOK用户的选择是合法的
CBN_SETFOCUS组合框获得输入焦点
编辑框
EN_CHANGE编辑框中的文本己更新
EN_ERRSPACE编辑框内存不足
EN_HSCROLL用户点击了水平滚动条
EN_KILLFOCUS编辑框正在失去输入焦点
EN_MAXTEXT插入的内容被截断
EN_SETFOCUS编辑框获得输入焦点
EN_UPDATE编辑框中的文本将要更新
EN_VSCROLL用户点击了垂直滚动条消息含义
列表框
LBN_DBLCLK用户双击了一项
LBN_ERRSPACE列表框内存不够
LBN_KILLFOCUS列表框正在失去输入焦点
LBN_SELCANCEL选择被取消
LBN_SELCHANGE选择了另一项
LBN_SETFOCUS列表框获得输入焦点
消息
就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。
消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其它信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg,它在Windows单元中是这样声明的:
type
TMsg=packedrecord
hwnd:HWND;//窗口句柄
message:UINT;//消息常量标识符
wParam:WPARAM //32位消息的特定附加信息
lParam:LPARAM //32位消息的特定附加信息
time:DWORD;//消息创建时的时间
pt:TPoint;//消息创建时的鼠标位置
end
消息中有什么?
是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:hwnd32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。
message 用于区别其它消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。
wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。
lParam 通常是一个指向内存中数据的指针。由于WParam、lParam和Pointer都是32位的,
因此,它们之间可以相互转换。
熟悉Windows编程的人员都知道,Windows的API为程序员提供了大量的消息,约有200多个。在PowerBuilder中,系统将每个Windows消息作为事件传递给程序员处理,并且为大多数普通的事件提供了缺省处理。
PowerBuilder在语句描绘器中为每一个标准的控件设定了一些常用事件,一般的编程人员基于这些事件就基本可以完成常见的操作。如果我们遇到事件的处理需要另外截获Windows的消息,我们可以在语句描绘器菜单的"Declare|UserEvent..."中加入一个新的事件,同时指出您所希望对应的Windows消息。
WindowsAPI的消息一般以两到三个字符的标识开始,这个标识标明了该消息的来源或对象。
posted @ 2010-06-16 15:39 tangdh 阅读(888) 评论(0)
编辑
PB 函数库-数据类型检查与转换函数
Asc()
功能得到字符串第一个字符的ASCII码整数值。
语法Asc ( string )
参数string:要得到第一个字符ASCII值的字符串返回值Integer。函数执行成功时返回string参数第一个字符的ASCII值,如果string参数的值为NULL,则Asc()函数返回NULL。
Char()
功能将字符串的第一个字符、Blob变量的第一个值、或一个整数转换成字符。
语法Char ( n )
参数n:字符串、Blob变量或整数,也可以是包含上述类型数据的Any类型变量返回值Char。返回参数n的第一个字符。如果n参数的值为NULL,则Char()函数返回NULL。
Dec()
功能将字符串或Blob值转换成Decimal类型的值。
语法Dec ( stringorblob )
参数stringorblob:string类型变量或Blob类型变量。Blob类型变量时,把该变量第一个值转换为Decimal类型的值,其余部分被忽略。stringorblob参数也可以是包含上述类型数据的Any类型变量返回值Decimal。函数执行成功时返回相应的Decimal类型值。如果stringorblob参数中的值不是有效的PowerScript数字或数据类型不兼容,那么Dec()函数返回0。如果stringorblob参数的值为NULL,则Dec()函数返回NULL。
Double()
功能将字符串或Blob值转换成Double类型的值。
语法Double(stringorblob)
参数stringorblob:string类型变量或Blob类型变量。Blob类型变量时,把该变量第一个值转换为Double类型的值,其余部分被忽略。stringorblob参数也可以是包含上述类型数据的Any类型变量返回值Double。函数执行成功时返回相应的Double类型值。如果stringorblob参数中的值不是有效的PowerScript数字或数据类型不兼容,那么Double()函数返回0。如果stringorblob参数的值为NULL,则Double()函数返回NULL。
Integer()
功能 将字符串或Blob值转换成Integer类型的值。
语法Integer ( stringorblob )
参数stringorblob:string类型变量或Blob类型变量。Blob类型变量时,把该变量第一个值转换为Integer类型的值,其余部分被忽略。stringorblob参数也可以是包含上述类型数据的Any类型变量返回值Integer。函数执行成功时返回相应的Integer类型值。如果stringorblob参数中的值不是有效的PowerScript数字或数据类型不兼容,那么Integer()函数返回0。如果stringorblob参数的值为NULL,则Integer()函数返回NULL。
Long()
功能将其它类型的数据转换为Long类型的值。该函数有两种语法格式:
语法一、将两个无符号整数组合成一个长整数值;
语法二、将字符串或Blob值转换成Long类型的值。下面分别予以介绍:
语法一、将两个无符号整数组合成一个长整数值
语法Long ( lowword, highword )
参数lowword:UnsignedInteger类型,指定长整数中的低位值highword:UnsignedInteger类型,指定长整数中的高位值返回值Long。函数执行成功时返回由低位值和高位值组合后的长整数值,发生错误时返回-1。如果任何参数的值为NULL,则Long()函数返回NULL。
语法二、将字符串或Blob值转换成Long类型的值
语法Long ( stringorblob )
参数stringorblob:string类型变量或Blob类型变量。Blob类型变量时,把该变量第一个值转换为Long类型的值,其余部分被忽略。stringorblob参数也可以是包含上述类型数据的Any类型变量返回值Long。函数执行成功时返回相应的Long类型值。如果stringorblob参数中的值不是有效的PowerScript数字或数据类型不兼容,那么Long()函数返回0。如果stringorblob参数的值为NULL,则Long()函数返回NULL。
Real()
功能将字符串或Blob值转换成Real类型的值。
语法Real ( stringorblob )
参数stringorblob:string类型变量或Blob类型变量。当该参数是Blob类型变量时,把该变量第一个值转换为Real类型的值,其余部分被忽略。stringorblob参数也可以是包含上述类型数据的Any类型变量返回值Real。函数执行成功时返回相应的Real类型值。如果stringorblob参数中的值不是有效的PowerScript数字或数据类型不兼容,那么Real()函数返回0。如果stringorblob参数的值为NULL,则Real()函数返回NULL。
*Date()*功能 将其它类型的数据转换为Date类型的数据。该函数有三种语法格式:
语法一、将DateTime类型或第一个值是DateTime或Date的Blob值转换成Date类型的值;
语法二、将其值是个有效日期的字符串转换成Date类型的值;
语法三、将三个整数组合成一个日期。下面分别予以介绍:
语法一、将DateTime类型或第一个值是DateTime或Date的Blob值转换成Date类型的值
语法Date ( datetime )
参数datetime:DateTime类型的值或第一个值是DateTime或Date的Blob类型的值。当该参数是Blob类型变量时,把该变量第一个值转换为Date类型的值,其余部分被忽略。datetime参数也可以是包含上述类型数据的Any类型变量返回值Date。函数执行成功时返回相应的Date类型值。如果datetime参数中的值不是有效的PowerScript日期或数据类型不兼容,那么Date()函数返回1900-01-01。如果datetime参数的值为NULL,则Date()函数返回NULL。
语法二、将其值是个有效日期的字符串转换成Date类型的值
语法Date ( string )
参数string:string类型,其值包括一个有效的以字符串形式表示的日期(比如January 1, 1998或12-31-99),string参数也可以是包含字符串类型数据的Any类型变量返回值Date。函数执行成功时返回相应的Date类型值。如果string参数中的值不是有效的PowerScript日期或数据类型不兼容,那么Date()函数返回1900-01-01。如果string参数的值为NULL,则Date()函数返回NULL。
语法三、将三个表示年、月、日的整数组合成一个日期
语法Date ( year, month, day )
参数year:integer类型,指定日期中的年份,用四位数字表示,从0到9999month:integer类型,指定日期中的月份,用一位或两位数字表示,从1到12day:integer类型,指定日期中的号数,用一位或两位数字表示,从1到31返回值Date。函数执行成功时返回由year、month、day三个参数确定的日期。如果这三个参数中任何一个参数使用了无效值(比如月份指定为14),则Date()函数返回1900-01-01。如果任何参数的值为NULL,则Date()函数返回NULL。
DateTime()
功能 将其它类型的数据转换为DateTime类型的数据。该函数有两种语法格式:语法一、把日期和时间值组合成DateTime类型的值;语法二、将Blob类型的值转换成DateTime类型的值。下面分别予以介绍:
语法一、把日期和时间值组合成DateTime类型的值
语法DateTime ( date {, time } )
参数date:Date类型的日期值time:可选参数,Time类型的时间值,省略该参数时,PowerBuilder把时间设置为午夜(00:00:00.000000)。当指定该参数时,可以仅仅指定小时值返回值DateTime。函数执行成功时返回日期和时间组合而成的DateTime类型的值。如果任何参数的值为NULL,则DateTime()函数返回NULL。
语法二、将Blob类型的值转换成DateTime类型的值
语法DateTime ( blob )
参数blob:Blob类型变量,把该变量第一个值转换为DateTime类型的值,其余部分被忽略。blob参数也可以是包含blob类型数据的Any类型变量返回值DateTime。函数执行成功时返回相应的DateTime类型值。如果blob参数的值为NULL,则DateTime()函数返回NULL。
IsDate()
功能检测指定的字符串是否包含有效的日期。
语法IsDate ( datevalue )
参数datevalue:string类型,指定要检测的字符串返回值Boolean。如果datevalue包含了有效的日期,则IsDate()函数返回TRUE,否则返回FALSE。如果datevalue参数的值为NULL,则IsDate()函数返回NULL。
IsNull()
功能测试变量或表达式的值是否是NULL。
语法IsNull ( any )
参数any:要测试的变量或表达式返回值Boolean:如果any的值为NULL,函数返回TRUE,否则函数返回FALSE。
IsNumber()
功能测试字符串是否是有效的数值。
语法IsNumber ( string )
参数string:string类型,要测试的字符串返回值Boolean:如果string的值为有效的PowerScript数字,函数返回TRUE,否则函数返回FALSE。如果string参数的值为NULL,则IsNumber()函数返回NULL。
IsTime()
功能测试字符串的值是否是有效的时间。
语法IsTime ( timevalue )
参数timevalue:string类型,要测试的字符串返回值Boolean:如果timevalue的值为有效的时间,函数返回TRUE,否则函数返回FALSE。如果timevalue 参数的值为NULL,则IsTime()函数返回NULL。
String()
功能按指定格式将数据转换成字符串。String()可以把Date、DateTime、数值类型、Time、String类型的数据转换成指定格式的字符串。
语法String(data,{format})
参数data:指定要转换格式的数据,其数据类型可以是Date、DateTime、数值类型、Time、String,也可以是包含上述类型数据的Any类型变量format:可选项,string类型,其值指定数据格式。如果data参数的类型为string,则必须指定format参数返回值String。函数执行成功时返回以字符串方式表示的指定数据,如果data参数的数据类型与format参数指定的格式不匹配、format参数指定的格式无效、或data参数不是前面提到的适宜数据类型时,String()函数返回空字符串("")。
用法:
format是个用掩码表示的字符串,对data参数为数值类型的情况来说,格式为:正数格式;负数格式;零的显示格式;空的显示格式除第一部分必须提供外,其它部分可以省略。数值型显示格式中使用两个掩码字符:#和0,其中,使用#代表0~9之间的任意数字,0代表每个零都要显示。另外,货币符号($或¥)、百分号(%)、小数点(.)、逗号(,)等字符也可以出现在格式字符串中,但是,除小数点(.)、逗号(,)能够出现在格式字符#和0之间外,其它字符只能放置在格式串的前面或后面,例如,###,###$###是个错误的格式串,¥###,###,###是个正确的格式串。省略format参数时,String()函数使用PowerBuilder缺省格式。注意,如果显示格式有多个部分,各部分之间的分号(;)不能省略。其它字符也可以出现在显示格式字符串中(只能放在格式串的开头和末尾),但它们没有特殊意义,系统只是照原样显示。例如,用显示格式字符串"收入##"格式化数值12时,显示结果为"收入12"。对data参数为字符串(String)类型的情况来说,format参数的语法格式为:正常字符串格式;空值时格式在"正常字符串格式"中,@代表字符串中的任意字符,除此之外的任何字符照原样显示,例如,如果定义了下面的格式:(@@)@@@@-@@@@则字符串0166767593显示为:(01)6676-7593对data参数为日期(Date)类型的情况来说,format参数的语法格式为:正常日期格式;日期为空值时的格式日期格式中格式字符意义如下:d棗开头不带0的日数(如8)dd棗开头带0的日数(如08)ddd棗星期的英文缩写(如Mon、Tue)dddd棗星期的英文全称(如Monday、Tuesday)m棗开头不带0的月份(如8)mm棗开头带0的月份(如08)mmm棗月份的英文缩写(如Jan、Feb)mmmm棗月份的英文全称(如January、February)yy棗两位数字表示的年份(如97)yyyy棗四位数字表示的年份(如1997)另外,还可以使用下面的关键字作为日期的显示格式:[General] Windows系统中定义的短日期格式[LongDate] Windows系统中定义的长日期格式[ShortDate] Windows系统中定义的短日期格式对data参数为时间(Time)类型的情况来说,语法格式为:正常时间格式;时间为空值时的格式时间格式中格式字符意义如下:h开头不带0的小时(比如6)hh棗开头带0的小时(比如06)m棗开头不带0的分钟(比如6)mm棗开头带0的分钟(比如06)s棗开头不带0的秒(比如6)ss棗开头带0的秒(比如06)f棗开头不带0的微秒,可以指定1~6个f,每个f代表一部分微秒AM/PM棗用AM/PM显示上、下午时间,12小时制am/pm棗用am/pm显示上、下午时间,12小时制A/P棗用A/P显示上、下午时间,12小时制a/p棗用a/p显示上、下午时间,12小时制另外,显示格式中还可以使用关键字[Time],它表示按当前Windows系统定义的格式显示时间。对data参数为日期时间(DateTime)类型的情况来说,语法格式为:正常日期时间格式;日期时间为空值时的格式日期时间类型使用的掩码就是把日期掩码和时间掩码结合起来即可。
Time()
功能 把其它类型的数据转换为Time类型的值。该函数有三种语法格式:语法一、将DateTime类型或第一个值是DateTime或Time的Blob值转换成Time类型的值;语法二、将其值是个有效时间的字符串转换成Time类型的值;语法三、将表示时、分、秒、以及微秒的整数组合成一个时间值。下面分别予以介绍:
语法一、将DateTime类型或第一个值是DateTime或Time的Blob值转换成Time类型的值
语法Time ( datetime )
参数datetime:DateTime类型的值或第一个值是DateTime或Time的Blob类型的值。当该参数是Blob类型变量时,把该变量第一个值转换为Time类型的值,其余部分被忽略。datetime参数也可以是包含上述类型数据的Any类型变量返回值Time。函数执行成功时返回相应的Time类型值。如果datetime参数中的值不是有效的PowerScript时间或数据类型不兼容,那么Time()函数返回00:00:00.000000。如果datetime参数的值为NULL,则Time()函数返回NULL。
语法二、将其值是个有效时间的字符串转换成Time类型的值
语法Time ( string )
参数string:string类型,其值包括一个有效的以字符串形式表示的时间(比如9am或10:25),string参数也可以是包含时间类型数据的Any类型变量返回值Time。函数执行成功时返回相应的Time类型值。如果string参数中的值不是有效的PowerScript时间或数据类型不兼容,那么Time()函数返回00:00:00.000000。如果string参数的值为NULL,则Time()函数返回NULL。
语法三、将表示时、分、秒、以及微秒的整数组合成一个时间值
语法Time ( hour, minute, second {, microsecond } )
参数hour:integer类型,指定时间中的小时,从0到23minute:integer类型,指定时间中的分钟,从0到59second:integer类型,指定时间中的秒,从0到59microsecond:integer类型,可选项,指定时间中的微秒,从0到32767返回值Time。函数执行成功时返回由hour、minute、second、microsecond 四个参数确定的时间。如果这四个参数中任何一个参数使用了无效值(比如小时指定为44),则Time()函数返回NULL。
posted @ 2010-06-16 15:36 tangdh 阅读(395) 评论(0)
编辑
1. 前言
Power Builder是Powersoft公司推出的基于客户机/服务器体系结构的强有力的专业开发工具,自问世以来深受开发人员的好评。Data Window是Power Builder中获取专利技术的控件,它对数据处理的方法相当简洁,能处理各种显示格式,进行报表打印,对复杂的报表同样处理自如。Data Window是对数据库中的数据进行操作的窗口,它包括数据窗口控件和数据窗口对象两部分,通过它不但可以对数据库的表进行查询、检索,而且还可以进行数据的插入、删除和更新,定义数据的显示格式和编辑风格,定义数据的检条件、过滤条件、有效性规则等。因此Data Window是一个支持数据操作的封装性很好的对象。
一般用户对数据的操作和管理均在Data Window中进行,通过Data Window,用户可以自由灵活地操作和处理数据,而作为Power Builder应用的开发人员则很有必要了解Data Window是如何操作和管理数据的,深入了解Data Window对数据的底层更新机制,全面理解Data Window的技术精华,从而灵活、有效地开发Power Builder应用程序。所以,研究Power Builder的底层数据管理与更新机制具有重大的理论价值和现实意义。
2. Data Window控件管理数据的原理
在Data Window中可以处理用户对数据的增加、删除、修改等请求,那么在Data Window中数据是如何管理的呢?
当光标在Data Window中移动时,Power Builder就在光标所在的当前工作单元上放置了一个编辑控件。
编辑控件中的内容为文本,文本还没有被Data Window控件所接受,在文本中输入的数据还没有成为Data Window缓冲区中的数据,只是编辑控件中的一串字符。当用户改变了编辑控件中的内容,按回车键或Tab等离开该单元时,Power Builder将处理编辑控件中的字符,判断其是否成为有效数据。若有效则接收,把它写入Data Window当前缓冲区的当前行当前列;若无效则被拒绝,不进行写入操作。那么,Power Builder处理Data Window控件单元的文本的过程是怎样的呢?当Data Window中某一列的文本被接收,且光标移开后,将顺序发生下面的事件。
2.1 Power Builder把编辑控件中的文本转换成对应列的数据类型 的数据,若输入的数据不能转换成对应列的数据类型,就触发Item Error错误。
2.2 若转换成功,Power Builder就会用该列的有效性规则对转换 后的数据进行有效性检查。如果有效性检查失败,也会触发Item Error事件。
2.3 若数据通过了有效性检查就会触发Item Change事件,如果该 事件返回值为1,则Power Builder会拒绝该数据,并且不允许光标从该单元上移开。在这种 情况下也会触发Item Error事件。
2.4 Item Changed事件接收了输入的数据后,将触发Item Focus C hanged事件,数据就会作为一项存入Data Window的数据缓冲区中。
前一阶段完成后进入下一阶段。若某阶段未通过则跳过下面的阶段直接显示出错信息。四个阶段全完成后Power Builde自动把编辑控件中的数据放入数据窗口的响应项上,同时存入主缓冲区。编辑控件中的数据可以通过Data Window控件的对象函数Get Text()得到。
3. Data Window对象更新数据的原理
当在Data Window中对数据做了修改后,可以使用Update函数把上次执行Update或Retrieve函数以来在Data Window中进行的所有插入、修改、删除等操作都提交给数据库。
那么Power Builder的底层又是如何对数据库进行更新的呢,要了解它就必须了解Data Window中的四个缓冲区以及当前数据存储时各个缓冲区中状态的转变情况。
3.1 Data Window的四个缓冲区
在每一个Data Window对象中都有4个二维表作为数据缓冲区,用来存储查询到的数据,用户在Data Window中对数据处理系统内部的操作实际上都是将数据在几个缓冲区中进行修改和移动,最后,在用户提交数据库时,系统根据4个缓冲区中的信息,形成SQL的Insert、update、Delete等语句。
这四个缓冲区是:
- Primary Buffer
- 这个缓冲区存放显示在数据窗口控件中的所有行,以及这些行和列的状态。调用Data Window的Retrieve()函数和Insert Row()函数时,检索到和新插入的数据存放在这个缓冲区中。
- Delete Buffer
- 这个缓冲区保存的是用Delete Row()函数从Primary缓冲区中删除的记录。用Delete Row ()删除数据行或用Rowsmove()函数在缓冲区之间移动数据时,被删除行从主缓冲区移到 删除缓冲区。在执行Data Window的Update函数将数据窗口的修改发送到数据库管理系统时 , 被成功删除的记录均从删除缓冲区中清除。在保存数据时,删除缓冲区用于生成Delete语句 。
- Filter Buffer
- 这一缓冲区存储的是那些满足数据源定义(即满足Select语句中的条件)而不满足过滤条件的行。过滤缓冲区与主缓冲区一起在更新数据时生成所需的Insert或Update语句。
- Original Buffer
- 这一缓冲区存储的是Data Window最初执行Retrieve函数时得到的全部记录。当提交数据库时,根据Primary Buffer生成的Update语句和根据Delete Buffer生成的Delete语句都要依据这一缓冲区来构造这些SQL语句中的Where子句。
当从数据库中读取数据时,所有数据会放在Primary Buffer中,并且会复制一份到Original Buffer中,在数据窗口中,我们只能看到Primary Buffer内的数据,任何数据的处理也都是针对主缓冲区中的数据做处理。但是要记住,不管我们对缓冲区中的数据做何种处理,除非运行Update函数,否则,缓冲区内任何数据的改变,对于后端数据库是没有任何影响的。
Primary Buffer的记录行数通过数据窗口控件的对象函数Rowcount()得到;Delete Buffer的记录行数通过数据窗口控件的对象函数Deleted Count()得到;Filter Buffer的记录行数通过数据窗口的控件对象函数Filter Count()得到。利用数据窗口控件的对象函数Set Filter()可以动态地改变过滤条件,然后使用数据窗口控件的对象函数filter更新主缓冲区和过滤缓冲区中的数据。
而Original Buffer由Power Builder内部维护,Power Builder所提供的所有函数都无法改变它的值。不过通过Power Builder所提供的Get Item系列函数可以读出Data Window最初从数据库中检索到的值。通过这些函数可以编程实现所谓"undo"功能。
3.2 Data Window数据项的状态值
在数据窗口控件的主缓冲区,过滤缓冲区和删除缓冲区中,每一行和每一行中的列都有一个编辑状态标志,这个标志表示了相应行是否是新增加的行、相应列的数据是否被修改。在更新数据库时,Power Builder通过查看Data Window缓冲区中每一行的状态值来决定产生什么类型的SQL语句。可以用Get Item Status函数和Set Item Status 对这些状态值进行操纵,缓冲区有四个状态值,其中有两个用于行。
当往Data Window中插入一行时,新插入行的状态为New!,该行中所有列的状态都为Not Modified !,当该行中某列的数据发生变化时,该列状态为Data Modified!。若Data Window中某一列设置了默认值,新插入一行时,该列状态也为Not Modified!,至少要对它做一次修改,该列的状态才会变成该列状态为Data Modified!
3.3 Data Window数据的操作
当调用Update函数时,Power Builder根据当前缓冲区和过滤缓冲区中的各行状态产生响应的Insert或Update语句。当行状态为New Modified!时,Power Builder将产生一个Insert语句,当行状态为Data Modified!时,Power Builder将产生一个Update语句。若某列在Data Window维护的可更新列名单上,或者该列为Data Modified!时,Power Builder将更新此列。对Insert语句来说,Power Builder将对所有列进行插入操作,因此,Insert语句将包括所有的列,如果该列没有赋值,Power Builder将会插入一个空值,若数据库不允许该列为空,则会产生数据库错误。
在Data Window中用Delete Row()函数删除的行将移到删除缓冲区中。当使用Update语句向数据库提交Data Window中的数据时,对Data Window删除缓冲区中的所有行都产生一个SQL Delete语句。然而若在Delete Row()被调用前某行的状态为New!,或New Modified!,对该行将不产生Delete语句。
4.四个缓冲区在编程中的应用
有时需要人为改变行和列的状态,其目的是为了阻止Power builder某些默认行为的发生。例如,如果事先已经从一个数据窗口拷贝某行到另一个数据窗口中,当用户对所拷贝的行又做了修改,需要将修改后的行覆盖另一数据窗口中的同一行时就应该对该行发一个Update语句,而不是Insert语句。 可以利用Set Item Statsus函数在程序中改变数据窗口行和列的状态信息,利用Get Item S tatus来获得某行某列的状态信息。
Set Item Statsus函数可以将某一列的状态从Data Modified!改变为Not Modified!,或从N ot Modified!变为Data Modified!,而对于行状态来说情况就要复杂的多。
当把某行状态改成Not Modified!或New!时,将把该行所有列的状态都设为Not Modified!。但若不能直接将一种状态改变为另一种状态,可以间接完成。例如,如果要把某行状态从New!改为Not Modified!可以先把该行状态改为Data Modified!,然后再从Data Modified!状态改为NotModified!。要复位整个数据窗口的修改状态,请使用数据窗口控件的Reset Update()对象函数。该函数除New!状态之外,将其它状态均修改为Not Modified!。
另外,当使用Reset函数和Retrieve函数以及改变数据对象属性时,系统将重置这几个缓冲区。例如当用户插入一个新行时,程序往往要在新插入行中的某一列中插入一个缺省的数据值,但此时用户并没有对数据做任何修改。在用户要关闭这一窗口时,如果在Close Query事件中用Modified Count函数查看数据是否修改,得到的结果是有所改变。因此,此时用户将得到一个提示信息:"是否保存所做的修改?"这样的结果是很不好的,因为用户原本没有向DataWindow中输入任何数据,但是程序却提示用户是否做保存操作。若用户选择了做保存操作,系统将形成SQL Insert语句提交数据库,原本应是空记录的行,也成了有记录的行,同时若碰上某些字段不能为空的却因没输入数据而提交了,保存操作后就插入了NULL,因此会导致数据的有效性出错。但是这一情况可以通过编程得到完美的解决:用Set Item Stats us函数将该行的状态改为New!即当新行插入并设置了缺省值以后该行的状态值为New!亦即无数据改变,因此不再提示做数据保存操作。其具体实现情况如下面代码所示:
//在数据窗口dw-1中插入一个新行
longrow1
row1=dw1Insert Row(dw1,Getrow())
dw1Set Item(row1,"discountpic",0,10)
//设置行状态为New!让程序只有在用户输入了数据时,才提示保存操作。
dw1Set Item Status(row1,0,primary!,New!)
//下面是用代码修改行列状态的例子。
该例代码将数据窗口主缓冲区第五行Salay列的状态置为Not Modified!dw1Set Item Statsus(5,"Salary",Primary!, Not Modified!)
下面的代码将数据窗口主缓冲区第五行empstatus列的状态设为Date Modified!
dw1Set Item Status(5,"empstatus",Primary,Data Modified!)
5.结束语
数据窗口在处理数据时很有特色,它在客户机的本地内存中开辟了四个缓冲区:主缓冲区、删除缓冲区、过滤缓冲区及原始缓冲区。从数据库中检索到数据后,数据窗口根据不同情况把数据放到不同的缓冲区中。四个缓冲区各司其职,相互协作完成数据的增、删、改等操作,最后把结果提交给数据库管理系统。
posted @ 2010-06-16 15:29 tangdh 阅读(261) 评论(0)
编辑