社区
控件与界面
帖子详情
不仅仅是100分...关于界面问题
xing_xing
2000-11-16 01:36:00
我想在PB编程中,能得到漂亮的界面。如在PB编程中如何与Flash技术结合好得到漂亮的界面。主要是解决开始界面的问题。如何调用API函数使窗口没有标题栏或者去掉最大化,只保留最小化及关闭。只要回答就有分加。
...全文
328
9
打赏
收藏
不仅仅是100分...关于界面问题
我想在PB编程中,能得到漂亮的界面。如在PB编程中如何与Flash技术结合好得到漂亮的界面。主要是解决开始界面的问题。如何调用API函数使窗口没有标题栏或者去掉最大化,只保留最小化及关闭。只要回答就有分加。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
am2000
2001-06-08
打赏
举报
回复
基于PowerBuider的程序界面技术的若干讨论
一、问题的提出
PowerBuilder 6.5(以下简称 PB) 是一个面向对象的Client/Server开发工具,它可以在WindowsX.X、Windows NT、Macintosh、Aix/6000、Sun Solaris等开发平台上运行。PB作为数据库的前端开发工具,以其全面的功能和优异的性能受到广大开发者的青昧。但是PB开发的用户界面尽管清晰大方,但是它自身并没有实现Windows界面功能的对象。本文专门针对此问题讨论在PB中怎样实现浮动按钮、按钮的PowerTip提示技术。应用该技术后,PB开发的用户界面可以更加美观,更加具有商业化风格。
二、浮动按钮、按钮的PowerTip提示的具体实现
1、浮动按钮在PB中的实现
(1) 基本原理
实现此功能的关键是捕获Windows鼠标的移动消息,这通过在相应对象中自定义mousemove事件可以实现。然后在相应的事件中书写代码,用openuserobject()函数动态地生成可视的命令按钮。
(2) 具体方法和过程
本例中包括一个静态文本框st_1,其text属性为‘确定’,border属性为’box’。记下它的x、y、width、height属性值,具体的x=544,y=360,width=503,height=80。
然后在st_1中自定义事件mousemove ,事件ID为pbm_mousemove,在此事件中写入如下代码:
st_1.visible=false //当鼠标在st_1中移动时触发此事件并使st_1为不可见
commandbutton lc_mybutton //申明一个命令按钮实例
openuserobject(lc_mybutton,"commandbutton",544,360) //打开用户对象并在指定位置(前面我们记下的x和y值)显示
lc_mybutton.width=503 //设置命令按钮的宽度(和静态文本同宽)
lc_mybutton.height=80 //设置命令按钮的高度(和静态文本同高)
lc_mybutton.enabled=true//设置使能属性
lc_mybutton.facename='arial'//设置按钮上的字体
lc_mybutton.pointer='e:\fjm\hand-l.cur'//设置当按钮创建后的指针
lc_mybutton.text='确定'//设置命令按钮的text属性
lc_mybutton.textsize=20//设置字体的大小
lc_mybutton.visible=true//设置按钮的可见性
parent.control[ UpperBound( parent.control ) + 1] = lc_mybutton//将命令按钮加入示例窗口的控件数组中去
最后在示例窗口的mousemove事件中写入以下代码:
st_1.visible=true//当鼠标离开命令按钮进入窗口时触发此事件,恢复st_1的可视性。
2、按钮的PowerTip提示在 PB中的实现方法
(1) 基本原理
定义一个不可视用户对象,在此对象中申明本地外部函数,引入Windows API函数。然后编写用户对象函数实现向Windows发送消息等功能(例如应用窗口的句柄、为text分配内存空间、向应用窗口发送消息等等),以便在主程序中调用。在主程序中,申明此用户对象的实例变量,在相应控件事件中调用不可视用户对象函数,从而实现按钮的Powertip功能。
(2) 具体方法和过程
a、 在用户对象画板中建一个不可视用户对象名为nvo_powertip(class custom类型)
b、申明实例变量
Private:
// 常量申明
CONSTANT string TOOLTIPS_CLASS='tooltips_class32'
CONSTANT ulong CW_USEDEFAULT= 2147483648
CONSTANT long WM_USER = 1024
CONSTANT long WS_EX_TOPMOST= 8
CONSTANT long WM_SETFONT= 48
// PowerTip 消息
CONSTANT long TTM_ADDTOOL = WM_USER + 4
CONSTANT long TTM_NEWTOOLRECT = WM_USER + 6
CONSTANT long TTM_RELAYEVENT = WM_USER + 7
CONSTANT long TTM_UPDATETIPTEXT= WM_USER + 12
CONSTANT long TTM_TRACKACTIVATE= WM_USER + 17
CONSTANT long TTM_TRACKPOSITION= WM_USER + 18
//公共变量和常量
Public:
long hWndTT // Powertip 控件窗口的句柄
long ToolID = 1 //Powertip内部ID
// Powertip 标志
CONSTANT integer TTF_CENTERTIP = 2
CONSTANT integer TTF_RTLREADING= 4
CONSTANT integer TTF_SUBCLASS= 16
CONSTANT integer TTF_TRACK= 32
CONSTANT integer TTF_ABSOLUTE= 128
CONSTANT integer TTF_TRANSPARENT = 256
CONSTANT integer TTF_DI_SETITEM= 32768
c、在Local Extenal Function…申明此用户对象用的API函数
// 处理Powertip的外部函数
c.1 SubRoutine InitCommonControls() library "comctl32.dll"
c.2 Function long CreateWindowExA(ulong dwExStyle, string ClassName, long WindowName, ulong dwStyle, ulong X, ulong Y, ulong nWidth, ulong nHeight, ulong hWndParent, ulong hMenu, ulong hInstance, ulong lpParam) library "user32.dll"
c.3 Function integer DestroyWindow(long hWnd) library "user32.dll"
c.4 Function integer ToolTipMsg(long hWnd, long uMsg, long wParam, REF TOOLINFO ToolInfo) library "user32.dll" Alias For "SendMessageA"
c.5 Function integer RelayMsg(long hWnd, long uMsg, long wParam, REF MSG Msg) library "user32.dll" Alias For "SendMessageA"
// 内存处理函数
c.6 Function long LocalAlloc(long Flags, long Bytes) library "kernel32.dll"
c.7 Function long LocalFree(long MemHandle) library "kernel32.dll"
c.8 Function long lstrcpy(long Destination, string Source) library "kernel32.dll"
style="MARGIN-LEFT: 84.75pt; TEXT-ALIGN: left">d、定义用户结构变量:msg、point、rect、toolinfo
msg结构定义如下:
>变量名称 >变量类型
Hwnd Long
Message Long
>Wparam >Long
>Lparam >Long
>Time >Long
>Pt >point
style="MARGIN-LEFT: 84.75pt; TEXT-ALIGN: left"> Point结构定义如下:
变量名称 变量类型
X Long
Y Long
style="MARGIN-LEFT: 84.75pt; TEXT-ALIGN: left"> Rect结构定义如下
变量名称 变量类型
Left Long
Right Long
op Long
Bottom Long
Toolinfo结构定义如下:
变量名称 变量类型
Cbsize Long
Uflags Long
Hwnd Long
Uid Long
Rect Rect
Hinstance Long
Lpsztext long
、在用户对象的constructor事件中写入代码(功能是得到应用窗口的句柄,为hwnd赋值)
> InitCommonControls()
hWndTT = CreateWindowExA(WS_EX_TOPMOST,TOOLTIPS_CLASS,0,& TTF_CENTERTIP, CW_USEDEFAULT, CW_USEDEFAULT, &
CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, Handle(GetApplication()),0)
f、在用户对象的destructor事件中写入代码(释放应用窗口的句柄)
DestroyWindow(hWndTT)
g、编写用户对象的函数。(addtool函数、relaymsg函数)
g.1 addtool函数的编制
; 函数名:addtool,
参数名称 参数类型
Object Dragobject
Tiptext String
Flags integer
返回值:integer
函数体:
TOOLINFO ToolInfo
ToolInfo.cbSize = 40
ToolInfo.uFlags = Flags
ToolInfo.hWnd = Handle(Object)
ToolInfo.hInstance = 0 // Not used
ToolInfo.uID = ToolID
ToolID++
ToolInfo.lpszText = LocalAlloc(0,80)
POST LocalFree(ToolInfo.lpszText) // Free Allocated Memory
lStrCpy(ToolInfo.lpszText,Left(tiptext,80))
ToolInfo.Rect.Left 0
ToolInfo.Rect.Top = 0
ToolInfo.Rect.Right = UnitsToPixels(Object.Width,XUnitsToPixels!)
ToolInfo.Rect.Bottom= UnitsToPixels(Object.Height,YUnitsToPixels!)
If ToolTipMsg(hWndTT,TTM_ADDTOOL, 0, ToolInfo) = 0 Then
MessageBox("Error","Cannot register object in the toolwindow control!",StopSign!,Ok!)
Return(-1)
End If
Return(ToolID - 1)
g.2、relaymsg函数的编制
函数名称:relaymsg
参数名称 >参数类型
Object Dragobject
返回值:无
函数功能:向应用程序窗口发送控件信息
函数体:
s MSG Msg
Msg.hWnd = Handle(Object)
Msg.Message = 512 // WM_MOUSEMOVE,windows提供的事件的数值编号,mousemove事件的编号为512.
Msg.WParam = Message.WordParm
Msg.LParam = Message.LongParm
RelayMsg(hWndTT,TTM_RELAYEVENT,0,Msg)
至此用户对象的准备工作已完全就绪。接下来在应用程序中相应事件中调用刚才定义的函数了。
h、在应用程序主窗口中定义实例变量
nvo_ToolTip PowerTip
i、在主窗口的open事件中将要显示powertip的控件向windows系统注册(假如
窗口中有一个命令按钮和一个sle控件)
powertip.addtool(cb_1,"测试按钮",0)
powertip.addtool(sle_1,"测试单行文本框",0)
j、为命令按钮、单行文本框定义事件mousemove,事件ID为pbm_mousemove.
k、在cb_1、sle_1的mousemove事件中调用nvo_tooltip对象的relaymsg
函数向windows发送消息
powerTip.RelayMsg(This)
此效果正是我们所要的效果。难道你不想试试吗?
三、结束语
本文比较粗略地讨论了基于PB的用户界面的增强功能。应用此功能后用PB开发的界面将更加引人入胜。但是,以上讨论也有没有涉及的地方,比如浮动按钮是动态生成的,本文还没涉及到按钮clicked事件的实现问题,还有待以后的进一步探讨。关于powertip的实现,我们还可以在不可视对象中再定义一些用户函数,来完成更加复杂的功能,比如改变tip的字体,文字内容,改变tip框的大小等等。但这些功能的有无并不影响我们对基本功能的实现和使用。
最后,愿这段文字能对你的编程思路有一定的启发作用。
四、参考文献
清华大学出版社,《powerbuilder 6.0应用与开发》,吴洁明 编著;
机械工业出版社、西蒙与舒司特国际出版公司,《powerbuilder 6.0程序设计大全》,(美)
Simon Gallagher、Simon Herbert著,康博创作室 译;
返回 主页
附加说明:易蜀水,南航509教研室在读硕士,研究方向:CIMS\PDM\MRPII
戴勇, 南航509教研室教授, 研究方向:CIMS\PDM\MRP II
>资料来源:PB之星
blueswind
2000-12-21
打赏
举报
回复
OLE???
kevin_w
2000-12-20
打赏
举报
回复
WK,这种问题也要这么多人在讨论这么久,,,社会主义啊
pc00000
2000-12-20
打赏
举报
回复
干吗那么繁 啊!
PB 中把窗口属性设成POPUP !
除了VISUALABLE , ENABLE 以外全部去掉钩!
在窗口的SHOW事件中把窗口大小调整到屏幕大小!
在右上角做两个小按钮, 一个实现最小化, 一个关闭!
OK ?
szjlq
2000-12-12
打赏
举报
回复
要去掉标题栏可用API
FUNCTION ulong SetWindowulong(ulong hwnd,ulong nIndex,ulong dwNewLong) LIBRARY "user32.dll" ALIAS FOR "SetWindowLongA"
FUNCTION ulong SetWindowPos(ulong hwnd,ulong hWndInsertAfter,ulong x,ulong y,ulong cx,ulong cy,ulong wFlags) LIBRARY "user32.dll"
先用
SetWindowuLong(handle(this),-16,369360896)
然后用
Setwindowpos为窗口指定一个新位置和状态,在PB中注意要转换成PIX(UnitsToPixels)
lizx
2000-12-12
打赏
举报
回复
请访问我的帖子http://www.csdn.net/expert/TopicView.asp?id=44603,有源码送,不过你的分要给我才行
lukex
2000-11-20
打赏
举报
回复
你可到陶清网站www.pdriver.com,在首页上就有几个作的非常酷的软件界面,有一个触摸屏查询的程序就是pb和flash结合的,你不妨参考一下.
longzu
2000-11-20
打赏
举报
回复
你的问题都可以通过设置窗口属性解决嘛!
PB做的界面的确是难看,每次不管我怎么费心,可做出来的界面老板就是不满意,因为他是学美术的,也用PHOTOSHOP、FLASH什么的,做出来的东东让人眼花缭乱的。唉!我现在只要是一般的小软件都用VB或DELPHI了!
RedFire
2000-11-16
打赏
举报
回复
呵呵。你只要调整窗口的类型就可以在设计的时候设置标题栏什么的,当然也可以设置最大,最小,关闭按钮什么的。
要在PB中调用api函数的话,你要在global extenal function或者local extenal function中先声明api,然后就可以调用了。
下面是一个声明的例子:
Function Boolean ShowWindow(Long Hwnd, Integer Show) LIBRARY "user32.dll"
在窗口的open事件中调用如下:
ShowWindow(Handle(This), 3); // 最大化
good luck.
C++MFC
界面
编程(VS2013)上
VC++作为微软Visual Studio...通过一个一个的实战例程,把大量的开发技巧,综合起来,深入浅出地教给朋友们,软件
界面
开发的思路与具体实现,让您的软件,
不仅仅
具备优秀的功能,也能拥有漂亮、大气、友好的用户
界面
。
)用计算机解决
问题
的基本过程是(,计算机解决
问题
基本过程 答案.doc
计算机解决
问题
基本过程单选题本大题共题,总
分
100
?
分
1.(20
分
)在日常生活中,我们常常会碰到许多需要解决的
问题
,以下描述中最适合用计算机编程来处理的是()A..确定放学回家的路线B.计算某个同学期中成绩的部
分
C....
安卓开发2048不显示游戏
界面
的百
分
百解决方法
学习安卓UI开发的时候一定少不了做2048这款游戏来练手,从网上的极客资源学习下来或者是...可以百
分
百解决
界面
不显示的
问题
。 如果解决了你的困扰,可以点个赞支持一下我。 代码改动:在GameView这个class中写一个
pytorch搭建PyQt5
界面
实战:ResNet-18实现CLFAR-10图像
分
类,并进行
界面
显示
pytorch实战:ResNet-18实现CLFAR-10图像
分
类,并利用PyQt5进行人机
界面
显示 实验环境: 1.pytorch-1.6.0 2.python-3.7.9 3.window-10 4.pycharm 5.pyqt5(相应的QT Designer及工具包) CLFAR-10的数据集 作为一个初学...
weblogic安装时卡在百
分
百
界面
最近搭建公司服务器中间件时卡在weblogic安装时卡在百
分
百
界面
,一直不动: 如下图 具体原因因为本人也不是太懂java,留着后面更新该原因。 在网上搜索了一下,大致解决
问题
了。 后面安装成功的过程如下: 第...
控件与界面
604
社区成员
12,293
社区内容
发帖
与我相关
我的任务
控件与界面
PowerBuilder 控件与界面
复制链接
扫一扫
分享
社区描述
PowerBuilder 控件与界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章