pb11.5开发的toolbar,怎样去掉边框?

北京大丸子 2014-03-12 04:11:17
请问怎样去掉toolbar的边框?

我的是pb11.5

...全文
374 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
北京大丸子 2014-03-18
  • 打赏
  • 举报
回复
引用 12 楼 lzp_lrp 的回复:
代码已经上传 请参考以下链接 http://download.csdn.net/detail/lzp_lrp/7053323
这个帖子可以结了:我重新做了一个函数 起名叫f_toolbar 无返回值, 参数有一个window型,起名 w_name
string ls_ClassName, ls_WindowName
long ll_null, ll_toolbar
ls_ClassName = "FNFIXEDBAR115"
SetNull(ls_WindowName)
SetNull(ll_NULL)
ll_toolbar = FindWindowEXA( Handle(w_name), ll_NULL, ls_ClassName, ls_WindowName )

//获取toolbar工具栏的宽度和高度
RECT Rect1
GetClientRect(ll_toolbar,   Rect1 )  //rect是自定义一个结构体,分为left,top,right,bottom四个参数,都是long型的。

long ll_handle
ws_position lws_pointapi[]


// 工具条坐标参数
int li_xpos, li_ypos, li_width
li_xpos = 2
li_ypos = 2
li_width = 3 //该长度,用来去掉toolbar右边的边框

//工具条左上原点
lws_pointapi[1].xpos = li_xpos
lws_pointapi[1].ypos = li_ypos

//工具条右上原点
lws_pointapi[2].xpos=Rect1.Right - li_width  
lws_pointapi[2].ypos = li_ypos

//工具条右下原点
lws_pointapi[3].xpos = Rect1.Right - li_width  
lws_pointapi[3].ypos =Rect1.Bottom

//工具条左上下原点
lws_pointapi[4].xpos = li_xpos
lws_pointapi[4].ypos = Rect1.bottom 

ll_handle = CreatePolygonRgn(lws_pointapi[], 4, 1)

//其中第 1 个参数为多边形各个顶点坐标值的数组
//其中第 2 个参数为多边形边数,可修改,配合数组值
//其中第 3 个参数为填充模式 ALTERNATE /WINDING 

SetwindowRgn(ll_toolbar, ll_handle, true)
//////////////////////////////////////////////////////////////////////////////////////// 声明结构体rect ,带四个long型参数,分别是left ,top,right,bottom /////////////////////////////////////////////////////////////////////////////////////// 声明 globle extrend function function long FindWindowExA( long hParent, long hChildAfter, String lpszClass, String lpszWindow ) Library "user32.dll" alias for "FindWindowExA;Ansi" Function ulong CreatePolygonRgn (ref ws_position lppt[], int cPoints, int fnPolyFillMode ) Library "gdi32.dll" FUNCTION ulong SetWindowRgn(ulong hWnd,ulong hRgn,boolean bRedraw) LIBRARY "user32.dll" FUNCTION ulong GetClientRect(ulong hwnd,ref RECT lpRect) LIBRARY "user32.dll" //////////////////////////////////////////////// 最后感谢老大的支持
WorldMobile 2014-03-17
  • 打赏
  • 举报
回复
引用 15 楼 jiang396 的回复:
这是我的最后的效果,虽然实现了,但感觉还是不知所以然,只是通过实验数值,把toolbar的width手工实验出来的
呵呵,用getwindowrect 可以取得宽度,但是是整个工具栏的宽度,不是到最后一个图标的宽度,所以只能试了
北京大丸子 2014-03-17
  • 打赏
  • 举报
回复
引用 9 楼 lzp_lrp 的回复:
[quote=引用 7 楼 jiang396 的回复:] [quote=引用 6 楼 lzp_lrp 的回复:] 那用个简单的方法,放一个线条,景色为窗口的背景色,把Y设置负值,看看能不能把那条线盖住 如果不行,就用api画线,把那个边框盖住,代码放在窗口的paint事件里
折腾了一天,还是没搞定,对于这种api的方式,掌握的比较差,哎,如果版主有精力,再帮忙搞搞吧,万谢[/quote] 等有点时间,帮你弄一下[/quote] 太感谢老大了。
北京大丸子 2014-03-17
  • 打赏
  • 举报
回复


