如何在PB中实现透明DATAWINDOW?

pb 15个小技巧汇总 表达式中rgb(255,240,194)为浅黄色,rgb(255,254,249)为浅白色,rgb(247,247,239)为浅黄色。10 、//如何生成固定长度的前面加零的数字编号,例如:12生成"00012",1234生成"01234"。dw_1.setFilter("(name like '赵%') and (sex = 0)")可以利用Describe("column_name.width")是否为"!调用方法:shRunDefltBrowser("www.pdriver.com") 阅读详情

1、简单一点的方法,先用一张大背景图放在WINDOW上,再用DW正好遮挡住的那部分图当作DATAWINDOW的背景图,且将该图置在DW的最底层,同时设各列的背景色为透明即可;
该方法优点是比较简单,缺点是只适用于DW,其他控件不适用,如:LABEL、TEXT、COMMANDBUTTON等;

2、麻烦一点的方法,用API的BITBLT,缺点是比较麻烦,优点是适用于绝大部分控件,效果图见:

http://blog.youkuaiyun.com/balloonman2002/gallery/image/63164.aspx

本方法调整后可以轻松适用其他控件,如按钮,如图:

http://blog.youkuaiyun.com/balloonman2002/gallery/image/63218.aspx

本文重在举例演示,里面有诸多具体细节未尽考虑,如需改进请自行实施,相关原理参考:

http://blog.youkuaiyun.com/balloonman2002/archive/2004/06/28/28706.aspx

**************************************************************

方法二具体代码如下:

$PBExportHeader$w_trans.srw
forward
global type w_trans from Window
end type
type p_2 from picture within w_trans
end type
type st_2 from statictext within w_trans
end type
type st_1 from statictext within w_trans
end type
type dw_2 from datawindow within w_trans
end type
type dw_1 from datawindow within w_trans
end type
type p_1 from picture within w_trans
end type
end forward

global type w_trans from Window
int X=1056
int Y=480
int Width=2574
int Height=1700
boolean TitleBar=true
string Title="透明DW测试"
long BackColor=15780518
boolean ControlMenu=true
boolean MinBox=true
boolean MaxBox=true
boolean Resizable=true
event ue_paint pbm_paint
event ue_1024 pbm_custom01
p_2 p_2
st_2 st_2
st_1 st_1
dw_2 dw_2
dw_1 dw_1
p_1 p_1
end type
global w_trans w_trans

type prototypes
function long BitBlt ( long hdcdest, long xdest, long ydest, long nwidth,long nheight,long hdcsrc, long xsrc, long ysrc, long dwrop ) library "gdi32"
function long CreateBitmap ( long nwidth, long nheight, long nplanes, long nbitcount, long lpbits ) library "gdi32"
function long SetBkColor ( long hdc, long crcolor ) library "gdi32"
function long SelectObject ( long hdc, long hobject ) library "gdi32"
function long CreateCompatibleBitmap ( long hdc, long nwidth, long nheight ) library "gdi32"
function long CreateCompatibleDC ( long hdc ) library "gdi32"
function long DeleteDC ( long hdc ) library "gdi32"
function long DeleteObject ( long hobject ) library "gdi32"
function long GetDC ( long hwnd ) library "user32"
function Integer ReleaseDC ( long hwnd, long hdc ) library "user32"

end prototypes
type variables

Long il_SrcDC, il_DstDC,il_MapDstDC_Old,il_MapDstHandle, il_OldMapDstHandle,il_SrcWidth,il_SrcHeight,il_color

constant long SRCCOPY = 13369376
constant long NOTSRCCOPY = 3342344
constant long SRCAND = 8913094
constant long SRCINVERT = 6684742

dragobject io_obj

long il_count

OLEObject demo
end variables
forward prototypes
public subroutine wf_maketrans ()
public subroutine wf_makedc ()
public subroutine wf_maketrans ()
public subroutine wf_makedc ()
end prototypes

event ue_paint;//post wf_formbak()
end event

event ue_1024;messagebox("demo","demo")
end event

public subroutine wf_maketrans ();long ll_oldBackGround
Long ll_MapSrcDc,ll_MapDstDC
Long ll_MapSrcHandle, ll_OldMapSrcHandle,ll_MapDstHandle,ll_OldMapDstHandle
Long ll_maskDC, ll_InvertDC, ll_maskHandle, ll_InvertHandle, ll_oldMaskHandle, ll_OldInvertHandle

