最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

PB常用代码

来源:动视网 责编:小OO 时间:2025-09-25 06:57:53
文档

PB常用代码

pb常用的一些代码窗口的open事件或者【浏览】和【查询】按钮的click事件dw_1.settransobject(sqlca)//指定事务对象dw_1.retrieve()//检索数据【添加】按钮的click事件dw_1.insertrow(0)dw_1.setfocus()dw_1.scrolltorow(dw_1.rowcount())ifdw_1.updata()=1thenmessagebox("提示保存成功!")cb_1.enabled=truecb_3.enabled=fals
推荐度:
导读pb常用的一些代码窗口的open事件或者【浏览】和【查询】按钮的click事件dw_1.settransobject(sqlca)//指定事务对象dw_1.retrieve()//检索数据【添加】按钮的click事件dw_1.insertrow(0)dw_1.setfocus()dw_1.scrolltorow(dw_1.rowcount())ifdw_1.updata()=1thenmessagebox("提示保存成功!")cb_1.enabled=truecb_3.enabled=fals
pb 常用的一些代码

窗口的open 事件或者【浏览】和【查询】按钮的click 事件

dw_1.settransobject(sqlca)//指定事务对象

dw_1.retrieve()//检索数据

【添加】按钮的click 事件

dw_1.insertrow(0)

dw_1.setfocus()

dw_1.scrolltorow(dw_1.rowcount())

if dw_1.updata()=1 then

messagebox("提示保存成功!")

cb_1.enabled=true

cb_3.enabled=false

esle

messagebox("提示保存失败,请核实!")

end if

dw_1.setcolumn(1)//将第一列设置为当前列

cb_1.enabled=false

cb_3.enabled=true//cb_3 为保存控件

【保存】按钮的click 事件

if dw_1.update()=1 then

messagebox("提示保存成功!")

cb_1.enabled=true

cb_3.enabled=false

else

messagebox("提示保存失败,请核实!")

end if

【删除】按钮的click 事件

if dw_1.deleterow(0) then//其中0 表示删除当前行

if dw_1.update()=1 then

messagebox("提示删除成功!")

else

messagebox("提示删除失败!")

end if

else

messagebox("提示删除失败")

end if

【退出】按钮click 事件

close(parent)

【上一条】按钮的click 事件

dw_1.scrollpriorrow()

dw_1.selectrow(0,false)//0 表示选取或者取消所有行,dw_1.selectrow(1,true)//第一行高亮显

dw_1.selectrow(dw_1.getrow(),true)

【下一条】按钮的click 事件

dw_1.scrollnextrow()

dw_1.selctrow(0,false)

dw_1.selectrow(dw_1.getrow(),true)

【升序】按钮的click 事件 本例按商品编号升序排列

dw_1.setransobject(sqlca)

dw_1.setsort("商品编号 A")//setsort 函数用来定义数据窗口如何排序,sort()函数则实际对数

据窗口进行排序。A 表示升序,D 表示降序。

dw_1.sort()

dw_1.retrieve()

下拉数据窗口的selectionchanged 事件,用于动态绑定数据窗口

string sjckdx

sjckdx=trim(ddlb_1.text)

if sjckdx="商品信息表" then

dw_1.dataobject="spxxb_data"//在程序运行时动态绑定数据窗口对象spxxb_data

elseif sjckdx="供应商信息表" then

dw_1.dataobject="gysxxb_data"//在程序运行时绑定数据窗口对象gysxxb_data

end if

控制数据窗口中数据列的显示颜色关键技术

打开数据窗口对象画板,选择数据窗口对象中要为其设置显示颜色的字段列,然后再属性页

中选择【font 】选项卡background Color 后的expression 中填入代码,例如: if( 数

量>4,rgb(240,0,0),if(数量>3,rgb(0,240,0),rgb(50,50,250)))

使用下列数据窗口选择商品名称实现快速输入

在属性页中选择【edit】,在【style type】下拉列表框中选择【dropdowndw】

在数据录入时对行进行计算

数据窗口控件的rbuttondown 事件,实现行数据的自动计算其代码如下:

decimal jj,je

long sl,i,rowcnt

