GDI+绘制的一个Report Designer原型

2023-11-04

    早上看到Pvistely同学在说设计器编程的一些问题,想起来我也曾使用GDI+做过一个报表设计器的原型。刚才翻到了代码,居然已经是整整一年前的东西了,时间过的可真是快啊。当时产品里计划要提供可视化报表设计功能,于是part-time了两个周,做了这么一个原型给Team做方案评估。

    从Demo的效果来看,大家觉得使用GDI+做一个预想的报表的设计器应该没有什么太大问题,只是后来这个功能整个没有通过feature design而作罢了。程序运行效果如图:

    ReportDesigner.png
    本demo实现features如下:
    1、完全的自定义控件支持;
    2、Drag&Drop方式添加控件到容器中;
    3、多控件选取支持;
    4、多控件移动支持;
    5、Z-Order支持;
    6、标签控件编辑(double click);
    7、Image控件图片载入;
    8、8方向resize控件;
    9、无限级zoom设计器和控件。

    当然问题也很多,毕竟这只是一个demo。其中主要的问题有:
    1、没有作绘图优化,OnPaint里直接绘制所有的对象;
    2、Zoom后resize功能有bug,比例计算有问题;
    3、Redo & Undo,Copy & Paste未实现;
    4、没有实现容器的无限区域滚动支持。

    虽然公开源码,但不得不说这是一个没有经过太多推敲的设计,它只是给出了一种设计的思路和实现。如果您能在以后设计中避免其中的问题和不足,我的希望就达到了。如果这个demo能对你有任何一小点的帮助,那将是我所乐见的。欢迎对设计器编程感兴趣的博友不吝赐教emsmile.gif

    源代码下载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GDI+绘制的一个Report Designer原型 的相关文章

  • Logstash安装logstash-integration-jdbc

    Logstash安装logstash integration jdbc 1 版本说明 logstash7 10 1 2 前置条件 logstash integration jdbc是使用ruby语言开发的 因此需安装gem gem是Ruby
  • 【Linux】用户组与文件目录权限

    Linux用户与组 Linux本身是个多用户多任务的操作系统 用户账户分类 root用户 UID 0 超级用户 能跨越一切用户和组群对所有文件或目录进行读取 修改 删除 系统用户 UID 1 999 虚拟用户 不具有登入Linux的能力 是
  • java中Graphics类的使用

    绘图 很多程序如各种小游戏都需要在窗口中绘制各种图形 除此之外 即使在开发JavaEE项目时 有 时候也必须 动态 地向客户 端生成各种图形 图表 比如 图形验证码 统计图等 这都需要利用AWT的绘图功能 组件绘图原理 之前我们已经学习过很
  • xtu oj 1328 数码和

    题目描述 一个10进制数n在2 16进制下可以得到的不同的数码和 求在这些数码和中出现次数最多的数码和 比如20 其中数码和2和4分别出现了3次 为最多出现次数 输入 第一行是一个整数T 1 T 1000 表示样例的个数 以后每行一个整数n
  • 企业研发提效抓手,揭秘云原生的效能“奇点”

    导语 在云原生时代 研发效能治理面临新的挑战 同时也获得了新的视角 如何更好地利用云原生技术的优势 从而在根本上提升研发效能 已成为许多企业数字化转型过程中的 必答题 今天 我们特别邀请了 Thoughtworks 创新技术总经理 腾讯云
  • linux kernel文件系统数据结构file_system_type

    linux kernel文件系统数据结构file system type 文件系统类型用于表示各种不同的文件系统 如fat sysfs proc等等 对于每个不同的文件系统 都以struct file system type进行描述 内核将
  • 202310读书笔记|《大白鲸原创图画书优秀作品:虾一跳》——蝴蝶效应之最,你值得一读

    202310读书笔记 大白鲸原创图画书优秀作品 虾一跳 蝴蝶效应之最 你值得一读 大白鲸原创图画书优秀作品 虾一跳 作者 耿彦红 文 齐海潮 图 由虾一跳的连锁反应构成了整本书的故事脉络 很生动 故事及叙述的重复都不冗杂 反而很朗朗上口 并
  • 密码学--CTF Crypto 总结

    密码学简介 密码学 Cryptography 一般可分为古典密码学和现代密码学 其中 古典密码学 作为一种实用性艺术存在 其编码和破译通常依赖于设计者和敌手的创造力与技巧 并没有对密码学原件进行清晰的定义 其主要包含以下几个方面 单表替换加
  • TCP与UDP

    前言 TCP和UDP是两个传输层最有代表性的传输层协议 TCP一般提供可靠的信息传输 而UDP常被用于广播和细节控制交给应用的通信传输 传输层的定义 在传输层 IP首部有一个协议字段 用来区分使用的是什么协议 用端口号进行处理的具体程序 在
  • 在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件

    目的和思路 一个Vitis IDE 裸机项目 需要将视频帧无损地保存下来 由于每帧的像素数据是 16bit 1通道的 bayer 格式 满足这一需求的图像格式似乎只有 tiff 格式 开源的tiff 库是 libtiff 而在 Vitis
  • nginx安装及部署

    下载 官方网站 https nginx org en download html Windows下安装 安装 下载后解压 切记不能含有中文路径 文件结构如图 我解压的路径就有中文 记得拷贝放置于英文目录下即可 启动 两种方法 1 直接双击该
  • C语言(函数与预处理、指针)

    一 函数与预处理 一 一维数组 1 一维数组的定义格式为 类型说明符 数组名 常量表达式 例如 int a 10 它表示定义了一个整形数组 数组名为a 有10个元素 2 在定义数组时 需要指定数组中元素的个数 方括弧中的常量表达式用来表示元
  • 基于 FFmpeg 的跨平台视频播放器简明教程(七):使用多线程解码视频和音频

    系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程 一 FFMPEG Conan 环境集成 基于 FFmpeg 的跨平台视频播放器简明教程 二 基础知识和解封装 demux 基于 FFmpeg 的跨平台视频播放器简明教程 三 视频
  • 69. Sqrt(x)

    Implement int sqrt int x Compute and return the square root of x where x is guaranteed to be a non negative integer Sinc
  • 新闻分析:解密代号A1S

    本周二SAP董事长特拉普纳 Hasso Plattner 在Software 2007会议上发言时阐述了SAP新的软件设计方法 SAP表示在过去的三年中有3000多名工程师都在运用这种新的软件设计方法在开发代号为A1S的新产品 虽然这一代号
  • HTML的input类型为hidden导致无法reset改字段的value问题

    问题关键 根据HTML规范 hidden是非ui类元素 不接受用户处理 所以form的 reset并不影响它 http stackoverflow com questions 6367793 why does the reset butto
  • 一种通用的业务监控触发方案设计

    一 背景 业务监控是指通过技术手段监控业务代码执行的最终结果或者状态是否符合预期 实现业务监控主要分成两步 一 在业务系统中选择节点发送消息触发业务监控 二 系统在接收到mq消息或者定时任务调度时 根据消息中或者任务中的业务数据查询业务执行
  • go-micro 在linux下安装出现service auth not found

    1 安装micro linux下执行该命令 wget q https raw githubusercontent com micro micro master scripts install sh O bin bash 2 micro se
  • vue 实现md5、base64加密

    背景 前端使用密码登录的时候 一般都会使用密文传输 否则控制台就能看到密码 具体实现如下 使用 md5 进行加密 1 安装 cnpm install save js md5 2 在 main js 全局引用 import md5 from
  • pycharm console 报错

    描述 pycharm的console本来用的好好地 但是我也不知道自己改了啥 结果报错了 报错 Error Console process terminated with error Traceback most recent call l

