PB [Grid风格数据窗口改变线条颜色] 的变通实现方法(也可以成为 带表头的Grid数据窗口)
来源:互联网 发布:mysql添加数据 编辑:程序博客网 时间:2024/06/04 18:33
PB中Grid类型的数据窗口是用的最广泛的一种类型,特点:创建快速,位置调整方便,运行后用户也可以方便的调整列的宽度,列的位置, 运行效率也最高。
但是这个数据窗口类型的线条颜色是固定的,不能改变(可以通过API或者第三方控件修改内存数据改变) ,而且线条也不是很美观,呵呵, 不少人对他的颜色不满意。 如果想做出漂亮的报表PB提供另外一种数据窗口类型Tabular类型 ,线可以自己画 ,线的颜色当然也是可以改变的 ,但是Tabular的缺点也是显而易见的:画线繁琐,画好线之后如果要修改其中的列,那么这个工作将是令人疯狂的, 另外的列的宽度在运行后不能手动的拉宽,拉窄。
入正题! 找到一个既有表头 ,又能改变线条颜色 ,又修改方便 ,又运行后能拉列宽。。。。 。 我的答案是: 建立Grid类型的数据窗口 ,程序运行后转换成Tabular类型, 程序自动划线 ,然后程序控制鼠标拖动事件来拉宽,拉窄列 ,这样并没有改变程序中Grid的源代码,这样对程序中的修改,修改的都是原来的Grid类型 ,比较快捷 。
1. 新建Nvo nvo_Grid_Report ,实例变量 Left_Add //左侧偏移量
2. 要对Grid进行列的拖动,必须要记录各列的位置,以及画出的线的位置 ,这样在拖动是才能正确的移动列和线条的位置 ,新建四个DS 分别:
ids_Header //记录Header的标题信息 ,主要: 对象名称 ,x ,width ,对应的列的 ID 号 ,线的名称
ids_Detail // 记录Detail中的信息,也就是列和计算列. 主要: 对象名称,x ,width ,ID ,线的名称
Ids_ForeGround // 这个主要记录多表头的 ,因为多表头的上表头要设置成ForeGround 。 对象名称 ,x ,对应列Id1 ,对应列ID2 (它是跨列),线名称
ids_Summary // 汇总区 ,同ids_Detail
3. 新增函数 Of_Get_Objects 来获取 dw中的信息,也就是填充上一步的4个ds 。 ids_Detail 中的id号其实就是明细中按照x排序后的一个顺序号,记录列的位置。 线的名称就是将要画的线的命名 。ids_Header的线就是标题(一个Text)右边的一个竖线, ids_Detail中线也是列的右边的竖线和列下方的横行
4. 开始画线
①. 首先获取数据窗口Syntax , 替换其中的processing=1为processing=0
②. For i = 循环ids_Detail , 生成2个变量 ls_Lines (这个是需要Create的line的语法) ,ls_Modify(这个是需要在最后修改的列的x)
例如: = 10
ls_Lines += Line(竖线 x1 = x2 = 第十列.x + 第十列.width + Left_Add )(y1 = -4 ,y2 = Detail.Heigth + 4)(名称,颜色)
ls_Lines += Line(横线 x1 = 第十列.x + Left_Add , x2 = 第十列.x + Left_Add + 第十列.width) (y1 = y2 = Detail.height - 4)(名称,颜色)
ls_Modify += 第十列列明 + “.x = ” + 第十列的x + Left+Add
然后去找第十列对应的标题 ,获取标题对应的Lines 表达式 ,Modify表达式
然后去找第十列对应的Summary汇总, 如果有汇总区的话,不管有没有找到第十列对应的汇总计算了, 那个线都是要画的
然后去着第十列对应的Foreground对象,这个对象特殊,跨多列处理起来要复杂些,他的位置,以及线的宽度,都要特殊处理
③. 通过第二步已经把对应点列和线的位置生成的语法 。 这里还需要补几个特殊的对象
1. Header 中标题上方的一条线 ,标题下方的一条线
2. 如果有Summary 那么这个里面也要画一条下方的横线
3. 对左侧的一个堵口线
4. 在最右侧列的右侧 20像素除画一个点 ,这个主要目的是能把最右侧的线显示出来,否则显示不出来的
④. 如果有表头 ,也要把语法创建进去,这里注意有表头那么表头区的线 和 标题的y都改变的,给表头流出位置
⑤. 把lines的语法补到原始的Syntax 中 ,执行 dw_1.Create() , 再执行 dw_1.Modify(ls_Modify) 这样已经把Grid数据窗口变成了一个Tabular风格
5. 处理列的移动
1. 在鼠标按下事件中判断点中的对象是否是标题右侧的线
2. 如果是标题右侧的线,处理鼠标移动(鼠标点下没弹起),基本原则是这样的
1. 这条线属于的标题 ,以及对应的列 ,汇总列的宽度都 改变 ,x不改变
2. 这条线后的所有对象 x + ,宽度宽度不变
3. 几条固定的线,标题上下线,Summary中的线 x2 是要变的
6. 完成 大致效果是这样的
原始Grid运行效果
变换后的效果
改变颜色后
- PB [Grid风格数据窗口改变线条颜色] 的变通实现方法(也可以成为 带表头的Grid数据窗口)
- PB [Grid风格数据窗口改变线条颜色] 的变通实现方法(也可以成为 带表头的Grid数据窗口)
- PB [Grid风格数据窗口改变线条颜色] 的变通实现方法(也可以成为 带表头的Grid数据窗口)
- Grid数据窗口加标题的方法
- 【PB】数据窗口Grid创建及使用
- 锁住Grid数据窗口的指定列
- PB中,在用grid形式的数据窗口中,跨列标题头的制作方法。
- PB中,在用grid形式的数据窗口中,跨列标题头的制作方法
- PB Grid风格的数据窗口怎么保存用户使用时设定的列的宽度、列的位置等信息
- PB的数据窗口
- Grid数据窗口的某个字段不能左右拉长
- ext 可编辑grid时间格式显示的改变方法,也可用作其他的类型数据的改变
- PB中如何判断数据窗口发生的改变
- PB 数据窗口datawindow选中行改变颜色
- PB 怎么动态(用代码)改变数据窗口的属性(例如窗体的字体大小,字体颜色,背景颜色)
- extjs grid数据改变后刷新的实现
- 也谈“PB中相关联下拉数据窗口的实现”(jqz1225原创)
- grid改变行的颜色
- Material DesignDrawerLayout的旋转箭头的实现方式。
- Https为什么比Http安全呢?
- 修改webbrowser的User-Agent
- pharmdock并行运算的java实现
- 对不懂技术人的忠告
- PB [Grid风格数据窗口改变线条颜色] 的变通实现方法(也可以成为 带表头的Grid数据窗口)
- Exchange Server 2010安装及测试(Part3)
- 开头决胜武器:软文开头的4种常用写法
- web用户体验相关
- spring+springMVC+Mybatis+dwz 开发
- scrapy爬虫起步(3)-- 利用规则实现多页面抓取
- Java上的try catch并不影响性能
- UVa 10551 - Basic Remains
- git