【问题标题】:Structuring an editor for HTML image maps为 HTML 图像映射构建一个编辑器
【发布时间】:2011-12-09 01:20:03
【问题描述】:

总结:

我开始使用 Delphi 7 构建一个用于创建/编辑 HTML 图像映射或图片中的“热点”的工具。应用程序的概念很清楚,如下所述。我以前做过类似的项目,我相信我可以用我自己采取的任何方法来做到这一点。我需要帮助的是找出如何将图像映射存储在内存中的最佳方法。

图像映射可能如下所示:

<MAP NAME="someImageMap">
  <AREA SHAPE="RECT" COORDS="10,28,54,51" HREF="some_page.htm">
  <AREA SHAPE="RECT" COORDS="54,28,111,50" HREF="some_other_page.htm">
  <AREA SHAPE="RECT" COORDS="111,28,199,49" HREF="another_example.htm">
</MAP>
<IMG border=0 src="../images/SomeImage.png" width=571 height =451 
  isMap useMap=#someImageMap />

AREA 是图像中的一个区域,给定形状和坐标,用于放置不可见的超链接。他们也被称为Hotspots

背景

我有一个 HTML 格式的巨大帮助文件,以前在 HelpScribble 软件中,但现在我们使用的是 WinCHM。 HelpScribble 有一个名为 SHGEditor 的工具,它为我完成了所有这些映射。但是 WinCHM 没有图像映射的概念,它们到处都是代码。因此,与其试图为此寻找工具(这当然是解决此问题的简单方法),不如自己制作一个。

图片:

问题:

混乱始于决定将Hotspot 区域的主要数据临时存储在内存中的何处...

  • 直接在 HTML 代码中?
  • 在 TList 中?
  • 在 TStringList 中?
  • 在数组中?
  • 在我显示热点列表的 TListView 中?

这是我要问的主要问题。

我猜每一个都有它的起起落落。但是当我想到 HTML 编辑器时,整个事情就被抛弃了。当在 3 个编辑选项卡(图像、HTML 或热点列表)中的任何一个中完成修改时,它必须以某种方式将这些更改同步到其他两个编辑器。所以如果在图像上绘制了一个新的热点,我当然可以把它转成 HTML 没有问题。但是使用纯 HTML 代码作为主要来源呢?无论如何我都会构建/解析它,但我担心它的性能。但话又说回来,我可以建立一个很好的后端类来保留一切。主要考虑哪个?

结论:

所以这一切都归结为我应该将主要数据保留在 HTML 源、列表视图项、自定义列表类 (THotspots) 中还是在哪里?

非常感谢任何提示、技巧或建议。

PS:

事实上,我确实经常问很长的问题,抱歉!

【问题讨论】:

  • 我想问一下,您打算如何存储热点数据?我的意思是永久-在数据库中,在某些结构化文件中?我个人更喜欢将它们存储到数据库中(有轻量级解决方案,例如SQLite),将它们加载到记录数组中(您将在某些列表组件中显示)并通过构建 HTML 代码动态呈现它们(如果您打算拖动地图,您可以随时准备边界后面的框架)。附言- 抱歉我的编辑,它被接受得太晚了,我没有足够的声誉:)
  • 不,没有数据库或文件(虽然我正在考虑为此制作自己的文件格式 :D) 我的初衷是从设置中获取 HTML。但我正在将编辑器作为一个更大的项目。
  • 从设置中构建 HTML 是很容易的部分,阅读它很棘手但仍然很有可能,但是构建一个完整的编辑器......每个选项卡之间的同步将是巨大的。
  • 现在我明白了,你的意思。您想选择一种数据类型来存储最适合在Map Image ViewMap Design ViewMap HTML EditorHotspot List 之间进行同步的数据类型
  • 我倾向于保留原始 HTML 源作为主要位置,但我担心性能...

标签: html delphi data-structures delphi-7 imaging


【解决方案1】:

出于多种原因,我决定使用原始 HTML 作为数据的基础。我最初担心使用这种方法的性能,但由于我为 Delphi 找到了this HTML parser component,所以性能不是问题。这个解析器可以在 1 秒内遍历 50,000 个标签。

使用核心 HTML 的核心优势在于我可以将 HTML 数据保持为其原始格式。任何其他方法很可能导致每次我需要它时都必须重新生成 HTML,这将以我的应用程序放入的任何格式出现。但是由于我现在有了这个解析器,很容易只需眨眼就可以更改标签属性一只眼睛。

【讨论】:

  • 虽然我将原始 HTML 视为主要数据,但我仍然必须实现跨编辑器翻译。换句话说,每当在一个编辑器中进行更改时,这些更改也必须分发给所有其他编辑器。所以我对每个编辑器都有一个功能。当 HTML 源代码发生更改时,Synchronize 按钮将变为启用状态,并在单击时解析代码并更新图像、记录数组、列表视图等。
  • 更新:我的编辑器很棒!我不得不为这个项目拍拍自己的背,我很惊讶我已经做到了。性能流畅,用户友好,保存/加载我自己的图像映射 INI 文件格式也可以工作。接下来的步骤是添加 PNG 支持、通过菜单和键盘快捷键复制/粘贴、椭圆热点和侧面板来浏览 HTML 文件的文件夹以搜索 &lt;map&gt; 标签,因为毕竟,整个目的是因为我已经有了500 多个页面和 100 多个图像地图...
猜你喜欢
  • 2011-11-21
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多