ll_maskDc = CreateCompatibleDC(il_SrcDC)
ll_maskHandle = CreateBitmap(il_SrcWidth, il_SrcHeight, 1, 1, 0)
ll_OldMaskHandle = SelectObject(ll_MaskDC, ll_MaskHandle)

ll_InvertDC = CreateCompatibleDC(ll_maskDc)
ll_InvertHandle = CreateBitmap(il_SrcWidth, il_SrcHeight, 1, 1, 0)
ll_OldInvertHandle = SelectObject(ll_InvertDC, ll_InvertHandle)

ll_oldBackGround = SetBkColor(il_SrcDC, il_color)
BitBlt(ll_maskDc, 0, 0, il_SrcWidth, il_SrcHeight, il_SrcDC, 0, 0, SRCCOPY)
SetBkColor(il_SrcDC, ll_oldBackGround)

BitBlt( ll_invertDC, 0, 0,il_SrcWidth, il_SrcHeight, ll_maskDC, 0, 0, NOTSRCCOPY)
 
ll_MapDstDC = CreateCompatibleDC(il_mapdstdc_old)
ll_MapDstHandle = CreateCompatibleBitmap(il_mapdstdc_old, il_SrcWidth, il_SrcHeight)
ll_OldMapDstHandle = SelectObject(ll_MapDstDC, ll_MapDstHandle)

ll_MapSrcDC = CreateCompatibleDC(il_SrcDC)
ll_MapSrcHandle = CreateCompatibleBitmap(il_SrcDC, il_SrcWidth, il_SrcHeight)
ll_OldMapSrcHandle = SelectObject(ll_MapSrcDC, ll_MapSrcHandle)

BitBlt(ll_MapSrcDC, 0, 0, il_SrcWidth, il_SrcHeight, il_SrcDC, 0, 0, SRCCOPY)

BitBlt(ll_MapSrcDc, 0, 0, il_SrcWidth, il_SrcHeight, ll_InvertDC, 0, 0, SRCAND)

BitBlt(ll_MapDstDC, 0, 0, il_SrcWidth, il_SrcHeight, il_MapDstDC_Old, 0,0, SRCCOPY)

BitBlt(ll_MapDstDC, 0, 0, il_SrcWidth, il_SrcHeight, ll_MaskDC, 0, 0 ,SRCAND)

BitBlt(ll_MapDstDC, 0, 0, il_SrcWidth, il_SrcHeight, ll_MapSrcDC, 0 ,0 , SRCINVERT)

BitBlt(il_SrcDC,0,0,il_SrcWidth,il_SrcHeight,ll_MapDstDC,0,0, SRCCOPY)

ll_MaskHandle = SelectObject(ll_MaskDC, ll_OldMaskHandle)
DeleteObject(ll_MaskHandle)
DeleteDC(ll_MaskDC)

ll_Inverthandle = SelectObject(ll_InvertDC, ll_OldInvertHandle)
DeleteObject(ll_InvertHandle)
DeleteDC(ll_InvertDC)

ll_MapSrcHandle = SelectObject(ll_MapSrcDC, ll_OldMapSrcHandle)
DeleteObject(ll_MapSrchandle)
DeleteDC(ll_MapSrcDC)

ll_MapDstHandle = SelectObject(ll_MapDstDC, ll_OldMapDstHandle)
DeleteObject(ll_MapDsthandle)
DeleteDC(ll_MapDstDC)
end subroutine
public subroutine wf_makedc ();Integer DRAWX, DRAWY

il_SrcWidth = UnitsToPixels(io_obj.Width, XUnitsToPixels!)
il_SrcHeight = UnitsToPixels(io_obj.Height, YUnitsToPixels!)

DRAWX = UnitsToPixels(io_obj.X, XUnitsToPixels!)
DRAWY = UnitsToPixels(io_obj.Y, YUnitsToPixels!)

il_MapDstDC_Old = CreateCompatibleDC(il_DstDC)
il_MapDstHandle = CreateCompatibleBitmap(il_DstDC, il_SrcWidth, il_SrcHeight)
il_OldMapDstHandle = SelectObject(il_MapDstDC_Old, il_MapDstHandle)

io_obj.Hide()

p_1.setredraw(true)

BitBlt(il_MapDstDC_Old, 0, 0, il_SrcWidth, il_SrcHeight, il_DstDC, DRAWX, DRAWY, SRCCOPY)

io_obj.show()
end subroutine

