本文介绍了如何在PowerBuilder下制作特殊形状的数据窗口及按钮的方法。以下是全部源码,可以把整个窗口的源代码导入到PBL里自己运行一下试试。
$PBExportHeader$w_button.srw
forward
global type w_button from window
end type
type cb_11 from commandbutton within w_button
end type
type cb_10 from commandbutton within w_button
end type
type em_3 from editmask within w_button
end type
type em_2 from editmask within w_button
end type
type em_1 from editmask within w_button
end type
type cb_9 from commandbutton within w_button
end type
type cb_8 from commandbutton within w_button
end type
type cb_7 from commandbutton within w_button
end type
type cb_6 from commandbutton within w_button
end type
type cb_5 from commandbutton within w_button
end type
type cb_4 from commandbutton within w_button
end type
type cb_3 from commandbutton within w_button
end type
type cb_2 from commandbutton within w_button
end type
type cb_1 from commandbutton within w_button
end type
type st_1 from statictext within w_button
end type
type ws_position from structure within w_button
end type
end forward
type ws_position from structure
long xpos
long ypos
end type
global type w_button from window
integer width = 2400
integer height = 1800
boolean titlebar = true
string title = "特殊形状数据窗口演示"
boolean controlmenu = true
boolean minbox = true
boolean maxbox = true
long backcolor = 17725690
string icon = "AppIcon!"
boolean center = true
cb_11 cb_11
cb_10 cb_10
em_3 em_3
em_2 em_2
em_1 em_1
cb_9 cb_9
cb_8 cb_8
cb_7 cb_7
cb_6 cb_6
cb_5 cb_5
cb_4 cb_4
cb_3 cb_3
cb_2 cb_2
cb_1 cb_1
st_1 st_1
end type
global w_button w_button
type prototypes
FUNCTION 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 prototypes
forward prototypes
public function integer of_set_oval (commandbutton acb_button)
public function integer wf_set_color ()
end prototypes
public function integer of_set_oval (commandbutton acb_button);
//////////////////////////////////////////////////
// //
// 测试用数据(窗口多边形) //
// //
//////////////////////////////////////////////////
long ll_x1, ll_x2, ll_x3
long ll_y1, ll_y2, ll_y3
long ll_handle
ll_x1 = 1
ll_y1 = 1
ll_x2 = UnitsToPixels(acb_button.width, xunitstopixels!)
ll_y2 = UnitsToPixels(acb_button.height, yunitstopixels!)
ll_x3 = 64
ll_y3 = 64
ll_handle = CreateRoundRectRgn(ll_x1, ll_y1, ll_x2, ll_y2, ll_x3, ll_y3)
SetwindowRgn(handle(acb_button), ll_handle, true)
return 1
end function
public function integer wf_set_color ();long ll_red, ll_green, ll_blue
long ll_data
ll_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_data
em_1.backcolor = ll_data
em_2.backcolor = ll_data
em_3.backcolor = ll_data
st_1.backcolor = ll_data
return 1
end function
on w_button.create
this.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 on
on 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 on
event mousemove;Send(handle(this), 274, 61458, 0)
end event
type cb_11 from commandbutton within w_button
integer x = 1216
integer y = 1096
integer width = 562
integer height = 148
integer taborder = 70
integer textsize = -12
integer weight = 700
fontcharset fontcharset = gb2312charset!
fontpitch fontpitch = variable!
string facename = "宋体"
string text = "半圆形花边"
end type
event clicked;//////////////////////////////////////////////////
// //
// 测试用数据(窗口多边形) //
// //
//////////////////////////////////////////////////
long ll_handle, ll_data
ws_position lws_pointapi[]
long ll_xpos, ll_ypos, ll_width, ll_height
long ll_xnum, ll_ynum
long ll_x, ll_y, ll_flower = 20
long ll_i, ll_k
ll_xpos = 1
ll_ypos = 1
ll_width = UnitsToPixels(parent.width, xunitstopixels!)
ll_height = UnitsToPixels(parent.height, yunitstopixels!)
ll_xpos = ll_xpos + 5
ll_ypos = ll_ypos + 25 + ll_flower
ll_width = ll_width - 20
ll_width = ll_width - mod(ll_width - ll_xpos, ll_flower)
ll_xnum = (ll_width - ll_xpos) / ll_flower
ll_height = ll_height - 20
ll_height = ll_height - mod(ll_height - ll_ypos, ll_flower)
ll_ynum = (ll_height - ll_ypos) / ll_flower
lws_pointapi[1].xpos = ll_xpos + ll_flower / 2
lws_pointapi[1].ypos = ll_ypos - ll_flower / 2
lws_pointapi[2].xpos = ll_width + ll_flower / 2
lws_pointapi[2].ypos = ll_ypos - ll_flower / 2
lws_pointapi[3].xpos = ll_width + ll_flower / 2
lws_pointapi[3].ypos = ll_height + ll_flower /2
lws_pointapi[4].xpos = ll_xpos + ll_flower - ll_flower / 2
lws_pointapi[4].ypos = ll_height + ll_flower/2
ll_handle = CreatePolygonRgn(lws_pointapi[], 4, 1)
for ll_i = 1 to ll_xnum + 1
ll_y = ll_ypos - ll_flower
ll_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)
next
for ll_i = 1 to ll_ynum + 1
ll_y = ll_ypos + ll_flower * ( ll_i - 1 )
ll_x = ll_xpos + ll_flower * ll_xnum
ll_data = CreateEllipticRgn(ll_x, ll_y, ll_x + ll_flower, ll_y + ll_flower)
CombineRgn(ll_handle, ll_handle, ll_data, 2)
next
for ll_i = 1 to ll_xnum + 1
ll_y = ll_ypos + ll_flower * ll_ynum
ll_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)
next
for ll_i = 1 to ll_ynum + 1
ll_y = ll_ypos + ll_flower * (ll_ynum - ll_i + 1)
ll_x = ll_xpos
ll_data = CreateEllipticRgn(ll_x, ll_y, ll_x + ll_flower, ll_y + ll_flower)
CombineRgn(ll_handle, ll_handle, ll_data, 2)
next
SetwindowRgn(handle(parent), ll_handle, true)
end event
type cb_10 from commandbutton within w_button
integer x = 1216
integer y = 1096
integer width = 562
integer height = 148
integer taborder = 60
integer textsize = -12
integer weight = 700
fontcharset fontcharset = gb2312charset!
fontpitch fontpitch = variable!
string facename = "宋体"
string text = "关闭窗口"
end type
event clicked;close(parent)
end event
type em_3 from editmask within w_button
event editchanged pbm_enchange
integer x = 1289
integer y = 104
integer width = 251
integer height = 92
integer taborder = 60
integer textsize = -9
integer weight = 400
fontcharset fontcharset = gb2312charset!
fontpitch fontpitch = variable!
string facename = "宋体"
long textcolor = 33554432
long backcolor = 17725690
string text = "14"
alignment alignment = right!
borderstyle borderstyle = stylelowered!
string mask = "###"
boolean autoskip = true
boolean spin = true
double increment = 5
string minmax = "0~~255"
end type
event editchanged;wf_set_color()
end event
type em_2 from editmask within w_button
event editchanged pbm_enchange
integer x = 1024
integer y = 104
integer width = 251
integer height = 92
integer taborder = 60
integer textsize = -9
integer weight = 400
fontcharset fontcharset = gb2312charset!
fontpitch fontpitch = variable!
string facename = "宋体"
long textcolor = 33554432
long backcolor = 17725690
string text = "120"
alignment alignment = right!
borderstyle borderstyle = stylelowered!
string mask = "###"
boolean autoskip = true
boolean spin = true
double increment = 5
string minmax = "0~~255"
end type
event editchanged;wf_set_color()
end event
type em_1 from editmask within w_button
event editchanged pbm_enchange
integer x = 759
integer y = 104
integer width = 251
integer height = 92
integer taborder = 60
integer textsize = -9
integer weight = 400
fontcharset fontcharset = gb2312charset!
fontpitch fontpitch = variable!
string facename = "宋体"
long textcolor = 33554432
long backcolor = 17725690
string text = "250"
alignment alignment = right!
borderstyle borderstyle = stylelowered!
string mask = "###"
boolean autoskip = true
boolean spin = true
double increment = 5
string minmax = "0~~255"
end type
event editchanged;wf_set_color()
end event
type cb_9 from commandbutton within w_button
integer x = 590
integer y = 1096
integer width = 562
integer height = 148
integer taborder = 50
integer textsize = -12
integer weight = 700
fontcharset fontcharset = gb2312charset!
fontpitch fontpitch = variable!
string facename = "宋体"
string text = "圆形花边"
end type
新闻热点
疑难解答