随机推荐

  • Inheritance___CH_17

    17 1 Introduction to inheritance A hierarchy is a diagram that shows how various objects are related Most hierarchies ei
  • 华为交换机配置链路聚合

    文章目录 1 拓扑图 2 任务描述 3 Sw1配置 4 Sw2配置 5 Lacp模式链路聚合演示 https blog csdn net qq 45042462 article details 120938052 1 拓扑图 2 任务描述
  • 正则表达式校验版本号

    需求 校验版本号 规则 X Y Z 1 99 0 99 0 99 要求 1 必须是三位 例如 x x x的形式 2 每位x的范围分别为1 99 0 99 0 99 3 不允许的情况 0 x x 01 x x x 0x x x 00 x x
  • Python根据Excel名单实现文件夹下文件批量改名

    班级收集截图 通过缓存快速获取图片 可是文件夹内的文件是乱码 所以采用Python进行批量改名操作 import os import xlrd count 1 path C Users White Desktop 18 文件所在文件夹 ex
  • 排查Linux服务器是否被入侵步骤

    作为一个Linux运维工程师 能够清晰地鉴别异常机器是否已经被入侵了显得至关重要 以下是结合centos7 9操作系统进行排查Linux操作系统是否被入侵 其他Linux发行版的操作类似 1 入侵者可能会删除机器的日志信息 可以查看日志信息
  • No projects are found to import 问题如何解决

    在myeclipse中导入项目遇到 No projects are found to import 导致原因 项目目录中没有 project或者 classpath 解决方案 1 project classpath直接拷贝到相应位置即可 2
  • 大数据——Java 知识点整理

    1 JDK 和 JRE 有什么区别 JDK Java Development Kit 的简称 java开发工具包 提供了java的开发环境和运行环境 JRE Java Runtime Environment 的简称 java运行环境 为ja
  • FSDataInputStream中的seek()方法

    FSDataInputStream实现了Seekable接口 实现方法 其中的seek long pos 方法可以 对任意位置进行重新定位 与java io inputstream中的skip 不同 举个例子对 hdfs中的一个文件进行两次
  • JavaScript 使用 canvas arcTo() 在画布上画一条弧线

    arcTo 在画布上创建介于两个切线之间的弧 曲线 arcTo 使用 stroke 方法在画布上绘制确切的弧
  • 汇编与接口课程实验3——利用8255A实现LED的流水点亮实验

    一 实验目的 该实验的目的在于让学生掌握8255A和微机接口的连接方法 了解8255A的基本的工作原理和编程方法 二 实验内容 PA口接8个拨动开关K1 K8 PB口接8个LED 初始由开关K1 K8设定8位不同的值 当执行程序后LED按K
  • 进程,线程,协程(用户级线程)相关知识

    一 进程 线程 协程 用户级线程 1 进程 为了方便管理计算机的多道程序 计算机操作系统引入进程概念 进程是系统进行资源分配和调度的基本单位 进程作为程序独立运行的载体保障程序的独立运行 进程的存在使操作系统的资源利用率大幅度提升 进程的控
  • pfsense配置网络

    文章目录 1 配置lan口 2 配置wan口 2 1 pfsense联网 2 2 局域网内部虚拟机联网 1 配置lan口 默认lan口ip是192 168 1 1也可以自己配置 输入2开始配置ip 输入2选择lan口 输入ip地址 不能和已
  • MATLAB读取指定文件夹下的所有文件

    1 指定路径下 单个文件夹data中所有图像 file path data 图像文件夹路径 img path list dir strcat file path jpg 获取该文件夹中所有 jpg格式的图像 img num length i
  • 华为机试牛客网,C语言实现

    HJ1 字符串最后一个单词的长度 int main char a 5000 int n 0 t 0 p gets a for int i 0 a i 0 i n n 1 for int i n 1 a i i gt 0 i t t 1 pr
  • JSON.parse()和JSON.stringify()用法

    JSON parse 方法用于将 JSON 格式的字符串转换为 JavaScript 对象 而 JSON stringify 方法用于将 JavaScript 对象转换为 JSON 字符串 这两个方法可以组合使用来实现将数据从对象到字符串再
  • Bankless:2022年Q3以太坊生态报告

    撰文 Ben Giove Bankless 分析师 编译 Cointelegraph 在过去的 3 个月里 以太坊网络的使用情况如何 有多少人还在购买 NFT 非同质化代币 Layer 2 第二层网络 是否在成功扩展以太坊 本文最初受 Ja
  • 发现一个 Mac 神仙截图工具(截长图、带阴影、贴图等)

    1 前言 在发现 Xnip 之前 我用的都是微信自带截图工具 一用就是好几年 每次从工作电脑切换到个人电脑 创作的时候 截图比较常用 每次都需要为了截图而登录微信 而且不支持截长图 不支持多窗口截图等比较常用的功能 很是失望 总想找一款替代
  • web请求过程剖析

    服务器渲染 在服务器那边直接把数据和html整合在一起 统一返回给浏览器 在页面源代码中能看到数据 客户端渲染 第一次请求只要一个html骨架 第二次请求拿到数据进行数据展示 在页面源代码中看不到数据 在打开额网页右键点检查 gt Netw
  • Vijava 学习笔记之(VirtualMachineRelocateSpec类)

    VirtualMachineRelocateSpec 移动或复制指定虚拟机 使用不同的DataStore或HostSystem Properties NAME TYPE DESCRIPTION datastore ManagedObject
  • GDI+绘制的一个Report Designer原型

    早上看到Pvistely同学在说设计器编程的一些问题 想起来我也曾使用GDI 做过一个报表设计器的原型 刚才翻到了代码 居然已经是整整一年前的东西了 时间过的可真是快啊 当时产品里计划要提供可视化报表设计功能 于是part time了两个周