rowcnt=dw_1.rowcount()//获取数据窗口中的记录总数

if rowcnt>0 then

dw_1.scrolltorow(1)

for i=1 to rowcnt

jj=dw_1.getitemnumber(i,5)//从数据窗口中取值

sl=dw_1.getitemnumber(i,6)

je=dec(mid(string(jj*sl),1,pos(string(jj*sl),".",1) 2))

dw_1.setitem(i,7,je)//为数据窗口赋值

next

end if

为数据窗口建立一个用户自定义事件us_dw,event id 选择pbm_dwnprocessenter 其代码如下,

实现行数据的自动计算

decimal jj,je

long sl,i,rowcnt

rowcnt=dw_1.rowcount()

send(handle(this),256,9,long(0,0))

if dw_1.getcolumn()=7 then

if rowcn>0 then

dw_1.scrolltorow(1)

for i=1 to rowcnt

jj=dw_1.getitemnumber(i,5)

sl=dw_1.getitemnumber(i,6)

je=dec(mid(string(jj*sl),1,pos(string(jj*sl),".",1) 2))

dw_1.setitem(i,7,je)

next

dw_1.scrolltorow(rowcnt)

end if

end if

密码触发相关程序

用户名的单行编辑框进行代码的编写。在该单行编辑框中用户按下enter 键下来验证用户名。

如果存在,输入焦点自动切换到密码输入框中;否则提示用户输入错误,要求重新输入用户

名。

keydown 中添加如下的代码:

string is_username

integer li_isexist

if key=keyenter! then//当按下的按键是enter 键时处理

is_username=trim(this.text)

select count(*) into:li_isexist from password where

username=:is_username;

if li_isexist<=0 then//用户不存在的话

messagebox("错误该用户不存在")

this.selecttext(1,len(this.text))

return

end if

sle_password.setfocus()//切换焦点到密码输入窗口

end if

用户登录模块登录按钮的代码如下所示:

string is_password,is_userpass

is_password=trim(sle_password.text)

if trim(sle_username.text)='' then

messagebox("错误请输入用户名")

return

end if

select password into:is_userpass from password where

username=:sle_username.text;

if is_password=is_userpass then

open(w_changpass)

close(parent)

else

messagebox("错误密码不存在")

sle_password.selecttext(1,len(sle_password.text))

return

end if

在主窗口的closequery 事件编写脚本。如果数据窗口的数据被修改和删除过以后还没保存,

则需要提示用户先进性保存然后再对出窗口。

if dw_1.modifiedcount() dw_1.deletedcount()>0 then

if messagebox("提示数据已经被修改,是否保存以后再退出?",question!,yesno!)=1 then

return -1//返回-1 可以不关闭当前窗口

end if

end if

if trim(ddlb_1.text)=trim(ddlb_2.text) then

if trim(ddlb_1.text)='' then

dw_2.dataobject="d_result_search_arrive"

dw_2.settransobject(sqlca)

dw_2.retrieve(ddlb_2.text)

return

end if

if trim(ddlb_2.text)='' then

dw_2.dataobject="d_result_search"

dw_2.settransobject(sqlca)

dw_2.retrieve(ddlb_1.text)

return

end if

datastore ldt_1

ldt_1=create datastore

ldt_1.dataobject="d_result_rearch_between"

ldt_1.settransobject(sqlca)

ldt_1.retrieve(ddlb_1.text,ddlb_1.text)

long ll_row,ll_total,ll_order_start,ll_order_end,ll_id,ll_currow

string is_startstation,is_endstation,is_trainno

ll_total=ldt_1.rowcount()

if ll_total<=0 then

messagebox("抱歉当前没有所需要查询的数据")

destroy(ldt_1)

return

end if

dw_2.dataobject='d_result_search'

for ll_row=1 to ll_total

ll_id=ldt_1.getitemnumber(ll_row,'id')

select "traindetail"."order" into :ll_order_start from traindetail where id=:ll_id and

station=:ddlb_1.text;

select "traindetail"."order" into :ll_order_end from traindetail where id=:ll_id and

station=:ddlb_2.text;

select startstation into :is_endstation from trainbase where id=:ll_id;

