如何获取可视组件属性的原始文本?

时间:2014-08-26 09:56:31

标签: delphi delphi-7

我希望能够在(可能)更改后在运行时读取组件(已发布)属性的原始文本。

上下文是我正在编写我们在应用程序中使用的翻译库的扩展。该库已经陈旧,供应商不再支持,所以我靠自己来使它工作。

不幸的是,编码库的方式使得无法使用ISAPI Dll(例如,在Intraweb应用程序中)。字典部分可以工作,但自动翻译组件不起作用(主要是因为它试图覆盖内存中的某些代码部分)。因此,我试图挽救有效的部分(形成翻译工具和字典存储),同时重写那些没有的部分(嗯,只有我真正感兴趣的元素)。 / p> 但是,我已经停止了这样一个事实:一旦翻译了一个组件文本属性,它就不再与原始文本匹配,也不会在字典中找到。

该代码应该在Delphi 7中有效,尽管我有足够的时间计划将其迁移到XE5。

3 个答案:

答案 0 :(得分:1)

  

"翻译组件文本属性后,它将不匹配   原文更多,不会在字典中找到。"

您可以自己保留单独的查找地图,将翻译的内容翻译成原创内容吗?每当字符串被其翻译的内容替换时添加到此。这样你就可以在原文之间来回转换,也可以随意翻译。

在XE5中,最简单的方法是使用TDictionary。在D7中,您可能需要滚动自己的容器。

答案 1 :(得分:1)

您可以创建一个将原始值保存到List或某个数组的过程,然后在Form的已加载方法中调用该过程(您必须覆盖它,并且不要忘记调用inherited在它结束时。)然后搜索该列表中的目录条目。在从DFM加载所有组件之后但在FormCreate之前调用Form的已加载方法。所以在这里你可以找到所有的原始属性。

答案 2 :(得分:1)

根据我的理解,你想要的是获取字符串属性的值,因为它们在编译时存储在DFM中。

所以,我想最可行的方法是来自DFM本身。据我所知,DFM总是作为资源存储在二进制文件中(尽管可能有一些例外......)。我刚才考虑做类似的事情。由于R& D时间耗尽(我只有几个小时),我没有设法让它工作,但是如果你想调查一下,我就开始

TCustomForm.Create
  InitInheritedComponent
    InternalReadComponentRes
      TStream.ReadComponent
        TReader.ReadRootComponent

也许有人可以确认这种方法是否有效以及有什么警告,但在此之前,我认为这对您来说是一个有效的研究方向。