在PB中实现热键的方法
VB中利用ccrpHotKey控件设置热键
VB中利用ccrpHotKey控件设置热键下载本文提供控件简介:ccrphotkey是一个第三方控件,该控件可以轻松实现热键功能使用示例您一定对“Ctrl+Alt+Z”很熟悉吧?没错,它是QQ里打开消息对话框的默认热键,通过这组热键,我们可以很迅速的打开消息对话框查看,大大加快我们操作的速度。
同时我们也知道,在QQ的系统设置中可以对热键进行设置(如图1),当我们按下任何热键组合时,文本框都会实时显示热键组合,让用户明白当前按下的热键是什么。
图1热键可以大大加快使用者的操作速度,对于开发者来说,在自己的程序中使用热键同样会使操作更简便、使得程序更加人性化。
那么你是否也想实现像QQ中那样的可以让用户自由设置的热键编辑框呢?下面我们就通过使用示例,介绍一个很实用的控件ccrpHotKey,它可以帮助你轻松实现强大的热键功能。
ccrpHotKey控件的外观以及许多属性都跟我们熟悉的文本框的属性相类似,因此我们可以很轻松的对其进行设置。
第一步:首先启动Visual Basic 6.0,新建一个窗口。
第二步:加载ccrpHotKey控件,设置其属性。
①在控件工具栏中单击右键,选择“部件”,在弹出的窗口中点击“浏览”,找到ccrpHotKey控件,载入它;把它添加到Form1窗体中适当位置即可。
②修改ccrpHotKey控件属性。
选中ccrpHotKey控件后,在属性设置区域可以对其进行设置,其中的按键组合设置最为重要(如图2),你可以根据需要设置允许或者禁止某些组合,如要禁止“Ctrl+Alt”的组合,就将AllowCtrlAlt属性改为False即可,依此类推。
当然,我们也可以在程序运行中动态地改变这些属性。
图2第三步:加载其他控件,完成界面的设置。
①在窗体中添加用于设置热键和退出的2个CommandButton控件,名称分别为cmdSetHotKey和cmdExit,caption属性为“设置热键”和“退出”。
PB7笔记
PB7.0学习笔记多心发表于2005-9-15 11:03:00PB默认的全局对象SQLCA Transaction对象,用于与数据库通信共含15个属性:SQLReturnData--返回的特定DBMS信息SQLCode--操作成功或失败的代码:0成功,100没找到,-1出错SQLNRows--最近执行的SQL语句有效的行数(不同的DBMS返回值不同)SQLDBCode--数据库出错代码SQLErrText--与出错代码相对应的数据库出错信息SQLDA DynamicDescriptionArea,用于动态SQLSQLSA DynamicStagingArea,用于动态SQL调用组向Error 在执行过程中报告错误Message 用于处理非PowerBuilder定义的时间的信息和在窗口间传递参数建立用户自定义事:若对应一个Windows消息时,需要了解Windows消息在PowerBuilder中的映射事件如:wm_keydown-----pbm_keydown, bm_getcheck(按钮消息类型)-----pbm_bmgetcheck,bn_clicked(通知)-----pbm_bnclicked.若不对应一个Windows消息时(也就是说,如果事件ID是一个PowerBuilder定制事件),则必须在脚本中使用Trigg erEvent函数或PostEvent函数来触发该事件。
例如:实现按Enter键,实现改变焦点需在相应的控件中建立一个定制事件,映射该事件到事件ID:pbm_keydown,写脚本IF KeyDown(KeyEnter!) THENsle_2.SetFocus()END IF例子:一数据窗口,其某一列(如第六列)使用单选钮(RadioButton)编辑风格,现想通过上,下键实现在RadioButto n之间的滚动解决,给数据窗口控件声明一个用户事件,映射事件ID:pdm_dwnkey(dwn是‚DataWindow notification‛的缩写词),写脚本:int colnum = 6 //列号long rownumrownum = dw_2.GetRow()IF KeyDown(KeyDownArrow!) AND &This.GetColumn() = colnum THENCHOOSE CASE dw_2.GetItemString(rownum,colnum)CASE "P" //单选钮中的第一个值This.SetItem(rownum,colnum,"L") //移到下一个值CASE "L" //单选钮中的第二个值This.SetItem(rownum,colnum,"A") //移到下一个值CASE "A"This.SetItem(rownum,colnum,"P") //移到下一个值END CHOOSEThis.SetActionCode(1) //忽略按键END IFIF KeyDown(KeyupArrow!) AND &This.GetColnum() = colnum THEN……END IF结构体:访问格式基本与C语言相同;对象外面引用对象级的结构体:在定义本结构体的对象中声明一个结构体变量,在对象外通过:对象名.结构体名.属性名来引用相关属性。
PB快捷键实验程序
1.实验目的(1)了解快捷键的作用和按钮的扑捉过程;(2)了解keycode 数据类型和窗口key 事件的使用;(3)正确的使用枚举类型数据和窗口事件.2.实验要求(1) 将F2~F2(可设置到F12)键设置成对应功能按钮的快捷键;(2) 当按键盘为Fi键时,显示”快捷键Fi”.3.实验环境powerbuilder环境中4.实验步骤5.实验内容在key窗口中if keydown(KeyF2!) thencb_2.postevent("clicked")elseif keydown(KeyF3!) thencb_3.postevent("clicked")elseif keydown(KeyF4!) thencb_4.postevent("clicked")elseif keydown(KeyF5!) thencb_5.postevent("clicked")elseif keydown(KeyF6!) thencb_6.postevent("clicked")end if在快捷键按钮F2中写入MessageBox("提示消息","快捷键F2")在快捷键按钮F3中写入MessageBox("提示消息","快捷键F3")在快捷键按钮F4中写入MessageBox("提示消息","快捷键F4")在快捷键按钮F5中写入MessageBox("提示消息","快捷键F5")在快捷键按钮F6中写入MessageBox("提示消息","快捷键F6")5.实验结果:。
powerbuilder(pb)数据窗口(datawindow)缓冲区与状态解释
PowerBuilder数据窗口缓冲区与状态详解Powerbuilder(pb)的datawindow(数据窗口)的各个缓冲区和状态是pb数据窗口的非常重要的,对这些概念的理解,将有助于我们认识pb数据窗口的优势。
基本概念数据窗口的三个缓冲区:Primary!Delete!Filter!Getitemstatus(row,列名或者列号,缓冲区)当要取整个行的状态时,列名或者列号用0表示数据窗口中数据项状态Notmodified! 从数据retrieve出来后没有改变过Datamodified! 数据retrieve出来后有过改变New! 数据窗口增加了一列但没有录入过数据,该列的状态就是new!Newmodified! 数据窗口增加了一列,同时改列被录入了数据,该列的状态就是newmodified!retrieve出来后,结果如下:notmodified用geitemstatus(行号,列名,primary!)取每一数据项状态用getitemstatus(行号,0,primary!)去行状态2、当我把Ccc改为AAA后,如下:001,002,ddd三个格子所在的数据项状态仍旧是notmodifiedAAA(原是Ccc)所在格子的数据项状态是datamodified第一行(001,AAA)的行状态是datamodified第二行(001,ddd)的行状态时notmodified后,如下:2点。
第三行状态就是new!请用getitemstatus(3,0,primary!)取第三行状态4、不保存,当把第三行数据填充后,如下第三行的状态将变为newmodified!第三行的每一项将变为datamodified!开发中实例:表1表2(因为是举例,请不要考虑数据库设置中的冗余概念,如表2中的姓名没必要等)需求一、删除表1中的数据的同时,把表2的数据也删除,必须删除,不考虑约束条件。
如把表1中001,002删除了,需要把表2中所有001,002的记录删除,(【删除】和【保存】是两个按钮或菜单,就是说【删除】只是删除了前台的内容,不【保存】数据库中数据是没有被删除的,数据库需要【保存】执行的时候才真正执行删除),怎么做?1、可以使用触发器;2、可以在删除之前把表1记录下来,【保存】时对比表1,看那些数据缺少了;3、……..DeletedCount ( )Getitemstring(row,列名,delete!,true)(为什么用true,不用false呢?,true是从数据库取出来的默认值,false是当前值,如果删之前用户修改过编号,但是没有保存,用false就会有问题)需求二、把表1中编号001改为了A01,002改为001,003改为B05,004,005不变(没有任何规律的),要求表二的编号也这么改过来。
如何在PB中模拟按键
如何在PB中模拟按键如何在PB中模拟按键很多人都知道怎样在datawindow按下enter键模拟tab键的效果:在datawindow中扩展出pbm_dwnprocessenter事件: 加入代码Send( Handle( This),256,9,Long(0,0))Return 1这种方法曾经出现在晓通那一套天价的书上,网上各网站你抄我的,我抄你的,好象只有这一种方法,一种思路,不知误导了多少人。
今天我就来消清晓通的流毒。
这种方法其实效果也还可以,只不过是很久以前的Windows 3.1的技术了,在Windows95以上的版本,我们有更好,更规范,功能更强的方法来实现。
在windows95以上,特意增加了一个API调用,keybd_event,这个API调用的功能就是模拟键盘击键。
定义如下:subroutine keybd_event(uint bVk,uint bScan,long dwFlags,long dwExtraInfo ) library 'user32.dll'// 以下这段抄自MSDN,是关于各参数的说明ParametersbVkSpecifies a virtual-key code. The code must be a value in the range 1to 254.bScanSpecifies a hardware scan code for the key.dwFlagsA set of flag bits that specify various aspects of function operation.An application can use any combination of the following predefined constant values to set the flags. Value MeaningKEYEVENTF_EXTENDEDKEY If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).KEYEVENTF_KEYUP If specified, the key is being released. If not specified, the key is being depressed.dwExtraInfoSpecifies an additional 32-bit value associated with the key stroke.谁有耐心慢慢看去,以下只说明我们要用的两个参数bVk,指需要模拟的击键dwflags, =0 ,按下 = 2 ,释放下面我们看看如何实现以下功能:按下enter键以及下箭头,相当于按下tab键按下上箭头,相当于按下Shift-tab键如果是在datawindow下,扩展出pbm_dwnkey,增加如下代码: If key = KeyEnter! Or Key = KeyDownArrow! Thenkeybd_event ( 9, 0, 0 , 0 ) // 按下tabkeybd_event ( 9, 0, 2, 0 ) // 释放tabReturn 1End IfIf Key = KeyUpArrow! Thenkeybd_event ( 16, 0, 0, 0 ) // 按下shiftkeybd_event ( 9, 0, 0 , 0 ) // 按下tabkeybd_event ( 9, 0, 2, 0 ) // 释放tabkeybd_event ( 16, 0, 2, 0 ) // 释放shiftReturn 1End If我们也可以在window级实现以上功能,很简单,将上面代码加在window的key事件中即可.keybd_event还有一些很神奇的作用,比如以下代码打开windows的“开始菜单”keybd_event ( 91, 0, 0 , 0 ) // 按下win(不知道应该叫什么)键keybd_event ( 91, 0, 2, 0 ) // 放开。
VB编程中热键应用两例
Declare Function RegisterHotKey Lib “user32” (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Else
If I = 2 Then
Debug.Print “有其他Window也用Ctl-Shift-T作Hotkey”
Else
Debug.Print “指定失败”
End If
End If
End Sub
注: SendMessage()的传回值有以下的意义:
Const WM_SETHOTKEY = &H32
Const HOTKEYF_SHIFT = &H1 ' shift键
Const HOTKEYF_CONTROL = &H2 'ctrl键
Const HOTKEYF_ALT = &H4 'alt键
Const HOTKEYF_EXT = &H8 '附加键
Public Const MOD_CONTROL = &H2
Public Const MOD_SHIFT = &H4
Public Const GWL_WNDPROC = (-4)
Public preWinProc As Long
Public Modifiers As Long, uVirtKey As Long, idHotKey As Long
Private bb As t2Byte
pb实验步骤
1.建立数据库。
启动powerbuilder(pb)——单击database图标按钮——Select Tables 的Cancel——file——create database(数据库名:employee。
Browse为数据库的存储路径)——ok。
(密码和用户名要知道)2.建立数据库中的表。
Table图标——写明字段名、类型、长度、是否为空。
——save(保存,table name:emp)——ok——close定义关键字:右键表emp——property——primary key——点击emp_id——ok(设置sex编辑风格等)数据的装入:DB Administration——输入:insert into emp values('101','刘然','01','吉林','女',//或者0,1'1970/09/02','副经理',3200,'出生于吉林市,93年参加工作,毕业于人民大学。
');——exceute图标——也可以保存表save图标。
——return按钮返回。
还可以利用data manipulation(grid)等3个图标进行手动添加,删除,插入信息。
3 创建应用。
单击application图标——file——new新建应用保存路径,名字:pbtutor。
——no Window图标——new新建——标题设为“welcome”,类型:response——拖拽三个静态文本框(static text)两个单行编辑器(single line edit)两个按钮(commond button):其中:文本框名字:st_welcome,st_userid,st_passwd.。
两个编辑器名:sle_userid,sle_passwd。
两个按钮名:cb_ok,cb_cancel。
python globalhotkeys用法
python globalhotkeys用法Python GlobalHotkeys用法GlobalHotkeys是Python中一个非常重要的模块,它提供了一种简单而强大的方法来创建全局热键,使你的应用程序可以响应用户的快捷键操作。
在本文中,我们将学习如何使用Python GlobalHotkeys模块,以及如何创建属于自己的自定义热键,以优化用户体验。
一、安装和引入GlobalHotkeys模块在开始创建热键之前,我们需要先安装GlobalHotkeys模块。
可以使用以下命令来安装:``` pip install globalhotkeys ```安装完成后,我们需要引入GlobalHotkeys模块,可以通过以下语句实现:``` from globalhotkeys import GlobalHotKeys ```二、创建一个热键在掌握了如何引入GlobalHotkeys模块后,我们可以开始创建一个热键,用于快速响应用户的操作。
首先,我们需要创建一个新的HotKeys对象,如下所示:``` hotkeys = GlobalHotKeys() ```然后,我们需要定义要响应的热键,这可以通过添加按键组合来实现。
例如,下面的代码演示了如何添加CTRL+ALT+DELETE热键:``` hotkeys.add_hotkey("ctrl+alt+delete", callback_func) ```其中,callback_func是一个回调函数,当用户按下CTRL+ALT+DELETE键时,系统将调用该函数。
此外,可以根据需要为每个热键指定其他参数,例如等待持续时间、延迟等。
例如,要使按下CTRL+ALT+DELETE两次才触发回调函数,可以使用以下代码:``` hotkeys.add_hotkey("ctrl+alt+delete", callback_func, args=[2], timeout=0.5) ```在上面的代码中,我们用args参数指定了在两次触发间要等待的秒数,timeout参数指定了在超时之前用户必须按下CTRL+ALT+DELETE的最大等待时间。
如何在PB中制作特殊形状数据窗口或按钮
如何在PB中制作特殊形状数据窗口或按钮以下是全部源码,感兴趣的朋友可以整个窗口的源代码导入到PBL里自己运行一下试试。
$PBExportHeader$w_button.srwforwardglobal type w_button from windowend typetype cb_11 from commandbutton within w_buttonend typetype cb_10 from commandbutton within w_buttonend typetype em_3 from editmask within w_buttonend typetype em_2 from editmask within w_buttonend typetype em_1 from editmask within w_buttonend typetype cb_9 from commandbutton within w_buttonend typetype cb_8 from commandbutton within w_buttonend typetype cb_7 from commandbutton within w_button end typetype cb_6 from commandbutton within w_button end typetype cb_5 from commandbutton within w_button end typetype cb_4 from commandbutton within w_button end typetype cb_3 from commandbutton within w_button end typetype cb_2 from commandbutton within w_button end typetype cb_1 from commandbutton within w_button end typetype st_1 from statictext within w_buttonend typetype ws_position from structure within w_button end typeend forwardtype ws_position from structurelong xposlong yposend typeglobal type w_button from window integer width = 2400integer height = 1800boolean titlebar = truestring title = "特殊形状数据窗口演示" boolean controlmenu = true boolean minbox = trueboolean maxbox = truelong backcolor = 17725690string icon = "AppIcon!"boolean center = truecb_11 cb_11cb_10 cb_10em_3 em_3em_2 em_2em_1 em_1cb_9 cb_9cb_8 cb_8cb_7 cb_7cb_6 cb_6cb_5 cb_5cb_4 cb_4cb_3 cb_3cb_2 cb_2cb_1 cb_1st_1 st_1end typeglobal w_button w_buttontype prototypesFUNCTION ulong CreateRoundRectRgn(Long x1, Long y1, Long x2, Long y2, Long x3, Long y3) library "gdi32"FUNCTION ulong CreatePolygonRgn (ref ws_position lppt[], int cPoints, int fnPolyFillMode ) Library "gdi32"FUNCTION ulong CreateEllipticRgn( Long x1, Long y1, Long x2, Long y2) library "gdi32"FUNCTION ulong SetWindowRgn(ulong hWnd,ulong hRgn,boolean bRedraw) LIBRARY "user32"FUNCTION ulong CombineRgn(Long hDestRgn, Long hSrcRgn1, Long hSrcRgn2, Long nCombineMode ) LIBRARY "gdi32"Function Long SetParent( Long hWndChild, Long hWndNewParent) library "user32"Subroutine keybd_event(long bVk, long bScan, long dwFlags, long dwExtraInfo) LIBRARY "user32.dll"end prototypesforward prototypespublic function integer of_set_oval (commandbutton acb_button)public function integer wf_set_color ()end prototypespublic function integer of_set_oval (commandbutton acb_button);//////////////////////////////////////////////////// //// 测试用数据(窗口多边形) //// ////////////////////////////////////////////////////long ll_x1, ll_x2, ll_x3long ll_y1, ll_y2, ll_y3long ll_handlell_x1 = 1ll_y1 = 1ll_x2 = UnitsToPixels(acb_button.width, xunitstopixels!)ll_y2 = UnitsToPixels(acb_button.height, yunitstopixels!)ll_x3 = 64ll_y3 = 64ll_handle = CreateRoundRectRgn(ll_x1, ll_y1, ll_x2, ll_y2, ll_x3, ll_y3) SetwindowRgn(handle(acb_button), ll_handle, true)return 1end functionpublic function integer wf_set_color ();long ll_red, ll_green, ll_blue long ll_datall_red = long(em_1.text)ll_green = long(em_2.text)ll_blue = long(em_3.text)ll_data = rgb(ll_red, ll_green, ll_blue)this.backcolor = ll_dataem_1.backcolor = ll_dataem_2.backcolor = ll_dataem_3.backcolor = ll_datast_1.backcolor = ll_datareturn 1end functionon w_button.createthis.cb_11=create cb_11 this.cb_10=create cb_10 this.em_3=create em_3 this.em_2=create em_2 this.em_1=create em_1 this.cb_9=create cb_9 this.cb_8=create cb_8 this.cb_7=create cb_7 this.cb_6=create cb_6 this.cb_5=create cb_5 this.cb_4=create cb_4 this.cb_3=create cb_3 this.cb_2=create cb_2 this.cb_1=create cb_1 this.st_1=create st_1 this.Control[]={this.cb_11,& this.cb_10,&this.em_3,&this.em_2,&this.em_1,&this.cb_9,&this.cb_8,&this.cb_7,&this.cb_6,&this.cb_5,&this.cb_4,&this.cb_3,&this.cb_2,&this.cb_1,&this.st_1}end onon w_button.destroy destroy(this.cb_11) destroy(this.cb_10) destroy(this.em_3) destroy(this.em_2) destroy(this.em_1) destroy(this.cb_9) destroy(this.cb_8) destroy(this.cb_7) destroy(this.cb_6) destroy(this.cb_5) destroy(this.cb_4)destroy(this.cb_3)destroy(this.cb_2)destroy(this.cb_1)destroy(this.st_1)end onevent mousemove;Send(handle(this), 274, 61458, 0) end eventtype cb_11 from commandbutton within w_button integer x = 1216integer y = 1096integer width = 562integer height = 148integer taborder = 70integer textsize = -12integer weight = 700fontcharset fontcharset = gb2312charset! fontpitch fontpitch = variable!string facename = "宋体"string text = "半圆形花边"end typeevent clicked;//////////////////////////////////////////////////// // // 测试用数据(窗口多边形) //// // //////////////////////////////////////////////////long ll_handle, ll_dataws_position lws_pointapi[]long ll_xpos, ll_ypos, ll_width, ll_heightlong ll_xnum, ll_ynumlong ll_x, ll_y, ll_flower = 20long ll_i, ll_kll_xpos = 1ll_ypos = 1ll_width = UnitsToPixels(parent.width, xunitstopixels!)ll_height = UnitsToPixels(parent.height, yunitstopixels!)ll_xpos = ll_xpos + 5ll_ypos = ll_ypos + 25 + ll_flowerll_width = ll_width - 20ll_width = ll_width - mod(ll_width - ll_xpos, ll_flower) ll_xnum = (ll_width - ll_xpos) / ll_flowerll_height = ll_height - 20ll_height = ll_height - mod(ll_height - ll_ypos, ll_flower) ll_ynum = (ll_height - ll_ypos) / ll_flowerlws_pointapi[1].xpos = ll_xpos + ll_flower / 2lws_pointapi[1].ypos = ll_ypos - ll_flower / 2lws_pointapi[2].xpos = ll_width + ll_flower / 2lws_pointapi[2].ypos = ll_ypos - ll_flower / 2lws_pointapi[3].xpos = ll_width + ll_flower / 2lws_pointapi[3].ypos = ll_height + ll_flower /2lws_pointapi[4].xpos = ll_xpos + ll_flower - ll_flower / 2 lws_pointapi[4].ypos = ll_height + ll_flower/2ll_handle = CreatePolygonRgn(lws_pointapi[], 4, 1)for ll_i = 1 to ll_xnum + 1ll_y = ll_ypos - ll_flowerll_x = ll_xpos + ll_flower * ( ll_i - 1 )ll_data = CreateEllipticRgn(ll_x, ll_y, ll_x + ll_flower, ll_y + ll_flower) CombineRgn(ll_handle, ll_handle, ll_data, 2)nextfor ll_i = 1 to ll_ynum + 1ll_y = ll_ypos + ll_flower * ( ll_i - 1 )ll_x = ll_xpos + ll_flower * ll_xnumll_data = CreateEllipticRgn(ll_x, ll_y, ll_x + ll_flower, ll_y + ll_flower) CombineRgn(ll_handle, ll_handle, ll_data, 2)nextfor ll_i = 1 to ll_xnum + 1ll_y = ll_ypos + ll_flower * ll_ynumll_x = ll_xpos + ll_flower * (ll_xnum - ll_i + 1)ll_data = CreateEllipticRgn(ll_x, ll_y, ll_x + ll_flower, ll_y + ll_flower) CombineRgn(ll_handle, ll_handle, ll_data, 2)nextfor ll_i = 1 to ll_ynum + 1ll_y = ll_ypos + ll_flower * (ll_ynum - ll_i + 1)ll_x = ll_xposll_data = CreateEllipticRgn(ll_x, ll_y, ll_x + ll_flower, ll_y + ll_flower) CombineRgn(ll_handle, ll_handle, ll_data, 2)nextSetwindowRgn(handle(parent), ll_handle, true)end eventtype cb_10 from commandbutton within w_buttoninteger x = 1216integer y = 1096integer width = 562integer height = 148integer taborder = 60integer textsize = -12integer weight = 700fontcharset fontcharset = gb2312charset!fontpitch fontpitch = variable!string facename = "宋体"string text = "关闭窗口"end typeevent clicked;close(parent)end eventtype em_3 from editmask within w_button event editchanged pbm_enchange integer x = 1289integer y = 104integer width = 251integer height = 92integer taborder = 60integer textsize = -9integer weight = 400fontcharset fontcharset = gb2312charset! fontpitch fontpitch = variable!string facename = "宋体"long textcolor = 33554432long backcolor = 17725690string text = "14"alignment alignment = right!borderstyle borderstyle = stylelowered! string mask = "###"boolean autoskip = trueboolean spin = truedouble increment = 5string minmax = "0~~255"end typeevent editchanged;wf_set_color()end eventtype em_2 from editmask within w_button event editchanged pbm_enchange integer x = 1024integer y = 104integer width = 251integer height = 92integer taborder = 60integer textsize = -9integer weight = 400fontcharset fontcharset = gb2312charset! fontpitch fontpitch = variable!string facename = "宋体"long textcolor = 33554432long backcolor = 17725690string text = "120"alignment alignment = right! borderstyle borderstyle = stylelowered! string mask = "###"boolean autoskip = trueboolean spin = truedouble increment = 5string minmax = "0~~255"end typeevent editchanged;wf_set_color()end eventtype em_1 from editmask within w_button event editchanged pbm_enchange integer x = 759integer y = 104integer width = 251integer height = 92integer taborder = 60integer textsize = -9integer weight = 400fontcharset fontcharset = gb2312charset! fontpitch fontpitch = variable!string facename = "宋体"long textcolor = 33554432long backcolor = 17725690string text = "250"alignment alignment = right!borderstyle borderstyle = stylelowered!string mask = "###"boolean autoskip = trueboolean spin = truedouble increment = 5string minmax = "0~~255"end typeevent editchanged;wf_set_color()end eventtype cb_9 from commandbutton within w_buttoninteger x = 590integer y = 1096integer width = 562integer height = 148integer taborder = 50integer textsize = -12integer weight = 700fontcharset fontcharset = gb2312charset!fontpitch fontpitch = variable!string facename = "宋体"string text = "圆形花边"end typeevent clicked;//////////////////////////////////////////////////// // // 测试用数据(窗口多边形) //// // //////////////////////////////////////////////////long ll_handle, ll_dataws_position lws_pointapi[]long ll_xpos, ll_ypos, ll_width, ll_heightlong ll_xnum, ll_ynumlong ll_x, ll_y, ll_flower = 20long ll_i, ll_kll_xpos = 1ll_ypos = 1ll_width = UnitsToPixels(parent.width, xunitstopixels!) ll_height = UnitsToPixels(parent.height, yunitstopixels!)ll_xpos = ll_xpos + 5ll_ypos = ll_ypos + 25 + ll_flowerll_width = ll_width - 20ll_width = ll_width - mod(ll_width - ll_xpos, ll_flower) ll_xnum = (ll_width - ll_xpos) / ll_flowerll_height = ll_height - 20ll_height = ll_height - mod(ll_height - ll_ypos, ll_flower) ll_ynum = (ll_height - ll_ypos) / ll_flowerlws_pointapi[1].xpos = ll_xpos + ll_flowerlws_pointapi[1].ypos = ll_yposlws_pointapi[2].xpos = ll_widthlws_pointapi[2].ypos = ll_yposlws_pointapi[3].xpos = ll_widthlws_pointapi[3].ypos = ll_heightlws_pointapi[4].xpos = ll_xpos + ll_flowerlws_pointapi[4].ypos = ll_heightll_handle = CreatePolygonRgn(lws_pointapi[], 4, 1)for ll_i = 1 to ll_xnum + 1ll_y = ll_ypos - ll_flowerll_x = ll_xpos + ll_flower * ( ll_i - 1 )ll_data = CreateEllipticRgn(ll_x, ll_y, ll_x + ll_flower, ll_y + ll_flower) CombineRgn(ll_handle, ll_handle, ll_data, 2)nextfor ll_i = 1 to ll_ynum + 1ll_y = ll_ypos + ll_flower * ( ll_i - 1 )ll_x = ll_xpos + ll_flower * ll_xnumll_data = CreateEllipticRgn(ll_x, ll_y, ll_x + ll_flower, ll_y + ll_flower) CombineRgn(ll_handle, ll_handle, ll_data, 2)nextfor ll_i = 1 to ll_xnum + 1ll_y = ll_ypos + ll_flower * ll_ynumll_x = ll_xpos + ll_flower * (ll_xnum - ll_i + 1)ll_data = CreateEllipticRgn(ll_x, ll_y, ll_x + ll_flower, ll_y + ll_flower) CombineRgn(ll_handle, ll_handle, ll_data, 2)nextfor ll_i = 1 to ll_ynum + 1ll_y = ll_ypos + ll_flower * (ll_ynum - ll_i + 1)ll_x = ll_xposll_data = CreateEllipticRgn(ll_x, ll_y, ll_x + ll_flower, ll_y + ll_flower) CombineRgn(ll_handle, ll_handle, ll_data, 2)nextSetwindowRgn(handle(parent), ll_handle, true)end eventtype cb_8 from commandbutton within w_buttoninteger x = 1216integer y = 628integer width = 562integer height = 148integer taborder = 30integer textsize = -12integer weight = 700fontcharset fontcharset = gb2312charset!fontpitch fontpitch = variable!string facename = "宋体"string text = "圆形窗口"end typeevent clicked;//////////////////////////////////////////////////// // // 测试用数据(窗口多边形) //// // //////////////////////////////////////////////////long ll_x1, ll_x2, ll_x3long ll_y1, ll_y2, ll_y3long ll_handlelong ll_datall_data = UnitsToPixels(parent.width, xunitstopixels!)ll_data = PixelsToUnits(ll_data, ypixelstounits!) parent.height = ll_datall_x1 = 10ll_y1 = 25ll_x2 = UnitsToPixels(parent.width, xunitstopixels!) - 10 ll_y2 = UnitsToPixels(parent.height, yunitstopixels!) - 10 ll_handle = CreateEllipticRgn(ll_x1, ll_y1, ll_x2, ll_y2) SetwindowRgn(handle(parent), ll_handle, true)return 1end eventtype cb_7 from commandbutton within w_button integer x = 585integer y = 940integer width = 562integer height = 148integer taborder = 40integer textsize = -12integer weight = 700fontcharset fontcharset = gb2312charset!fontpitch fontpitch = variable!string facename = "宋体"string text = "波浪花边"end typeevent clicked;long ll_xpos, ll_ypos, ll_width, ll_height long ll_x, ll_y, ll_flower = 80long ll_i, ll_k, ll_max = 40, ll_min = 35long ll_handlews_position lws_pointapi[]ll_xpos = 1ll_ypos = 1ll_width = UnitsToPixels(parent.width, xunitstopixels!) ll_height = UnitsToPixels(parent.height, yunitstopixels!)ll_k = 1for ll_i = 1 to ll_flowerif mod(ll_i, 2) = 0 thenll_y = ll_ypos + ll_maxelsell_y = ll_ypos + ll_minend ifll_x = ll_xpos + ll_width / ll_flower * ll_ilws_pointapi[ll_k].xpos = ll_xlws_pointapi[ll_k].ypos = ll_yll_k ++nextfor ll_i = 1 to ll_flowerif mod(ll_i, 2) = 0 thenll_x = ll_width - 5elsell_x = ll_width - ll_max + ll_min - 5end ifll_y = ll_ypos + ll_height / ll_flower * ll_i + ll_minlws_pointapi[ll_k].xpos = ll_xlws_pointapi[ll_k].ypos = ll_yll_k ++nextfor ll_i = 1 to ll_flowerif mod(ll_i, 2) = 1 thenll_y = ll_height - 5elsell_y = ll_height - ll_max + ll_min - 5end ifll_x = ll_width - ll_width / ll_flower * ll_i - 5lws_pointapi[ll_k].xpos = ll_xlws_pointapi[ll_k].ypos = ll_yll_k ++nextfor ll_i = 1 to ll_flowerif mod(ll_i, 2) = 1 thenll_x = ll_xpos + 5elsell_x = ll_xpos + ll_max - ll_min + 5end ifll_y = ll_height - ll_height / ll_flower * ll_i + ll_minlws_pointapi[ll_k].xpos = ll_xlws_pointapi[ll_k].ypos = ll_yll_k ++nextll_handle = CreatePolygonRgn(lws_pointapi[], upperbound(lws_pointapi), 1) //其中第 1 个参数为多边形各个顶点坐标值的数组//其中第 2 个参数为多边形边数,可修改,配合数组值//其中第 3 个参数为填充模式ALTERNATE /WINDINGSetwindowRgn(handle(parent), ll_handle, true)end eventtype cb_6 from commandbutton within w_buttoninteger x = 585integer y = 784integer width = 562integer height = 148integer taborder = 30integer textsize = -12integer weight = 700fontcharset fontcharset = gb2312charset!fontpitch fontpitch = variable!string facename = "宋体"string text = "八边形窗口"end typeevent clicked;//////////////////////////////////////////////////// // // 测试用数据(窗口多边形) //// // //////////////////////////////////////////////////long ll_handlews_position lws_pointapi[]// 图形2int li_xpos, li_ypos, li_width, li_heightli_xpos = 12li_ypos = 1li_width = UnitsToPixels(parent.width, xunitstopixels!) - 32li_height = UnitsToPixels(parent.height, yunitstopixels!) - 32lws_pointapi[1].xpos = li_xposlws_pointapi[1].ypos = li_ypos + li_height / 3lws_pointapi[2].xpos = li_xpos + li_width / 3 lws_pointapi[2].ypos = li_yposlws_pointapi[3].xpos = li_xpos + li_width * 2 / 3 lws_pointapi[3].ypos = li_yposlws_pointapi[4].xpos = li_xpos + li_widthlws_pointapi[4].ypos = li_ypos + li_height / 3lws_pointapi[5].xpos = li_xpos + li_widthlws_pointapi[5].ypos = li_ypos + li_height * 2 / 3lws_pointapi[6].xpos = li_xpos + li_width * 2 / 3 lws_pointapi[6].ypos = li_ypos + li_heightlws_pointapi[7].xpos = li_xpos + li_width / 3 lws_pointapi[7].ypos = li_ypos + li_heightlws_pointapi[8].xpos = li_xposlws_pointapi[8].ypos = li_ypos + li_height * 2 / 3ll_handle = CreatePolygonRgn(lws_pointapi[], 8, 1)//其中第1 个参数为多边形各个顶点坐标值的数组//其中第2 个参数为多边形边数,可修改,配合数组值//其中第3 个参数为填充模式ALTERNATE /WINDINGSetwindowRgn(handle(parent), ll_handle, true)return 1end eventtype cb_5 from commandbutton within w_button integer x = 1216integer y = 940integer width = 562integer height = 148integer taborder = 20integer textsize = -12integer weight = 700fontcharset fontcharset = gb2312charset!fontpitch fontpitch = variable!string facename = "宋体"string text = "还原窗口"end typeevent clicked;//////////////////////////////////////////////////// // // 测试用数据(窗口多边形) //// // //////////////////////////////////////////////////long ll_handlews_position lws_pointapi[]// 图形2int li_xpos, li_ypos, li_width, li_heightli_xpos = 1li_ypos = 1li_width = UnitsToPixels(parent.width, xunitstopixels!)li_height = UnitsToPixels(parent.height, yunitstopixels!)lws_pointapi[1].xpos = li_xposlws_pointapi[1].ypos = li_yposlws_pointapi[2].xpos = li_xpos + li_widthlws_pointapi[2].ypos = li_yposlws_pointapi[3].xpos = li_xpos + li_widthlws_pointapi[3].ypos = li_ypos + li_heightlws_pointapi[4].xpos = li_xposlws_pointapi[4].ypos = li_ypos + li_heightll_handle = CreatePolygonRgn(lws_pointapi[], 4, 1)//其中第1 个参数为多边形各个顶点坐标值的数组//其中第2 个参数为多边形边数,可修改,配合数组值//其中第3 个参数为填充模式ALTERNATE /WINDINGSetwindowRgn(handle(parent), ll_handle, true)return 1end eventtype cb_4 from commandbutton within w_buttoninteger x = 585integer y = 628integer width = 562integer height = 148integer taborder = 30integer textsize = -12integer weight = 700fontcharset fontcharset = gb2312charset!fontpitch fontpitch = variable!string facename = "宋体"string text = "椭圆形窗口"end typeevent clicked;//////////////////////////////////////////////////// // // 测试用数据(窗口多边形) //// // //////////////////////////////////////////////////long ll_x1, ll_x2, ll_x3long ll_y1, ll_y2, ll_y3long ll_handleparent.width = 2400parent.height = 1800ll_x1 = 10ll_y1 = 25ll_x2 = UnitsToPixels(parent.width, xunitstopixels!) - 10 ll_y2 = UnitsToPixels(parent.height, yunitstopixels!) - 10ll_handle = CreateEllipticRgn(ll_x1, ll_y1, ll_x2, ll_y2) SetwindowRgn(handle(parent), ll_handle, true)return 1end eventtype cb_3 from commandbutton within w_button integer x = 1216integer y = 472integer width = 562integer height = 148integer taborder = 20integer textsize = -12integer weight = 700fontcharset fontcharset = gb2312charset!fontpitch fontpitch = variable!string facename = "宋体"string text = "菱形窗口"end typeevent clicked;//////////////////////////////////////////////////// // // 测试用数据(窗口多边形) //// // //////////////////////////////////////////////////long ll_handlews_position lws_pointapi[]// 图形2int li_xpos, li_ypos, li_width, li_heightli_xpos = 1li_ypos = 1li_width = UnitsToPixels(parent.width, xunitstopixels!)li_height = UnitsToPixels(parent.height, yunitstopixels!)lws_pointapi[1].xpos = li_xposlws_pointapi[1].ypos = li_ypos + li_height / 2lws_pointapi[2].xpos = li_xpos + li_width / 2lws_pointapi[2].ypos = li_yposlws_pointapi[3].xpos = li_xpos + li_widthlws_pointapi[3].ypos = li_ypos + li_height / 2lws_pointapi[4].xpos = li_xpos + li_width / 2lws_pointapi[4].ypos = li_ypos + li_heightll_handle = CreatePolygonRgn(lws_pointapi[], 4, 1)//其中第1 个参数为多边形各个顶点坐标值的数组//其中第2 个参数为多边形边数,可修改,配合数组值//其中第3 个参数为填充模式ALTERNATE /WINDINGSetwindowRgn(handle(parent), ll_handle, true)return 1end eventtype cb_2 from commandbutton within w_button integer x = 585integer y = 472integer width = 562integer height = 148integer taborder = 20integer textsize = -12integer weight = 700fontcharset fontcharset = gb2312charset! fontpitch fontpitch = variable!string facename = "宋体"string text = "圆角矩形按钮"end typeevent clicked;this.enabled = falseof_set_oval(this)end eventtype cb_1 from commandbutton within w_buttoninteger x = 1216integer y = 784integer width = 562integer height = 148integer taborder = 10integer textsize = -12integer weight = 700fontcharset fontcharset = gb2312charset!fontpitch fontpitch = variable!string facename = "宋体"string text = "圆角矩形窗口"end typeevent clicked;//////////////////////////////////////////////////// // // 测试用数据(窗口多边形) //// // //////////////////////////////////////////////////long ll_x1, ll_x2, ll_x3long ll_y1, ll_y2, ll_y3long ll_handlell_x1 = 4ll_y1 = 4ll_x2 = UnitsToPixels(parent.width, xunitstopixels!) - 4ll_y2 = UnitsToPixels(parent.height, yunitstopixels!) - 4ll_x3 = 250ll_y3 = 250ll_handle = CreateRoundRectRgn(ll_x1, ll_y1, ll_x2, ll_y2, ll_x3, ll_y3) SetwindowRgn(handle(parent), ll_handle, true)return 1end eventtype st_1 from statictext within w_buttoninteger x = 567integer y = 200integer width = 1207integer height = 264boolean bringtotop = trueinteger textsize = -8integer weight = 400fontcharset fontcharset = gb2312charset! fontpitch fontpitch = variable!string facename = "宋体"long textcolor = 33554432long backcolor = 17725690alignment alignment = center! boolean focusrectangle = falseend typeevent clicked;if this.width <= 1000 then this.resize(1586, 2164)elsethis.resize(986, 264)end ifend event。
PB数据窗口常用函数方法
PB数据窗口常用函数方法在PB(PowerBuilder)中,数据窗口是一种非常常用的控件,用于显示和处理数据。
以下是一些PB数据窗口常用的函数方法:1. SetItem(li_row, ls_column, ls_value): 可以用来设置指定行列位置的单元格的值。
2. GetItemString(li_row, ls_column): 返回指定行列位置的单元格的字符串值。
3. SetItemStatus(li_row, ls_column, lsb_update): 可以设置指定单元格的更新状态,lsb_update为TRUE表示有更新,FALSE表示没有更新。
5. Retrieve(: 用于从数据库中检索数据并在数据窗口中显示。
6. Modify("sql"): 可以修改数据窗口的检索SQL语句,并重新检索数据。
7. InsertRow(li_row): 插入一行数据。
8. DeleteRow(li_row): 删除指定行数据。
9. Update(: 保存对数据窗口中数据的修改到数据库。
10. ResetUpdate(: 取消对数据窗口中数据的修改。
11. Reset(: 清空数据窗口中的所有数据。
12. SelectRow(li_row, lsb_select): 可以选择或取消选择指定行。
13. SelectText(li_start, li_end): 可以选择指定行列范围的文本。
14. GetColumnName(li_column): 返回指定列索引的列名。
15. GetColumnCount(: 返回数据窗口中的列数。
16. GetRowCount(: 返回数据窗口的行数。
17. GetRow(: 返回当前选中行的索引。
18. Find("value"): 在数据窗口中查找指定值,并返回先找到的行索引。
19. FindNext("value"): 在数据窗口中继续查找指定值,并返回下一个找到的行索引。
在PB帮助中send函数说明
在PB帮助中,send函数说明message#An UnsignedInteger whose value is the system message number of the message you want to send这其中的message#就是楼上说的WM_COMMAND,其定义可以从微软的SDK中的WINDOWS.H中找到。
WM_NULL = $0000;WM_CREA TE = $0001;应用程序创建一个窗口WM_DESTROY= $0002;一个窗口被销毁WM_MOVE = $0003;移动一个窗口WM_SIZE = $0005;改变一个窗口的大小WM_ACTIV A TE = $0006;一个窗口被激活或失去激活状态;WM_SETFOCUS = $0007;获得焦点后WM_KILLFOCUS = $0008;失去焦点WM_ENABLE = $000A;改变enable状态WM_SETREDRA W = $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_ACTIV A TEAPP = $001C;发此消息给应用程序哪个窗口是激活的,哪个是非激活的;WM_FONTCHANGE = $001D;当系统的字体资源库变化时发送此消息给所有顶级窗口WM_TIMECHANGE = $001E;当系统的时间变化时发送此消息给所有顶级窗口WM_CANCELMODE = $001F;发送此消息来取消某种正在进行的摸态(操作)WM_SETCURSOR = $0020;如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口WM_MOUSEACTIV A TE = $0021;当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口WM_CHILDACTIV A TE = $0022;发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小WM_QUEUESYNC = $0023;此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序分离出用户输入消息WM_GETMINMAXINFO = $0024;此消息发送给窗口当它将要改变大小或位置;WM_PAINTICON = $0026;发送给最小化窗口当它图标将要被重画WM_ICONERASEBKGND = $0027;此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画WM_NEXTDLGCTL = $0028;发送此消息给一个对话框程序去更改焦点位置WM_SPOOLERSTA TUS = $002A;每当打印管理列队增加或减少一条作业时发出此消息WM_DRA WITEM = $002B;当button,combobox,listbox,menu的可视外观改变时发送此消息给这些空件的所有者WM_MEASUREITEM = $002C;当button, combo box, list box, list view control, or menu item 被创建时发送此消息给控件的所有者WM_DELETEITEM = $002D;当the list box 或combo box 被销毁或当某些项被删除通过LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_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_COPYDA TA= $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_NOTIFYformA T = $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_NCCREA TE = $0081;当某个窗口第一次被创建时,此消息在WM_CREA TE消息发送前发送;WM_NCDESTROY= $0082;此消息通知某个窗口,非客户区正在销毁WM_NCCALCSIZE = $0083;当某个窗口的客户区域必须被核算时发送此消息WM_NCHITTEST = $0084;//移动鼠标,按住或释放鼠标时发生WM_NCPAINT = $0085;程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时;WM_NCACTIV A TE = $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;file://按/下鼠标左键WM_LBUTTONUP = $0202;file://释/放鼠标左键还有: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_MDICREA TE = $0220;应用程序发送此消息给多文档的客户窗口来创建一个MDI 子窗口WM_MDIDESTROY= $0221;应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口WM_MDIACTIV A TE = $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_MOUSELEA VE = $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_RENDERformA T = $0305;WM_RENDERALLformA TS = $0306;WM_DESTROYCLIPBOARD = $0307;当调用ENPTYCLIPBOARD函数时发送此消息给剪贴板的所有者WM_DRA WCLIPBOARD = $0308;当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口;它允许用剪贴板观察窗口来显示剪贴板的新内容;WM_PAINTCLIPBOARD = $0309;当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画;WM_VSCROLLCLIPBOARD = $030A;WM_SIZECLIPBOARD = $030B;当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者;WM_ASKCBformA TNAME = $030C;通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字WM_CHANGECBCHAIN = $030D;当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口;WM_HSCROLLCLIPBOARD = $030E;此消息通过一个剪贴板观察窗口发送给剪贴板的所有者;它发生在当剪贴板包含CFOWNERDISPALY格式的数据并且有个事件在剪贴板观察窗的水平滚动条上;所有者应滚动剪贴板图象并更新滚动条的值;WM_MOUSEFIRST = $0200;WM_MOUSEMOVE = $0200;// 移动鼠标WM_LBUTTONDOWN = $0201;file://按/下鼠标左键WM_LBUTTONUP = $0202;file://释/放鼠标左键WM_LBUTTONDBLCLK = $0203;file://双/击鼠标左键WM_RBUTTONDOWN = $0204;file://按/下鼠标右键WM_RBUTTONUP = $0205;file://释/放鼠标右键WM_RBUTTONDBLCLK = $0206;file://双/击鼠标右键WM_MBUTTONDOWN = $0207;file://按/下鼠标中键WM_MBUTTONUP = $0208;file://释/放鼠标中键WM_MBUTTONDBLCLK = $0209;file://双/击鼠标中键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_MDICREA TE = $0220;应用程序发送此消息给多文档的客户窗口来创建一个MDI 子窗口WM_MDIDESTROY= $0221;应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口WM_MDIACTIV A TE = $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_MOUSELEA VE = $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_RENDERformA T = $0305;WM_RENDERALLformA TS = $0306;WM_DESTROYCLIPBOARD = $0307;当调用ENPTYCLIPBOARD函数时发送此消息给剪贴板的所有者WM_DRA WCLIPBOARD = $0308;当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口;它允许用剪贴板观察窗口来显示剪贴板的新内容;WM_PAINTCLIPBOARD = $0309;当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画;WM_VSCROLLCLIPBOARD = $030A;WM_SIZECLIPBOARD = $030B;当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者;WM_ASKCBformA TNAME = $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_INITIA TE = WM_DDE_FIRST + 0;一个DDE客户程序提交此消息开始一个与服务器程序的会话来响应那个指定的程序和主题名;WM_DDE_TERMINA TE = 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_DA TA, WM_DDE_ADVISE, WM_DDE_UNADVISE, or WM_DDE_INITIA T消息WM_DDE_DA TA= 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;此消息能帮助应用程序自定义私有消息;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_INITIA TE = WM_DDE_FIRST + 0;一个DDE客户程序提交此消息开始一个与服务器程序的会话来响应那个指定的程序和主题名;WM_DDE_TERMINA TE = 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_DA TA, WM_DDE_ADVISE, WM_DDE_UNADVISE, or WM_DDE_INITIA T消息WM_DDE_DA TA= 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;此消息能帮助应用程序自定义私有消息;/////////////////////////////////////////////////////////////////////通知消息(Notification message)是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通知父窗口。
在PB中实现系统热键功能的新方法
在PB中实现系统热键功能的新方法本方法可以实现在任何时候,即无论你的窗口是不是当前获得焦点的窗口,还是处于系统图标区,只要用户按下热键,都将触发窗口中的事件,在本例中实现窗口的状态切换。
1、首先我们必须声明Windows API的外部函数:FUNCTION Integer GlobalAddAtom(ref string lpString) LIBRARY "kernel32.dll" ALIAS FOR "GlobalAddAtomA" FUNCTION ulong RegisterHotKey(ulong hwnd,ulong id,ulong fsModifiers,ulong vk) LIBRARY "user32.dll"2、接下来,我们必须给一些需要用到的定量赋上初始值。
Public:constant integer MOD_ALT = 1constant integer MOD_CONTROL = 2constant integer MOD_SHIFT = 43、接下来,我们必须利用下面代码在系统中注册我们要使用的热键://在窗口的Open事件中long ll_RCstring ls_strls_str = "My atom ID"atomid = GlobalAddAtom(ls_str) //得到唯一的ID,保证不和其他应用程序发生冲突ll_RC = RegisterHotKey(Handle(this), atomid, MOD_ALT + MOD_CONTROL, 65) // 65为'A'//注册的热键为Ctrl+Alt+Aif ll_RC = 0 thenmessagebox("错误","错误信息")end if4、最后,编写当用户按下热键时的处理程序://在窗口的Other事件中IF wparam = atomid THENThis.Show()//在这里编写处理程序END IF。
[整理版]PB9.0实验操作说明
PB9.0实验操作说明实验步骤:一、建立数据库1.创建数据库exam_pb2.建立表 students3.为表students指定主键为“学号”4.向表中输入数据二、建立应用程序1.建立工作空间“练习一”2.建立应用程序“test”3.建数据窗口dw_15.建应用程序窗口w_main6在应用程序窗口中添加控件7.为数据窗口指定目标对象“student” 为主窗口定义标题!为控件定义标题!8.为应用程序和控件编写脚本一定要保存窗口!!① 应用程序test脚本:open(w_main) ——打开主窗口②应用程序窗口w_main的各个脚本:w_main open事件的脚本:SQLCA.DBMS = "ODBC"SQLCA.AutoCommit = FalseSQLCA.DBParm ="Connectstring='DSN=exam_pb;uid=dba;pwd=sql'"connect using sqlca;dw_1.settransobject(sqlca)“增加”命令按钮click事件的脚本:dw_1.insertrow(0)dw_1.setfocus()“删除”命令按钮click的脚本:dw_1.deleterow(0)“检索”命令按钮click的脚本:dw_1.retrieve()“过滤”命令按钮click的脚本:w_main.dw_1.setfilter("系别='计算机系'")w_main.dw_1.filter()“保存”命令按钮click的脚本:dw_1.update()“退出”命令按钮click的脚本:close(parent)三、连接数据库1.建立ODBC数据源“exam_pb” 用户名:dba 密码: sql 考试时也是这个2.建立数据库描述文件“exam_pb” 预览和测试!!3.连接数据源四、运行程序------------------------------实验步骤:一、建立工作空间“练习二”二、建立应用程序“test”三、建立主窗口“w_main” 为主窗口定义标题!!保存!!为应用程序test编写脚本“open(w_main)”四、建立菜单“m_main” 为菜单添加子菜单项!!为子菜单项定义标题!!五、将菜单挂在主窗口上保存时刻不要忘记六、建立计算器窗口“calculator” 为计算器窗口定义标题!!1.为计算器窗口添加控件此窗口包含三个静态文本框控件三个单行编辑框控件五个命令按钮!清空单行编辑框中的“none”字符2.为各个控件编写脚本①为“加”命令按钮编写脚本:real m,nm=real(sle_1.text)n=real(sle_2.text)sle_3.text=string(m+n)②为“减”命令按钮编写脚本:real m,nm=real(sle_1.text)n=real(sle_2.text)sle_3.text=string(m - n) 一定要注意m的后面和n的前面要有空格。
PB中很实用的小技巧
PB中很实用的小技巧1.RGB函数计算公式: 颜色值= (65536 * Blue) + (256 * Green) + (Red)2.控件可拖动:send(handle(this),274,61458,0)3.如何用程序控制下拉子数据窗口的下拉和收起用modify或者直接用dw_1.object.col1.dddw.showlist = true4.检索参数有些不需要传入则传%.5.如何屏蔽鼠标滚轮触发在控件的other事件写if message.number = 522 then return 16.得到数据窗口的语法:string ls_dwsyntaxls_dwsyntax=dw_1.describe("datawindow.syntax")7.得到数据窗口中各列及标题:long ll_count,istring ls_value,ls_colnamell_colnum = Long(dw_1.object.datawindow.column.count)for i = 1 to ll_colnum//得到标题头的名字ls_colname = dw_1.describe('#' + string(i) + ".name") + "_t"ls_value = dw_1.describe(ls_colname + ".text")next8.在程序中动态设置初始值:ex:dw_contro.object.columnName.initial = 'xxxx'9.如何在DataWindow的SQL语法中不使用SELECT DISTINCT 实现删除重复的行---- 起先对你要显示唯一值的列进行排序:"city A",然后增加如下过滤字符串:" city < > city [-1] or GetRow () = 1"10.如何改变列的字体颜色,提醒用户此列已做修改---- 在列的Color属性中,输入如下表达式IF (column_name< >column_name.Original, RGB(255, 0, 0), RGB(0, 0, 0))。
用PB做一个通用右键菜单
用PB做一个通用右键菜单用PB做一个通用右键菜单一、创建弹出菜单m_popup创建一个菜单m_popup,定义菜单条m_main,其下有十五个菜单项,分别命名为m_item1,m_item2,……m_item15,各项的显示文本(text)分别为item1,item2,……item15;为m_popup菜单定义一个Powerobject类型的Instance变量:Anyobject脚本为:Powerobject Anyobject给m_item1,m_item2,……m_item15各菜单项的Clicked事件下分别输入脚本:Anyobject.triggerevent("ue_item1")//m_item1的clicked事件Anyobject.triggerevent("ue_item2")……Anyobject.triggerevent("ue_item15")---- 4、定义几个菜单函数:---- 1) setmenuitem(string itemstring),返回值为Null。
---- 参数Itemstring是由多个子串组成的。
各个子串间用“|”间隔,每个子串为一个菜单项的显示文本(text)。
---- 该函数功能是把itemstring分解为多个子串,并把子串赋给相应菜单项的text。
脚本如下:int itempos,itemorder=1,istring currentitemif len(itemstring)=0 then returnitempos=pos(itemstring,"|")DO WHILE itempos<>0// itempos为间隔符"|"的位置currentitem=left(itemstring,itempos -1)//取出子串itemstring=mid(itemstring, itempos+1)this.m_main.item[itemorder].text=currentitemitempos=pos(itemstring,"|")itemorder++LOOPthis.m_main.item[itemorder].text=itemstringfor i=1 to itemorderthis.m_main.item[i].visible=truethis.m_main.item[i].enabled=trueend iffor i=itemorder+1 to 15this.m_main.item[i].visible=falsenext2)setitemdisable(integer itemorder) 返回值Null。
Pb中利用热键将所需的文本输入到当前程序的输入框中
Pb中利用热键将所需的文本输入到当前程序的输入框中用户对象forwardglobal type uo_ime from nonvisualobjectend typeend forwardshared variables//简体中文constant long IME_CHOTKEY_IME_NONIME_TOGGLE = 16 //切换中英文输入法constant long IME_CHOTKEY_SHAPE_TOGGLE = 17 //切换半角和全角constant long IME_CHOTKEY_SYMBOL_TOGGLE = 18 //切换中文标点和英文标点constant long IME_CHOTKEY_LAST = 47end variablesglobal type uo_ime from nonvisualobject autoinstantiateend typetype prototypesfunction long ImmSimulateHotKey(long h,long hkey) library 'IMM32.dll'function long GetKeyboardLayout(long h) library'user32.dll'function boolean ImmIsIME(long h) library 'IMM32.dll' end prototypestype variablesend variablesforward prototypespublic subroutine of_to_chinese (long h)public subroutine of_to_english (long h)public function boolean of_is_chinese (long h)end prototypespublic subroutine of_to_chinese (long h);longlcurrent_imelcurrent_ime = getkeyboardlayout(0)if not immisime(lcurrent_ime) thenImmSimulateHotKey(h,IME_CHOTKEY_IME_NONIME_TOGGLE)// hkey) end ifend subroutinepublic subroutine of_to_english (long h);long lcurrent_imelcurrent_ime = getkeyboardlayout(0)if immisime(lcurrent_ime) thenImmSimulateHotKey(h,IME_CHOTKEY_IME_NONIME_TOGGLE)end ifend subroutinepublic function boolean of_is_chinese (long h);long lcurrent_imelcurrent_ime = getkeyboardlayout(0)return immisime(lcurrent_ime)end functionon uo_ime.createcall super::createTriggerEvent( this, "constructor" )end onon uo_ime.destroyTriggerEvent( this, "destructor" )call super::destroyend oneventconstructor;/********************************************* *****中英文输入法切换对象:of_to_chinese( /*long h */) return (None)功能:把句柄为h的窗口的输入法切换为中文of_to_english( /*long h */) return (None)功能:把句柄为h的窗口的输入法切换为英文of_is_chinese( /*long h */) return boolean功能:判断句柄为h的窗口的输入法是否为中文New by njz Jysoft 2006-09-02**************************************************/ end event主窗体forwardglobal type w_main from windowend typetype st_2 from statictext within w_mainend typetype st_1 from statictext within w_mainend typetype sle_1 from singlelineedit within w_main end typeend forwardglobal type w_main from windowinteger width = 2075integer height = 720boolean titlebar = truestring title = "按F3将文本框内容复制到其他程序中" boolean controlmenu = trueboolean minbox = trueboolean maxbox = trueboolean resizable = truelong backcolor = 67108864string icon = "AppIcon!"boolean center = truest_2 st_2st_1 st_1sle_1 sle_1end typeglobal w_main w_maintype prototypesFUNCTION Integer GlobalAddAtom(ref string lpString) LIBRARY "kernel32.dll" ALIAS FOR "GlobalAddAtomA" //hwnd参数用于指定使用本热键的窗口句柄,id参数用于指定一个惟一的ID,fsModifiers参数指明辅助键值(Alt、Ctrl、Shift等),vk参数指明虚拟键的ASCII码FUNCTION ulong RegisterHotKey(ulong hwnd,ulongid,ulong fsModifiers,ulong vk) LIBRARY "user32.dll" FUNCTION ulong UnregisterHotKey( ulong hWnd, ulong id ) LIBRARY "user32.dll"Function int GetKeyState(integer VirtualKeycode) Library "User32.dll"SUBROUTINE keybd_event(INT bvk,INT bscan,INT dwflags, INT dwextrainfo) LIBRARY "user32.dll" FUNCTION ulong GetForegroundWindow() LIBRARY "user32.dll"FUNCTION ulong GetWindowText(ulong hwnd,ref string lpString,ulong cch) LIBRARY "user32.dll" ALIAS FOR "GetWindowTextA"Function long SendMessage(long hwnd,long wMsg,long wParam,string lParam) Library "user32.dll" Alias for "SendMessageA"end prototypestype variablesint atomidconstant integer MOD_ALT = 1constant integer MOD_CONTROL = 2constant integer MOD_SHIFT = 4//键盘常用ASCII码//~`键Constant integer VK_BackQuote = 192 //_-键Constant integer VK_Dash = 189//+=键Constant integer VK_Equal = 187//{[键Constant integer VK_LeftBracket = 219 //}]键Constant integer VK_RightBracket = 221 //|\键Constant integer VK_BackSlash = 220 //?/键Constant integer VK_Slash = 191//:;键Constant integer VK_SemiColon = 186 //"'键Constant integer VK_Quote = 222//<,键Constant integer VK_Comma = 188//>.键Constant integer VK_Period = 190//ESC键Constant integer VK_ESCAPE = 27 //回车键Constant integer VK_Enter = 13//TAB键Constant integer VK_TAB = 9//Caps Lock键Constant integer VK_CapsLock = 20 //Shift键Constant integer VK_SHIFT = 16//Ctrl键Constant integer VK_CONTROL = 17 //Alt键Constant integer VK_MENU = 18//空格键Constant integer VK_Spacebar = 32 //退格键Constant integer VK_BACK = 8//左徽标键Constant integer VK_LWIN = 91//右徽标键Constant integer VK_RWIN = 92//鼠标右键快捷键:Constant integer VK_APPS = 93////Insert键Constant integer VK_INSERT = 45//Home键Constant integer VK_HOME = 36//PageUpConstant integer VK_PageUp = 33 //PageDownConstant integer VK_PageDown = 34 //End键Constant integer VK_END = 35//Delete键Constant integer VK_DELETE = 46////方向键(←)Constant integer VK_LEFTArrow = 37//方向键(↑)Constant integer VK_UPArrow = 38//方向键(→)Constant integer VK_RightArrow = 39 //方向键(↓)Constant integer VK_DOWNArrow = 40 //F1键Constant integer VK_F1 = 112//F2键Constant integer VK_F2 = 113//F3键Constant integer VK_F3 = 114//F4键Constant integer VK_F4 = 115//F5键Constant integer VK_F5 = 116//F6键Constant integer VK_F6 = 117//F7键Constant integer VK_F7 = 118//F8键Constant integer VK_F8 = 119//F9键Constant integer VK_F9 = 120//F10键Constant integer VK_F10 = 121//F11键Constant integer VK_F11 = 122//F12键Constant integer VK_F12 = 123//////Num Lock键Constant integer VK_NUMLOCK = 144 //小键盘0Constant integer VK_NUMPAD0 = 96 //小键盘1Constant integer VK_NUMPAD1 = 97 //小键盘2Constant integer VK_NUMPAD2 = 98 //小键盘3Constant integer VK_NUMPAD3 = 99 //小键盘4Constant integer VK_NUMPAD4 = 100//小键盘5Constant integer VK_NUMPAD5 = 101 //小键盘6Constant integer VK_NUMPAD6 = 102 //小键盘7Constant integer VK_NUMPAD7 = 103 //小键盘8Constant integer VK_NUMPAD8 = 104 //小键盘9Constant integer VK_NUMPAD9 = 105 //小键盘.Constant integer VK_DECIMAL = 110 //小键盘*Constant integer VK_MULTIPLY = 106 //小键盘+Constant integer VK_ADD = 107//小键盘-Constant integer VK_SUBTRACT = 109 //小键盘/Constant integer VK_DIVIDE = 111//////Pause Break键Constant integer VK_PAUSE = 19//printscreenconstant integer VK_PRINTSCREEN = 44//Scroll Lock键Constant integer VK_SCROLL = 145end variablesforward prototypespublic subroutine wf_char_code (string as, ref integer ai_vk, ref boolean ab_shift)public subroutine wf_paste (string as)end prototypespublic subroutine wf_char_code (string as, ref integer ai_vk, ref boolean ab_shift);choose case ascase ' 'ai_vk = VK_Spacebarab_shift = falsecase '~~'ai_vk = VK_BackQuoteab_shift = truecase '`'ai_vk = VK_BackQuoteab_shift = falsecase '_'ai_vk = VK_Dashab_shift = truecase '-'ai_vk = VK_Dashab_shift = falsecase '+'ai_vk = VK_Equalab_shift = truecase '='ai_vk = VK_Equalab_shift = falsecase '{'ai_vk = VK_LeftBracketab_shift = truecase '['ai_vk = VK_LeftBracketab_shift = falsecase '}'ai_vk = VK_RightBracketab_shift = truecase ']'ai_vk = VK_RightBracketab_shift = falsecase '|'ai_vk = VK_BackSlashab_shift = truecase '\'ai_vk = VK_BackSlashab_shift = falsecase '?'ai_vk = VK_Slashab_shift = truecase '/'ai_vk = VK_Slashab_shift = falsecase ':'ai_vk = VK_SemiColonab_shift = truecase ';'ai_vk = VK_SemiColonab_shift = falsecase '"'ai_vk = VK_Quoteab_shift = truecase "'"ai_vk = VK_Quoteab_shift = falsecase '<'ai_vk = VK_Commaab_shift = truecase ','ai_vk = VK_Commaab_shift = falsecase '>'ai_vk = VK_Periodab_shift = truecase '.'ai_vk = VK_Periodab_shift = falsecase elseif isnumber(as) thenai_vk = asc(as)ab_shift = falseelseif len(as) <> 1 thenai_vk = 0returnend ifchoose case asc(as)case 65 to 90 //大写字母ai_vk = asc(as)ab_shift = truecase 97 to 122 //小写字母ai_vk = asc(UPPER(as))ab_shift = falsecase elseai_vk = 0returnend chooseend ifend chooseend subroutinepublic subroutine wf_paste (string as);int i, j, vk boolean lb_s, lb_capslockuo_ime lnstring lsls = space(255)GetWindowText(GetForegroundWindow(), ls, 255)//以下功能暂时没有实现//if not ln.of_is_chinese(GetForegroundWindow()) then //如果目标程序使用的是中文输入法,则切换到英文// keybd_event(VK_CONTROL,0,0,0)// keybd_event(VK_Spacebar,0,0,0)// keybd_event(VK_Spacebar,0,2,0)// keybd_event(VK_CONTROL,0,2,0)//end iflb_capslock = GetKeyState(VK_CapsLock) = 1j = len(as)for i = 1 to jwf_char_code( mid(as, i, 1), vk, lb_s)if vk <= 0 then continueif vk >= 65 and vk <= 90 thenif (lb_capslock and lb_s) or (not lb_capslock and not lb_s) thenkeybd_event(vk,0,0,0)keybd_event(vk,0,2,0)elsekeybd_event(VK_SHIFT,0,0,0)keybd_event(vk,0,0,0)keybd_event(vk,0,2,0)keybd_event(VK_SHIFT,0,2,0)end ifelseif not lb_s thenkeybd_event(vk,0,0,0)keybd_event(vk,0,2,0)elsekeybd_event(VK_SHIFT,0,0,0)keybd_event(vk,0,0,0)keybd_event(vk,0,2,0)keybd_event(VK_SHIFT,0,2,0)end ifend ifnextend subroutineon w_main.createthis.st_2=create st_2 this.st_1=create st_1 this.sle_1=create sle_1 this.Control[]={this.st_2,& this.st_1,&this.sle_1}end onon w_main.destroy destroy(this.st_2) destroy(this.st_1) destroy(this.sle_1)end onevent open;long ll-RC string ls-strls-str = "My atom ID"atomid = GlobalAddAtom(ls-str) //得到惟一的ID,保证不和其他应用程序发生冲突ll-RC = RegisterHotKey(Handle(this), atomid, 0, 114)// 114为‘F3’,注册的热键为F3if ll-RC = 0 thenmessagebox("错误","错误信息")end ifend eventevent other;IF wparam = atomid THEN//在这里编写处理程序if not keydown(keyf3!) then returnpost WF_PASTE(sle_1.text)END IFend eventevent close;UnregisterHotKey(handle(this),atomid) end eventtype st_2 from statictext within w_maininteger x = 69integer y = 140integer width = 965integer height = 64integer textsize = -9integer weight = 400fontcharset fontcharset = gb2312charset! fontpitch fontpitch = variable!string facename = "宋体"long textcolor = 33554432long backcolor = 67108864string text = "前提是当前焦点在其他程序上" boolean focusrectangle = falseend typetype st_1 from statictext within w_main integer x = 69integer y = 40integer width = 965integer height = 64integer textsize = -9integer weight = 400fontcharset fontcharset = gb2312charset! fontpitch fontpitch = variable!string facename = "宋体"long textcolor = 33554432long backcolor = 67108864string text = "按F3将文本框内容复制到其他程序中" boolean focusrectangle = falseend typetype sle_1 from singlelineedit within w_main integer x = 55integer y = 264integer width = 1851integer height = 96integer taborder = 10integer textsize = -9integer weight = 400fontcharset fontcharset = gb2312charset! fontpitch fontpitch = variable!string facename = "宋体"long textcolor = 33554432string text = "123456yuuoo;~'[~']p90877 4r"borderstyle borderstyle = stylelowered! end type。
PB中用ENTER模拟TAB
PB中用ENTER模拟TAB
屠昂燕;黄松英
【期刊名称】《绍兴文理学院学报》
【年(卷),期】2002(022)008
【摘要】讨论在PB的数据窗口中,输入栏目间的切换用ENTER键代替TAB键的几种方法的实现.
【总页数】3页(P31-33)
【作者】屠昂燕;黄松英
【作者单位】绍兴文理学院,计算机系,浙江,绍兴,312000;绍兴文理学院,计算机系,浙江,绍兴,312000
【正文语种】中文
【中图分类】TP311.52
【相关文献】
1.PB编程中用Enter键实现Tab键功能 [J], 沈中林
2.PB中用Enter键替代Tab键实现栏目切换 [J], 付军;卢天喆
3.PB编程中用Enter键实现Tab键功能 [J], 沈中林
4.在PB
5.0中用Enter代替Tab在数据窗口的字段间移动 [J], 刘清南;全渝娟
5.PB中用ENTER模拟TAB [J], 屠昂燕;黄松英
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在P B中实现热键的方法 Prepared on 22 November 2020
在PB中实现热键的方法
如果你能在你的应用程序中添加一些热键,就可以加快用户的操作速度,特别是对那些熟练的操作人员,他们特别欢迎快捷键的操作方式。
在不少大型应用软件中,用户可以通过使用Ctrl+Alt+F5之类的组合键来方便地进行功能切换和处理。
那么,我们在用PowerBuilder开发应用程序时,怎样在其中实现需要的热键功能呢下面笔者就根据自身的经验,介绍两种实用的方法。
第一种方法:
该方法可以实现:无论何时,只要用户按下热键,都将触发窗口中的事件。
1.声明API的外部函数
FUNCTIONIntegerGlobalAddAtom(refstringlpString)LIBRARY""ALIASFOR"Glob alAddAtomA"
FUNCTIONulongRegisterHotKey(ulonghwnd,ulongid,ulongfsModifiers,ulongvk)LI BRARY""
常量赋初值
Public:
constantintegerMOD-ALT=1
constantintegerMOD-CONTROL=2
constantintegerMOD-SHIFT=4
3.利用代码在系统中注册要使用的热键
明API的外部函数
functionlongSendMessageA(longlhWnd,uintuiMsg,longlwMsg,longlwParam)library ′′
2.对常量赋初值
Public:
ConstantLongWM-SETHOTKEY=50用代码告诉窗口我们的热键
写按下热键时的处理程序
//在窗口的Other事件中
IFwparam=SC-HOTKEYTHEN
//在这里编写处理程序
ENDIF。