当前位置:首页>> PowerBuilder>> PB入门

全文搜索

精华导读

·EasyERP2004 制造行业通用性ERP管理系统
·PB中表的修改对数据窗口和报表的影响的解决办法
·在PB中实现Word内容的替换
·office xp风格菜单基本版
·用PB制作outlook界面源程序(非原来的老外版本)(
·将所见dw内容(包括计算字段)输出到execl中
·ERP在中国应用面临的问题
·PB中使用FORMULA ONE(实例篇
·控制打印机的动态库,兼容win98/98/me/nt2000/xp
·易佳自定义报表系统
·用例驱动的需求过程实践

最新发表

·仿windows优化大师界面(源码)
·常见问题的经典解决之SPLITBAR
·pb技巧
·PowerBuilder 10 Beta1下载和相关信息
·如何在pb9中调用WebService
·在非PB9 JSP Target的jsp网页中调用EAServer组件
·质量管理的十三项步骤和八项原则
·用预测性对象点度量面向对象软件(下)
·用预测性对象点度量面向对象软件(上)
·软件开发度量及考核方法
·点度量(4)—最新发布度量方法及参考
·点度量(3)—功能规模度量方法选择
·点度量(2)—功能规模度量方法评价
·点度量(1)—功能规模度量方法概述
·如何对软件质量进行评估
·从印度软件项目管理谈我国软件质量保障
·步步为营,把好质量关
·软件产品的可用性的测试
·软件测试认识的几个误区

pb技巧

文章来源:互联网络 文章编辑:admin 添加时间:2004-4-6

虽然PowerBuilder有Grid风格的DataWindow,但不够灵活,如果想打印一张边框粗线条或双线,内框为细线条的表格直接使用Grid风格的DataWindow就不能实现。因此许多人都用Tabular风格的DataWindow,然后自己用Line来实现Grid。 在调整线条位置是一个即伤脑筋又伤眼睛的事件,而一旦需要调整行高,所有工作都得重来,试一试用下面方法,会大大减轻你的工作量: 
    在vertical lines,改变它的属性,在Expressions Tab上,y1行上输入0,y2行上输入rowheight() - 1
    在horizontal lines, 设置 y1 和 y2 = rowheight() - 5 
    这样PowerBuilder会自动调整线的坐标,你只需要设置横线的长度和x1,x2的坐标即可。 马上Preview一下,看一看效果! 你再也不需要因为行的高度发生改变而重新调整线条位置。 
Oracle 8客户端安装配置:请将以下文件拷贝到运行文件所在目录 
一、ODBC动态库 :
ctl3d32.dll msvcrt40.dll odbc16gt.dll odbc32.dll odbc32gt.dll odbccp32.dll 

odbccr32.dll odbcint.dll 
二、建立EXTRA子目录,将MSVCRT.DLL文件拷贝到该子目录下
EXTRA\MSVCRT.DLL 
三、ORACLE动态库及配置文件 
Tnsnames.ora CORE35O.DLL NASNSNT.DLL NAUNTSNT.DLL 

NCRNT.DLL Nlnt.dll NLSRTL32.DLL Nnfdnt.dll NNFNNT.DLL

 NSNT.DLL NTNT.DLL NTTNT.DLL CIW32.DLL Ora73.dll OTRACE73.DLL 

Sqlnet.ora Sqltnsnt.dll CORE35.DLL 
四、PB动态库 
pbvm70.dll pbdwe70.dll Pbo7370.dll PBO8470.DLL pbodb70.dll libjcc.dll 
在Windows的API中,可以实现字符的透明输出,因此用API可以实现,下面是例子:
//API函数声明: 
Function ulong GetDC (ulong hWnd) Library "USER32.DLL" 
Function long ReleaseDC( long hWnd, long hDC ) Library "user32" 
Function boolean TextOut (ulong hdcr, integer stx, integer sty, 

ref string lpString, long nCount) Library "GDI32.DLL" Alias for "TextOutA"
Function int SetBkMode (ulong hdcr, integer mode) Library "GDI32.DLL"
Function ulong SetTextColor (ulong hDC, ulong crColor) Library "GDI32.DLL" 

iul_hdc = getdc(handle( p_1 ))
string ls_msg
ls_msg = "This is an example." 
SetBkMode (iul_hdc, 1) //设定字符输出背景透明 
SetTextColor (iul_hdc, RGB( 255,255,255 ))
TextOut (iul_hdc, 11, 11, ls_msg, len( ls_msg ))
SetTextColor (iul_hdc, RGB( 128,0,0 )) 
TextOut (iul_hdc, 10, 10, ls_msg, len( ls_msg ))
ReleaseDC( handle( p_1 ), iul_hDC )
打开动态窗口的方法:
window newarray[3]
string win[3]
int i
win[1] = "w_employee"
win[2] = "w_customer"
win[3] = "w_sales"
for i = 1 to 3
    Open(newarray[i], win[i])
next
Window Plugin的窗口可以通过如下代码得到指定参数的数值:
ContextKeyword icxk_base
String is_values[]

//通过GetContextService函数创建内容信息服务
this.GetContextService("Keyword", icxk_base)

//使用GetContextKeywords函数访问用户定义的参数message
icxk_base.GetContextKeywords("message", is_values)

//将读出的数据显示
Integer li_count
FOR li_count = 1 to UpperBound(is_values)
    lb_1.AddItem(is_values[li_count])
    MessageBox("Window Plug-in",is_values[li_count])
NEXT 
如何从两个结果集中再用条件检索出新的结果集?
类似如下语句: 
select c.* 
from 
 ( select a.* from a 
  union all 
  select b.* from b 
  ) c 
where c.id = ’12345’

在数据窗口中如何隐藏某计算单元? 
在它的properties\expression\visible属性中设置为“IF(1=2,1,0)”就可以了。

如何在PB中实现对数据库表的锁定?
1、pb在做完update,delete操作后,未commit前数据库会自动锁定记录的。
2、如果select后想锁定查询结果中的记录,使用select * from table1 for update;。

利用Api函数ShellAboutA可以显示一个与Windows操作系统风格一致的About对话框。 首先声明如下外部函数: 
function int ShellAboutA(ulong al_hWnd, string as_szApp, string as_szOtherStuff, ulong hIcon)

 library "shell32" 
ShellAboutA(handle(parent),"关于...#摆渡人工作室","欢迎光临摆渡人工作室",0) 

如何取得当前光标处的颜色?请参考以下代码: 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var 
DC:HDC; 
X,Y:Integer; 
begin 
X:=Mouse.CursorPos.X; 
Y:=Mouse.CursorPos.Y; 
if Key<>VK_Return then Exit; 
DC:=GetDC(0); 
Color:=GetPixel(DC,X,Y); 
end; 

介绍一种利用结构实现在TreeView的一项中存放多个参数的方法:
   str_data tmpdata (str_data是一个自定义结构)
   TreeViewItem tvi_result
   //...
   tmpdata.wlbm = ls_wlbm
   tmpdata.zhyl = ld_zhyl
   tmpdata.sff = ls_sff
   tvi_result.data = tmpdata

固定数据窗口前几列的方法,例如第一列名为“id”,固定该列且后半部分从下一列开始显示:dw_1.HSplitScroll = True
 dw_1.Object.DataWindow.HorizontalScrollSplit = dw_1.object.id.Width
 dw_1.Object.DataWindow.HorizontalScrollPosition2 = dw_1.object.id.Width

打印数据窗口最后一页的方法:
   string ls_pagecount
   ls_PageCount = dw_1.describe("Evaluate(’PageCount()’,0)")
   dw_1.object.datawindow.print.page.range = ’" + ls_PageCount + "’"
   dw_1.print()

如何当编辑框得到焦点时自动选中内容:this.selecttext(1,len(sle_1.text))

使用Ole对象与Word等通讯时,如何避免启动多个Word等程序:
OLEObject ole_object
ole_object = CREATE OLEObject

li_ret = ole_object.ConnectToObject("","word.application")
IF li_ret <> 0 THEN
  //如果Word还没有打开,则新建。
 li_ret = ole_object.ConnectToNewObject("word.application")
  if li_ret <> 0 then
     MessageBox(’OLE错误’,’OLE无法连接!错误号:’ + string(li_ret))
     return
  end if
 ole_object.visible = true
END IF

利用WaveOutGetNumDevs()函数可以得到音频输出设备的个数,从而可以判断用户计算机是否安装了声卡,决定是否取消声音播放程序。

用下面表达式可得到记录在某组中的行号: Getrow()-First(Getrow() for Group 1)+1

利用AncestorReturnValue可以得到被继承对象中处理代码的返回值。

如何实现在PB环境中创建的数据库中没有PB-Catalogs表?
     设置PB.INI文件中的PBNoCatalog=1即可。

在运行PB的快捷方式中加上如下参数可以实现打开PB时直接打开各画板:
"C:\Program Files\Sybase\PB6\pb60.exe" /p datawindows ,数据窗口
/p windows ,窗口;/p datawindows ,库;/p userobjects ,用户对象;/p funtions ,全局函数;/p database ,数据库画板;/p menus ,菜单。。。

使用Application属性可以实现(在Application的Open事件中添加代码):
1、将菜单工具条右键弹出菜单显示的是中文:
ToolbarPopMenuText="左边,顶端,右边,底端,浮动,显示文本,显示提示"
ToolbarFrameTitle="工具条"
ToolbarSheetTitle="工具条"
2、不显示弹出菜单:ToolbarUserControl = false
3、修改缺省MDIHelp文本:MicroHelpDefault = "欢迎使用质量管理系统"
4、修改数据窗口错误消息框标题:dwmessagetitle = "数据有误"
5、隐藏PowerTips:ToolbarTips = false
6、工具条上显示文本:ToolbarText = true

如何在PB中实现延时:
   subroutine Sleep(long dwMilliseconds) library "kernel32.dll",延时1秒则调用: Sleep(1000)  //单位是毫秒。

在数据窗口中使用全局函数可以实现一些好功能:
1、给含有多个Nested报表的复合式数据窗口赋值;
2、进行复杂的运算,然后将结果传回数据窗口,制作复杂的报表。

在VC中,int是32位;而在PowerBuilder中int是16位,long则是32位;

在PB中调用屏幕保护的方法:send(handle(This),274,61760,0)

隐藏任务栏的方法:在OnCreate事件里利用Window API函数SetWindowLong:     SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW); PB使用时首先声明函数FUNCTION long SetWindowLong(ulong hWnd, integer nIndex, ulong dwNewLong) library "user32.dll" 

ALIAS FOR "SetWindowLongA",然后调用:SetWindowLong(Handle(this),-20,128);

使用WinExec函数实现启动拨号连接,“我的连接”是你创建的拨号程序的名称:WinExec(’rundll32.exe rnaui.dll,RnaDial ’+’我的连接’,9);

如何判断数据窗口中是否存在某列?可以利用Describe("column_name.width")是否为"!"来判断;

有时我们需要得到下拉数据窗口中的显示值,方法很简单:
ls_value = dw_1.Describe("Evaluate(’LookupDisplay(column_name)’,"+string(row_number)+")")

如何生成固定长度的前面加零的数字编号,例如:12生成"00012",1234生成"01234"。方法很简单: String(ll_number, "00000")

[ ]

首页 评论 打印 刷新 返回顶部 关闭
【相关文章】  【相关评论】
目前暂时没有相关文章