select endstation into :is_endstation from trainbase where id=:ll_id;

select trainno into:is_trainno from trainbase where id=:ll_id;

if ll_order_startll_currow=dw_2.insertrow(0)

dw_2.setitem(ll_currow,'trainbase_id',ll_id)

dw_2.setitem(ll_currow,'trainbase_startstation',is_startstation)

dw_2.setitem(ll_currow,'trainbase_endstation',is_endstation)

dw_2.setitem(ll_currow,'trainbase_trainno',is_trainno)

end if

end for

部分菜单的代码

w_main.arrangesheets(tile!)//窗口水平

w_main.arrangesheets(tilehorizontal!)//窗口垂直

w_main.arrangesheets(layers!)//窗口平铺

w_main.arrangesheets(cascade!)//窗口层叠

opensheet(sheet,parentwindow)//打开 opensheet()在mdi 框架窗口中打开mdi 子窗口,并在

指定才当中创建选择该子窗口的菜单项。例子 //opensheet(child,mid_user,2,original!)

动态窗口下拉列表源代码

string sty,exp,err

choose case ddlb_1.text

case"自由格式"

sty="form"

case"网格格式"

sty="grid"

case"列表格式"

sty="tabular"

case"标签格式"

sty="label"

end choose

//对label 显示风格做处理

If sty="label" then

exp="style(type=" sty ")datawindow(units=2" &

"timer_interval=0 color=16777215 processing=2" &

"label.name='laser address 0.50*1.755627'" &

"label.width=750 label.height=200 label.row=5" &

"label.rows.spacing=100 label.columns=4" &

"label.columns.spacing=313 label.topdown=no" &

"label.sheet=yes label.shape=roundrectangle" &

"label.ellipse_height=80 label.ellipse_width=83)"

else

exp="style(type=" sty ")datawindow(units=2 color=16777215)"

end if

//利用函数生成数据窗口的源代码

exp=syntaxfromsql(sqlca,dw_1.getsqlselect(),exp,err)

//syntaxfromsql()函数根据sqlselect 语句生成数据窗口对象的源代码,通常用于创建动态数

据窗口

//创建数据窗口

dw_1.create(exp,err)

//dw_1.creat()可以用来动态创建数据窗口对象。使用指定的源代码创建数据窗口对象,并用

新的数据窗口对象取代数据窗口原有的数据窗口。

//显示数据

dw_1.settransobject(sqlca)

dw_1.retrieve()

闪动的文字代码timer 事件

if mod(second(now()),2)=1 then

st_1.visible=false

else

st_1.visible=true

end if

移动的字体timer 事件

if mod(second(now()),2)=0 then

st_1.move(st_1.x 50,st_1.y)//沿水平方向移动

end if

PB 通用右键菜单制作(2007-08-23 14:13:44)转载 分类: 关于计算机

---- 对象被右键单击就弹出一个功能菜单是Windows 应用程序一项不可缺少的功能。在

PowerBuilder 应用开发中,可在需弹出右键菜单对象的rbuttondown 事件中调用该菜单的

Popmenu( )方法实现这一功能。但多数情况下,应用中有多处要用到不同的弹出式菜单,如

一一用这种方法就需要做大量的工作。能不能做一个通用的菜单,可以用任何对象的

rbuttondown 事件激发弹出,并在弹出前动态改变弹出菜单项的内容,当点击菜单项时又可

执行被右击对象的相应用户事件?

一、 创建弹出菜单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,i

string currentitem

if len(itemstring)=0 then return

itempos=pos(itemstring,"|")

DO WHILE itempos<>0

// itempos 为间隔符"|"的位置

currentitem=left(itemstring,itempos -1)

//取出子串

itemstring=mid(itemstring, itempos+1)

this.item[itemorder].text=currentitem

itempos=pos(itemstring,"|")

itemorder++

LOOP

this.m_main.item[itemorder].text=itemstring

for i=1 to itemorder

this.item[i].visible=true

this.item[i].enabled=true

next

for i=itemorder+1 to 15

this.item[i].visible=false

next

2)setitemdisable(integer itemorder) 返回值Null。

该函数把第itemorder 菜单项置灰(disable)。