on w_trans.create
this.p_2=create p_2
this.st_2=create st_2
this.st_1=create st_1
this.dw_2=create dw_2
this.dw_1=create dw_1
this.p_1=create p_1
this.Control[]={this.p_2,&
this.st_2,&
this.st_1,&
this.dw_2,&
this.dw_1,&
this.p_1}
end on

on w_trans.destroy
destroy(this.p_2)
destroy(this.st_2)
destroy(this.st_1)
destroy(this.dw_2)
destroy(this.dw_1)
destroy(this.p_1)
end on

event open;io_obj = dw_1
il_color = rgb(255,255,255)

il_DstDC = GetDC(Handle(io_obj.Getparent()))
il_SrcDC = GetDC(Handle(io_obj))

dw_1.insertrow(0)
dw_2.insertrow(0)

post wf_makedc()
end event
event close;ReleaseDC(handle(this),il_DstDC)
ReleaseDC(handle(this),il_SrcDC)

il_MapDstHandle = SelectObject(il_MapDstDC_Old, il_OldMapDstHandle)
DeleteObject(il_MapDstHandle)
DeleteDC(il_MapDstDC_Old)

end event
type p_2 from picture within w_trans
int X=1490
int Y=252
int Width=677
int Height=1216
string PictureName="c:/qq2000/newskins/雅典奥运/background.bmp"
boolean FocusRectangle=false
end type

type st_2 from statictext within w_trans
int X=1326
int Y=80
int Width=928
int Height=96
boolean Enabled=false
string Text="普通DW演示:"
boolean FocusRectangle=false
long TextColor=33554432
long BackColor=15780518
int TextSize=-12
int Weight=400
string FaceName="Arial"
FontCharSet FontCharSet=Ansi!
FontFamily FontFamily=Swiss!
FontPitch FontPitch=Variable!
end type

type st_1 from statictext within w_trans
int X=123
int Y=88
int Width=928
int Height=96
boolean Enabled=false
string Text="透明DW演示:"
boolean FocusRectangle=false
long TextColor=33554432
long BackColor=15780518
int TextSize=-12
int Weight=400
string FaceName="Arial"
FontCharSet FontCharSet=Ansi!
FontFamily FontFamily=Swiss!
FontPitch FontPitch=Variable!
end type

type dw_2 from datawindow within w_trans
int X=1358
int Y=336
int Width=992
int Height=1036
int TabOrder=20
boolean BringToTop=true
string DataObject="demo"
boolean Border=false
boolean HScrollBar=true
boolean VScrollBar=true
boolean LiveScroll=true
end type

type dw_1 from datawindow within w_trans
event lbuttondown pbm_lbuttondown
event lbuttonup pbm_lbuttonup
event ue_paint pbm_paint
int X=110
int Y=336
int Width=992
int Height=1036
int TabOrder=10
boolean BringToTop=true
string DataObject="demo"
boolean Border=false
boolean HScrollBar=true
boolean VScrollBar=true
boolean LiveScroll=true
end type

event ue_paint;post wf_maketrans()
end event
event rowfocuschanging;//this.visible = false
//this.visible = true
wf_maketrans()
//this.setfocus()
end event
event scrollvertical;wf_maketrans()
end event
type p_1 from picture within w_trans
int X=233
int Y=252
int Width=677
int Height=1216
string PictureName="c:/qq2000/newskins/雅典奥运/background.bmp"
boolean FocusRectangle=false
end type

PB报表自定义系统:基于DataWindow的动态配置化实践 在企业级应用开发中,报表需求频繁迭代,硬编码方式往往导致重复开发与维护成本居高不下。报表动态化设计的核心在于将界面展示与数据绑定解耦,通过元数据描述接口动态调整数据窗口属性,实现列布局、计算字段、过滤参数等元素的灵活配置。这种机制不仅提升了开发效率,还能支持运行期无编译发布,为存量系统改造提供了可行路径。在典型业务场景中,用户可调整列宽、增加金额计算列、按部门过滤数据,甚至实现列级权限控制。PowerBuilder的DataWindow凭借其强大的数据绑定与Describe/Modify接口,成为落地自定义 阅读详情

相关推荐

PB12票据打印实战:DataWindow套打对齐与PrintSend切纸钱箱控制

企业业务系统里,单据和小票打印始终是高频刚需,而打印位置跑偏、纸张规格错乱则是最常见的工程痛点。其根源往往不在打印函数本身,而是坐标单位、打印机DPI与纸张物理尺寸之间的映射关系没对齐。理解DataWindow基于千分之一英寸的坐标体系,以及它和针式打印机驱动之间的换算逻辑,是解决套打偏移的前提。合理设计票据模板、设定自定义纸张并进行两级偏移校准,能让内容精确落位。同时,借助PrintSend直通打印机指令,还能实现切纸、开钱箱等硬件控制。这些技术广泛适用于ERP、财务、物流、门店收银等场景,本文围绕Pow