这是我的最后的效果,虽然实现了,但感觉还是不知所以然,只是通过实验数值,把toolbar的width手工实验出来的
WorldMobile 2014-03-17
  • 打赏
  • 举报
回复
引用 7 楼 jiang396 的回复:
[quote=引用 6 楼 lzp_lrp 的回复:] 那用个简单的方法,放一个线条,景色为窗口的背景色,把Y设置负值,看看能不能把那条线盖住 如果不行,就用api画线,把那个边框盖住,代码放在窗口的paint事件里
折腾了一天,还是没搞定,对于这种api的方式,掌握的比较差,哎,如果版主有精力,再帮忙搞搞吧,万谢[/quote] 等有点时间,帮你弄一下
北京大丸子 2014-03-17
  • 打赏
  • 举报
回复
引用 12 楼 lzp_lrp 的回复:
代码已经上传

请参考以下链接

http://download.csdn.net/detail/lzp_lrp/7053323



关键这里,怎样能够得到工具栏的宽度?

//工具栏的宽度和高度
long ll_toolbar_weight
ll_toolbar_weight = 850


最终得到这个效果::
北京大丸子 2014-03-17
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/lzp_lrp/7053323[/quote]

首先感谢楼主,您的程序我做了修改,如图,这样就toolbar图标下面有了【文字】


然后我又将您的代码做了修改:


string ls_ClassName, ls_WindowName
long ll_null, ll_toolbar
ls_ClassName = "FNFIXEDBAR115"
SetNull(ls_WindowName)
SetNull(ll_NULL)

ll_toolbar = FindWindowEXA( Handle(this), ll_NULL, ls_ClassName, ls_WindowName )

//工具栏的宽度和高度
long ll_toolbar_weight
ll_toolbar_weight = 850 //关键这个数值,我是一点一点实验出来的,否则还是要带边框,但实在不解,这个数值能不能用程序得到?
long ll_toolbar_hegith =310



long ll_handle
ws_position lws_pointapi[]

// 图形2

int li_xpos, li_ypos, li_width, li_height
li_xpos = 2
li_ypos = 2


lws_pointapi[1].xpos = li_xpos
lws_pointapi[1].ypos = li_ypos

lws_pointapi[2].xpos = UnitsToPixels(ll_toolbar_weight, xunitstopixels!)
lws_pointapi[2].ypos = li_ypos

lws_pointapi[3].xpos = UnitsToPixels(ll_toolbar_weight, xunitstopixels!)
lws_pointapi[3].ypos = UnitsToPixels(ll_toolbar_hegith, yunitstopixels!)

lws_pointapi[4].xpos = li_xpos
lws_pointapi[4].ypos = UnitsToPixels(ll_toolbar_hegith, yunitstopixels!)

ll_handle = CreatePolygonRgn(lws_pointapi[], 4, 1)

//其中第 1 个参数为多边形各个顶点坐标值的数组
//其中第 2 个参数为多边形边数,可修改,配合数组值
//其中第 3 个参数为填充模式 ALTERNATE /WINDING

SetwindowRgn(ll_toolbar, ll_handle, true)

//return 1


[quote=引用 12 楼 lzp_lrp 的回复:]
代码已经上传

请参考以下链接
WorldMobile 2014-03-17
  • 打赏
  • 举报
回复
代码已经上传 请参考以下链接 http://download.csdn.net/detail/lzp_lrp/7053323
WorldMobile 2014-03-17
  • 打赏
  • 举报
回复
北京大丸子 2014-03-16
  • 打赏
  • 举报
回复
我的是pb11.5
北京大丸子 2014-03-16
  • 打赏
  • 举报
回复
引用 6 楼 lzp_lrp 的回复:
那用个简单的方法,放一个线条,景色为窗口的背景色,把Y设置负值,看看能不能把那条线盖住

如果不行,就用api画线,把那个边框盖住,代码放在窗口的paint事件里


折腾了一天,还是没搞定,对于这种api的方式,掌握的比较差,哎,如果版主有精力,再帮忙搞搞吧,万谢
WorldMobile 2014-03-16
  • 打赏
  • 举报
回复
那用个简单的方法,放一个线条,景色为窗口的背景色,把Y设置负值,看看能不能把那条线盖住 如果不行,就用api画线,把那个边框盖住,代码放在窗口的paint事件里
WorldMobile 2014-03-15
  • 打赏
  • 举报
