0

我正在尝试在 VB6 或 VB.Net 中编写打印布局编辑器,并且正在寻找一些参考文章来帮助我入门。

这个想法是,编辑器将用于定义发票或报表布局的打印“区域”,允许用户绘制客户地址、发票编号、行、总计等的框。然后程序将弄清楚如何翻译各种盒子的尺寸和位置到打印位置以存储在布局定义文件中,稍后由帐户系统用于打印各种报告。请注意,由于各种原因(主要是帐户系统不是 Windows),将文本放入 Word 或类似产品并让它们打印文档不是一种选择。我当然可以手动编辑文档布局文件,但它不是很人性化。

正如您可能想象的那样,搜索“表单编辑器”、“布局编辑器”等会带来数百个不相关的结果。令人沮丧的是,我看过一篇非常相关的文章,却丢失了书签。

我希望有人有一些指示。


谢谢,这听起来比我想象的要复杂。我真的希望我能找到我丢失的原始文章,因为它很清楚如何在 vb.net 中进行此操作。

因为它是打印表单的布局,我认为这大大降低了复杂性 - 我只需要存储每个打印区域的大小和位置,以及字体、对齐和颜色信息,可能还有图形的文件名如果需要徽标。布局定义文件格式完全在我的控制之下。

4

2 回答 2

1

首先,您应该非常了解您正在使用的语言/API,事实上,您确实应该指定您是否正在使用 Windows.Forms、WPF、GTK# 等。确保您非常擅长那。

然后,您应该为表单编辑器考虑一种存储表单的格式。通常,表单编辑器使用 XML。如果您也想追随这种趋势,那么您真的应该学习一个好的 VB 的 XML API。

最后,仔细计划您的步骤:

  1. 您想使用 API 提供的自定义文本字段控件,还是想手动绘制它们(如果是,那么您需要学习绘图 API)?
  2. 确保您非常了解布局定义文件格式。

现在,是时候开始概念验证了:创建一个简单的编辑器,可以加载/保存表单并向它们添加按钮。这可能是最难弄清楚的一步。您可能需要处理事件和其他一些事情,但最终它会起作用(如果没有,那么您可能会再次询问)。最后,只需添加您需要的功能,例如布局定义文件输出、新控件、控件移动/调整大小等。

如果您需要其他任何东西(包括更具体的说明),请询问。

于 2008-11-26T17:47:56.870 回答
0

我记得大约 10 年前 iirc 在 vb6 中开发了这种打印输出表单编辑器。不确定我是否仍然可以找到来源:确实我发现了这个问题,因为我需要编写另一个并且希望找到一些代码来开始,而不是再次从头开始。无论如何,我实现它的方式或多或少是这样的:

  • 一个用于页面背景的自定义控件,显示一个光栅,并对鼠标事件做出反应(例如,在右键单击时显示一个菜单);
  • 每个字段都是一个无窗口的自定义控件,也显示一个光栅,每个(固定宽度)字符一个单元格。它还对鼠标事件做出反应,以便可以移动和调整大小;当我说无窗口时,我的意思是“没有 hwnd”,这是一种允许放置大量控制实例而不用担心对资源的影响的优化;如果您要使用 .net,您可以不在乎,但如果您使用 vb6,它确实会有所作为;
  • 一个属性网格,如 vb6 中的一个,显示所选字段的属性。就我而言,我可以设置文本的样式(压缩、扩展、粗体)和运行时使用的表达式来检索要打印的值;
  • 加载布局文件将调整页面大小并为文件中的每个字段实例化一个字段控件;
  • 保存写出页面属性(大小,名称等)然后枚举字段集合并写出它们的属性;
  • 我没有使用 xml,因为文件格式已经固定,因为它是由执行实际打印的引擎使用的;xml 只会让我的生活更轻松,无需为数据文件格式编写自定义解析器。
  • 要求仅处理点阵打印机,但幸运的是我没有偷工减料,我可以轻松地对其进行调整,以处理更精确的区域放置和尺寸。我的意思很简单,我抵制了使用行和列坐标的诱惑,而是使用了缇;数学需要更多的思考,但绝对不是火箭科学。

总而言之,做起来并不难,而且效果很好,有点像“水晶报表”的表单编辑器。
我记得花了一些时间来获得正确的细节,例如网格捕捉不同的字符宽度,在更改文本样式(如压缩或扩展)时调整字段大小,而不会因为舍入错误而跳来跳去,诸如此类。不要让这吓到你,记住你不必从一开始就照顾好一切,只是要小心一点,不要阻止以后做的可能性。

现在我不会对 vb6 提供太多建议,除非这是你最了解的并且需要生成一个 .exe 而不依赖于目标机器上安装的 .net 框架。
相反,如果您选择使用 .net,我认为如果您还不了解 wpf,这将是一个学习 wpf 的好机会,它可以制作一些令人印象深刻的图形,甚至比 windows.forms 还要多。

于 2011-07-11T15:39:26.353 回答