脚本如下:

if itemorder<1 or itemorder>15 then return

this.m_main.item[itemorder].enabled=false

3)popupmenu(integer x, integer y) 返回值Null。

该函数弹出菜单条。

脚本如下:

this.popmenu(x,y)

二、 rbuttondown 事件激发弹出菜单m_popup

---- 至此,我们就可以在窗口中任意对象如DataWindow、 Picture、 SingleLineEdit、 ListBox、

PictureListBox 、 DropDownPictureListBox 、 MultiLineEdit 、 ListView 、 TreeView 等的

rbuttondown 事件中写脚本调用m_popup 的函数来实现右键单击弹出一个菜单。下面以数

据窗口dw_1 为例,在其rbuttondown 事件下写入脚本,使得右击dw_1 可弹出菜单:刷新

/插入/删除/修改。步骤如下:

1、事先给窗口定义一个m_popup 型instance 变量om_1:

m_popup om_1

2、dw_1 的rbuttondown 事件脚本:

if not isvalid(om_1) then

om_1= CREATE m_popup

end if

//把菜单的anyobject 指向被右击的对象(dw_1)

om_1.anyobject=this

om_1.setmenuitem("刷新|插入|删除|修改")

//可在此调用om_1.setitemdisable(itemorder)函数disable 某菜单项。

om_1.popupmenu(this.x+this.pointerx(),this.y+this.pointery())

3、 给dw_1 定义用户事件ue_item1、ue_item2、ue_item3 及 ue_item4。事件ue_item1 脚

本:

dw_1.retrieve()

事件ue_item2 脚本:

long newrow

newrow=dw_1.insertrow(0)

dw_1.scrolltorow(newrow)

事件ue_item3 脚本:

dw_1.deleterow(0)

事件ue_item4 脚本:

dw_1.update()

---- 这样,只要用户单击dw_1 弹出的右键菜单,就可完成对dw_1 的插入、删除、修改等

功能。

三、 推广为全程函数

---- 如果应用中有许多地方要用此功能,我们可以把dw_1 的rbuttondown 事件脚本改造成

一个全程函数。

---- 1、将变量om_1 定义为global 变量:

---- m_popup om_1

---- 2、定义一个全程函数

---- pupmenu(powerobject sender,string itemstring,integer x,integer y) 返回值Null。其中参数

sender 为被右击的对象,itemstring 为弹出菜单的菜单项字符串,x、y 为菜单弹出的坐标位

置。

脚本如下:

if not isvalid(om_1) then

om_1= CREATE m_popup

end if

om_1.anyobject=sender

om_1.setmenuitem(itemstring)

sender.triggerevent("ue_beforepop")

//激活sender 用户事件。

om_1.popupmenu(x,y)

这样,上述dw_1 的rbuttondown 事件脚本就可改写为:

string items="刷新|插入|删除|修改"

popmenu(this, items ,this.x+this.pointerx(),

this.y+this.pointery())

注意:在MDI 应用中,popmenu()函数需要改为:

popmenu(this, items ,w_frame.pointerx(),w_frame.pointery())

其中w_frame 为MDI 主窗口名。

---- 在函数popmenu 中,又激活了被右击对象的ue_beforepop 用户事件。如有必要,你可以

给被右击对象定义一个ue_beforepop 事件,在该事件中可调用om_1.setitemdisable()函数来

屏蔽某个菜单项。

---- 最后,别忘了在应用的close 事件里加上下列语句,及时释放系统内存。

---- if isvalid(om_1) then destroy om_1

---- 以上代码在Windows98 和Powerbuilder6.5 平台上开发,并在多个大型系统中应用,效

果很好。__

文档

PB常用代码

pb常用的一些代码窗口的open事件或者【浏览】和【查询】按钮的click事件dw_1.settransobject(sqlca)//指定事务对象dw_1.retrieve()//检索数据【添加】按钮的click事件dw_1.insertrow(0)dw_1.setfocus()dw_1.scrolltorow(dw_1.rowcount())ifdw_1.updata()=1thenmessagebox("提示保存成功!")cb_1.enabled=truecb_3.enabled=fals
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top