PB12.5中的数据窗口绘图控件具体怎么用?

as1139688 2012-09-04 09:39:17
PB12.5中的数据窗口绘图控件具体怎么用?
http://blog.csdn.net/lzp_lrp/article/details/7001582这个里面说了但是没做出来,求高手指点。
...全文
633 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yh10231033 2012-10-17
  • 打赏
  • 举报
回复
非常好奇,但是看不懂他怎么画出来的,,那个函数还能看懂,但这个函数要怎么用呢?SelectObject(al_dc, ll_brush)中的al_dc是什么,是handle(dwo)的返回值吗?数据窗口的句柄吗?
as1139688 2012-09-06
  • 打赏
  • 举报
回复
数据窗口控件的表达式是这样写的mydrawpieslice (getpaintDC(), getpaintrectX(), getpaintrecty(),getpaintrectwidth(), getpaintrectheight())
getpaintDC()的返回值是一个值类型,但是SelectObject(al_dc, ll_brush)的第一个参数是需要一个引用类型。这个时候该怎么办?
as1139688 2012-09-06
  • 打赏
  • 举报
回复
这是版主提供的绘图函数:
global type MyDrawPieSlice from function_object
end type

forward prototypes
global function boolean mydrawpieslice (long al_dc, long al_x, long al_y, long al_w, long al_h)
end prototypes

global function boolean mydrawpieslice (long al_dc, long al_x, long al_y, long al_w, long al_h);
long ll_handle
ws_position lws_pointapi[]

// 图形2

long ll_pen, ll_brush

//创建一个画笔
ll_pen = CreatePen(0, 1, rgb(0, 0, 255))
SelectObject(al_dc, ll_pen)

//创建一个刷子
ll_brush = CreateSolidBrush(rgb(0, 255, 255))
SelectObject(al_dc, ll_brush)

//画一个三角形
lws_pointapi[1].xpos = al_x + 26
lws_pointapi[1].ypos = al_y + 1

lws_pointapi[2].xpos = al_x + 51
lws_pointapi[2].ypos = al_y + 26

lws_pointapi[3].xpos = al_x + 1
lws_pointapi[3].ypos = al_y + 26
Polygon(al_dc, lws_pointapi, 3)

//画一个四边形
al_x += 30
al_y += 50

lws_pointapi[1].xpos = al_x
lws_pointapi[1].ypos = al_y

lws_pointapi[2].xpos = al_x - 20
lws_pointapi[2].ypos = al_y + 20

lws_pointapi[3].xpos = al_x + 40
lws_pointapi[3].ypos = al_y + 20

lws_pointapi[4].xpos = al_x + 60
lws_pointapi[4].ypos = al_y
Polygon(al_dc, lws_pointapi, 4)

//画一个六连形
al_x += 100
al_y -= 20
lws_pointapi[1].xpos = al_x
lws_pointapi[1].ypos = al_y

lws_pointapi[2].xpos = al_x - 50
lws_pointapi[2].ypos = al_y + 50

lws_pointapi[3].xpos = al_x
lws_pointapi[3].ypos = al_y + 100

lws_pointapi[4].xpos = al_x + 100
lws_pointapi[4].ypos = al_y + 100

lws_pointapi[5].xpos = al_x + 150
lws_pointapi[5].ypos = al_y + 50

lws_pointapi[6].xpos = al_x + 100
lws_pointapi[6].ypos = al_y + 0

Polygon(al_dc, lws_pointapi, 6)


//写几个字
string ls_text
//gl_once = gl_once + 1

ls_text = '当前的文本是画出来的'
//ls_text = string(gl_once)

ws_rect lws_rect

lws_rect.left = al_x - 100
lws_rect.top = al_y + 130
lws_rect.right = al_w - 220
lws_rect.bottom = al_h
DrawText(al_dc, ls_text, lenA(ls_text), lws_rect, 1)

//画个饼图
al_x += 150
Pie(al_dc, al_x, al_y, al_x + 100, al_y + 100, al_x + 50, al_y + 50, al_x + 20, al_y + 20)

//画一个长方体
al_x += 50
al_y += 80

//画正面
lws_pointapi[1].xpos = al_x - 20
lws_pointapi[1].ypos = al_y + 20

lws_pointapi[2].xpos = al_x + 40
lws_pointapi[2].ypos = al_y + 20

lws_pointapi[3].xpos = al_x + 40
lws_pointapi[3].ypos = al_y + 100

lws_pointapi[4].xpos = al_x - 20
lws_pointapi[4].ypos = al_y + 100
Polygon(al_dc, lws_pointapi, 4)

//deleteobject(ll_brush)
//ll_brush = CreateSolidBrush(rgb(252, 213, 180))
//SelectObject(al_dc, ll_brush)

//画上边
lws_pointapi[1].xpos = al_x
lws_pointapi[1].ypos = al_y

lws_pointapi[2].xpos = al_x - 20
lws_pointapi[2].ypos = al_y + 20

lws_pointapi[3].xpos = al_x + 40
lws_pointapi[3].ypos = al_y + 20

lws_pointapi[4].xpos = al_x + 60
lws_pointapi[4].ypos = al_y
Polygon(al_dc, lws_pointapi, 4)

//画侧面
lws_pointapi[1].xpos = al_x + 60
lws_pointapi[1].ypos = al_y

lws_pointapi[2].xpos = al_x + 40
lws_pointapi[2].ypos = al_y + 20

lws_pointapi[3].xpos = al_x + 40
lws_pointapi[3].ypos = al_y + 100

lws_pointapi[4].xpos = al_x + 60
lws_pointapi[4].ypos = al_y + 80
Polygon(al_dc, lws_pointapi, 4)



//释放画笔和画刷
deleteobject(ll_pen)
deleteobject(ll_brush)

return true
end function
现在有一个问题:
API函数SelectObject(al_dc, ll_brush)的第一个参数需要一个引用类型的但是把al_dc声明为refrence类型后在数据窗口控件的表达式里面调用会报错。这个应该怎么办?

as1139688 2012-09-04
  • 打赏
  • 举报
回复
是不是在数据窗口中用表达式paint()来调用绘图函数?我这样做了但是没有画出来不知道是为什么?

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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