weixin_29175469的博客 127

pb透明文本控件

forward global type uo_transparent_st from statictext end type end forward global type uo_transparent_st from statictext integer width = 288 integer height = 72 integer textsize = -9 integer weight ...

PB瓦工 306

PB12票据打印实战:数据窗口对位、自定义纸张与自动高度

在企业管理系统中,单据打印常遇到版式错位、纸张不匹配等难题,尤其在PowerBuilder这类传统开发环境中,数据窗口(DataWindow)既是数据展示的核心,也是打印输出的关键载体。理解千分之一英寸坐标换算、Band布局与打印机驱动的关系,是解决套打对齐的基础。通过配置自定义纸张、调整边距与起始坐标、启用自动高度(AutoHeight),可以实现预印票据、连续纸及动态行高单据的精准输出。同时,将打印参数封装为NVO模型,可提升维护效率,适配多打印机环境。本文从坐标换算、版式设计到打印调用链,系统梳理PB

weixin_31421613的博客 294

PB文本设置为透明色

文本框contructor事件: BackColor = 2^29 定义变量: boolean ib_painting 新增自定义事件ue_paint 事件ID(pbm_paint): if IsValid(This)then if ib_painting then Return 0 ib_painting = True ...

成长永远没有尽头 1069

PB设置窗口透明

将可窗口设置为透明,本人已经测试通过将可窗口设置为透明,本人已经测试通过

pb 使窗口的图片透明化 不规则窗口

pb 使窗口的图片透明化 不规则窗口 示图http://hi.youkuaiyun.com/attachment/201007/27/0_1280208790iy3X.gif

PB中文字标签背景透明实现方法

定义窗口实例变量:Boolean ib_painting st_1 的 Constructor 事件,程序:BackColor = 2^29 st_1 用 Event ID:pbm_paint 自定义用户事件 ue_paint ,程序: if IsValid(This) then if ib_painting then R

城市蜗牛 4367

PB 改变某行某列的字体、背景颜色等

通用函数 指定某行某列的属性值(字体、背景颜色等)

PowerBuilder 窗口透明SetLayeredWindowAttributes详解

1、引用dll动态库 //hwnd是透明窗体的句柄 crKey为颜色值, bAlpha是透明度,取值范围是[0,255], dwFlags是透明方式,可以取三个值: Function ulong SetLayeredWindowAttributes(ulong hwnd,ulong crKey,ulong bAlpha , ulong dwFlags) LIBRARY "user32.d...

weixin_37914760的博客 1295

深信服上网行为管理设备登录方法、恢复出厂、恢复控制台密码

1.初识设备 1.1 设备外观 1.2 软件版本 2.如何登录设备 首次拿到AC/SG设备时,可以通过以下方法登录设备控制台 SANGFOR AC/SG设备,各网口默认的出厂IP为: eth0(LAN):10.251.251.251/24 , eth1(DMZ)10.252.252.252/24 1、使用一根交叉线连接设备和电脑 (1) 如果电脑连接的是设备的eth0口,需先在电脑上配...

✍千里之行,始于足下 ^,^ 5万+

TMS320F280049C 学习笔记11 控制率加速器 CLA 例程

总结了TI官方在C2000Ware_3_01_00_00版本中提供的7个与CLA相关的例程。

whyorwhnt的专栏 1万+

在PB中实现透明DataWindow

1、简单一点的方法,先用一张大背景图放在WINDOW上,再用DW正好遮挡住的那部分图当作DATAWINDOW的背景图,且将该图置在DW的最底层,同时设各列的背景色为透明即可;该方法优点是比较简单,缺点是只适用于DW,其他控件不适用,如:LABEL、TEXT、COMMANDBUTTON等;2、麻烦一点的方法,用API的BITBLT,缺点是比较麻烦,优点是适用于绝大部分控件,效果图 本

1229

头歌MySQL数据库实训答案 有目录