回复
不要放在菜单里面,放到窗口里面,取得工具栏的handle,然后取宽度,然后调用那个函数
北京大丸子 2014-03-15
  • 打赏
  • 举报
回复
引用 4 楼 lzp_lrp 的回复:
不要放在菜单里面,放到窗口里面,取得工具栏的handle,然后取宽度,然后调用那个函数
真的不会用,怎样取得工具栏的handle,老大能不能贴一段在open事件里面的代码及这个函数?或者发一个这个例子的pbl。我的邮箱 getmail@qq.com。多谢多谢了
北京大丸子 2014-03-14
  • 打赏
  • 举报
回复
引用 2 楼 lzp_lrp 的回复:
给你个方法,把对象的边框去掉 long ll_handle ws_position lws_pointapi[] int li_xpos, li_ypos, li_width, li_height li_xpos = 3 li_ypos = 25 li_width = 3 li_height = 3 lws_pointapi[1].xpos = li_xpos lws_pointapi[1].ypos = li_ypos lws_pointapi[2].xpos = UnitsToPixels(this.width, xunitstopixels!) - li_width lws_pointapi[2].ypos = li_ypos lws_pointapi[3].xpos = UnitsToPixels(this.width, xunitstopixels!) - li_width lws_pointapi[3].ypos = UnitsToPixels(this.height, yunitstopixels!) - li_height lws_pointapi[4].xpos = li_xpos lws_pointapi[4].ypos = UnitsToPixels(this.height, yunitstopixels!) - li_height ll_handle = CreatePolygonRgn(lws_pointapi[], 4, 1) //其中第 1 个参数为多边形各个顶点坐标值的数组 //其中第 2 个参数为多边形边数,可修改,配合数组值 //其中第 3 个参数为填充模式 ALTERNATE /WINDING SetwindowRgn(handle(this), ll_handle, true) return 1 函数声明如下: Function ulong CreatePolygonRgn (ref ws_position lppt[], int cPoints, int fnPolyFillMode ) Library "gdi32.dll" FUNCTION ulong SetWindowRgn(ulong hWnd,ulong hRgn,boolean bRedraw) LIBRARY "user32.dll" //ws_position结构如下 long xpos long ypos
版主好,这个函数我是放到menu里面add一个新函数,但报错,说 UnitsToPixels(this.width 这个类型不对,this.width这种代词加属性的方式不能获得菜单条的宽度。应该怎样修改?
WorldMobile 2014-03-13
  • 打赏
  • 举报
回复
给你个方法,把对象的边框去掉 long ll_handle ws_position lws_pointapi[] int li_xpos, li_ypos, li_width, li_height li_xpos = 3 li_ypos = 25 li_width = 3 li_height = 3 lws_pointapi[1].xpos = li_xpos lws_pointapi[1].ypos = li_ypos lws_pointapi[2].xpos = UnitsToPixels(this.width, xunitstopixels!) - li_width lws_pointapi[2].ypos = li_ypos lws_pointapi[3].xpos = UnitsToPixels(this.width, xunitstopixels!) - li_width lws_pointapi[3].ypos = UnitsToPixels(this.height, yunitstopixels!) - li_height lws_pointapi[4].xpos = li_xpos lws_pointapi[4].ypos = UnitsToPixels(this.height, yunitstopixels!) - li_height ll_handle = CreatePolygonRgn(lws_pointapi[], 4, 1) //其中第 1 个参数为多边形各个顶点坐标值的数组 //其中第 2 个参数为多边形边数,可修改,配合数组值 //其中第 3 个参数为填充模式 ALTERNATE /WINDING SetwindowRgn(handle(this), ll_handle, true) return 1 函数声明如下: Function ulong CreatePolygonRgn (ref ws_position lppt[], int cPoints, int fnPolyFillMode ) Library "gdi32.dll" FUNCTION ulong SetWindowRgn(ulong hWnd,ulong hRgn,boolean bRedraw) LIBRARY "user32.dll" //ws_position结构如下 long xpos long ypos
北京大丸子 2014-03-13
  • 打赏
  • 举报
回复
呼叫老大,帮帮我把

1,076

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