如何编写表单编辑器?

时间:2008-11-26 15:27:24

标签: vb.net forms layout vb6 editor

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

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

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

我希望有人有一些指示。


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

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

2 个答案:

答案 0 :(得分:1)

首先,你应该对你正在使用的语言/ API有很好的了解,事实上你真的应该指定你是否使用Windows.Forms,WPF,GTK#,确保你非常良好。

然后,您应该考虑表单编辑器的格式来存储表单。通常,表单编辑器使用XML。如果您还想遵循这一趋势,那么真的应该为VB学习一个优秀的XML API。

最后,请仔细规划您的步骤:

  1. 您想使用API​​提供的自定义文本字段控件,还是想手动绘制它们(如果是,那么您需要学习绘图API)?
  2. 确保您非常了解布局定义文件格式。
  3. 现在,是开始概念验证的时候了:创建一个简单的编辑器,可以加载/保存表单并为它们添加按钮。这可能是最难弄清楚的一步。您可能需要处理事件和其他一些事情,但最终它会起作用(如果没有,那么您可能会再次询问)。 最后,只需添加所需的功能,例如布局定义文件输出,新控件,控制移动/调整大小等。

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

答案 1 :(得分:0)

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

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

总而言之,它并不难做到而且非常好,它有点像“水晶报告”的形式编辑。
我记得花一些时间来弄清楚细节,例如网格捕捉不同的字符宽度,在更改文本样式(如浓缩或扩展)时调整字段大小,而不会因为舍入错误而跳转,这样的事情。不要让这吓到你,记住你不必从一开始就照顾好一切,只要小心一点,不要阻止以后做这件事的可能性。

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