头歌java实训答案集数据库部分一条一条的写,可鼠标手动粘贴,除特定命令外未分大小写。 第1关:创建数据库 第2关创建表 第3关:使用主键约束 第4关:外键约束 第5关:添加常用约束 MySQL数据库 - 数据库和表的基本操作(一) 第1关:查看表结构与修改表名 第2关:修改字段名与字段数据类型 第3关:添加与删除字段 第4关:修改字段的排列位置 第5关:删除表的外键约束 MySQL数据库 - 数据库和表的基本操作(二) 第1关:插入数据 第2关:更新数据 第3关:删除数据 MySQL数据库 - 单表查询(

m0_67401761的博客 4万+

纯pb 数据窗口(datawindow)水印

f_add_watermark(dw_1, ‘内部资料 机密文件’, 45, 0)创建方法,命名为:f_add_watermark。// 添加45度旋转的水印,透明度0%

weixin_37914760的博客 315

用Python进行GEO数据挖掘(学习笔记四):富集分析

该笔记详细解释了富集分析的工作原理,并简要地利用gseapy在python中进行富集分析的操作。

m0_64111502的博客 5649

第一次面试经历:集创北方数字IC前端面试(崩)总结

时间:2020年8月11日上午10点 公司:集创北方,做LED、LCD、OLED、AMOLED等显示器芯片的公司,应该主要是做显示驱动、图像处理、电源管理等这一块。 岗位:数字IC前端设计 城市:北京 形式:线上面试。感觉我俩是两个社畜,他说摄像头开不开都可以,我说那语音OK吗他说OK,于是直接语音问答。 项目经历:基于FPGA的车牌识别 & 先导存储器集成工艺开发(课题组) & 基于FPGA的贪吃蛇小游戏 反正是凉凉的,这时候准备还不足,前面都在复习项目没怎么刷过题。 过程如下: 自我介绍

coin的博客 6678

PB 技巧汇总

数据窗口:数据窗口多表更新 http://faq.youkuaiyun.com/read/201233.htmldynamic 的用法与技巧 http://faq.youkuaiyun.com/read/2113.html计算型域的取值 http://faq.youkuaiyun.com/read/18738.htmlDataWindow中按钮的编程问题 http://faq.youkuaiyun.com/read/177388

2548

CLASSB类移植(满足IEC 60730-1和60355-1标准)

针对软件认证需要满足IEC 60730-1和60335-1标准,ST公司专门提供的软件扩展包X-CUBE-CLASSB,它包含自测库和文档,支持多种STM32系列芯片,通过预集成测试库和标准化流程,帮助开发者快速满足国际安全标准,适用于家电、工业控制等高可靠性场景。ClassB软件包程序检测内容分为两个主要部分:启动时的自检和运行时的周期自检,MCU在上电的时候会进行复位启动,在启动完成以后会进行运行自检。

m0_61973119的博客 1401

PB数据窗口对象之字段属性和计算域属性

〓字段和计算域的属性-更多见帮助(DataWindow objectproperties) *获取字段的类型(Coltype属性) 字段的ColType属性是一个非常有用的属性,使用该属性可以在程序运行时获取字段的类型。但是不能在运行时修改该属性。下面是它的语法: 直接引用:dw_1.object.object.objectname.coltype 在Describe函数中:"objectname.coltype" 不管使用哪种方式,对同一个字段获得的类型都相同。字段类型有char(n),date,dat

wangyuy的博客 2863

FreeRTOS全攻略:从入门到精通

本文聚焦 FreeRTOS,从基础概念出发,阐述其开源、轻量级等优势。着重介绍 FreeRTOS 入门知识,涵盖内存管理、任务操作、同步互斥机制等核心内容。其中,空闲任务与钩子函数保障系统基础运行与功能扩展;队列、信号量、互斥锁和事件组等机制,分别从数据传递、资源访问控制、优先级问题解决及多任务同步等方面,为开发者提供高效的任务间协作与资源管理方案,助力开发者掌握 FreeRTOS 核心技术,为嵌入式项目开发筑牢基础。

邓邓子的博客 6357

解决MiGPT部署痛点:小米账号异地登录安全验证的解决方案

为让小米音箱更智能🤖,部署MiGPT时遇到小米账号异地登录验证问题,手动验证后仍无法解决。本文分享亲测有效的简化方案✨:通过浏览器F12获取passToken📝,手动创建mi.json配置文件并挂载到Docker容器,无需本地运行MiGPT,直接绕过异地验证,附完整操作步骤和问题排查指南。

XiaoqiangClub的博客 1438
上一篇: 如何将DW中不同内容保存到EXCEL不同的SHEET当中?(原创)
下一篇: WEBBROWSE控件中模拟点击文本超链接
balloonman2002
博客等级 码龄24年 115粉丝 30原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值