德尔福.Memo/RichEdit的模拟



有人知道是否有Memo/RichEdit的类似程序吗?需求:对行进行编号,从流中加载大文件(超过5MB)。

Developer Express有一套广泛的VCL组件,其中包括Memo替换(TcxMemo)和RTF编辑(不过我不知道该功能集)。

TMS软件有一个非常好的TAdvMemo,它有很多语法高亮。还有一个TRichEdit"替代品"。除了语法突出显示他们的备忘录支持行号。不知道大文件,但5MB听起来并没有达到任何限制。

TRichView是另一个强烈建议使用大型功能集的TRichEdit替代品。

我们的SynMemoEx组件设计为轻便快速。它加载和处理50 MB的文本内容没有问题,包括换行。

但它只适用于Delphi6直到2007年(还不是unicode)。但它是免费的、开源的。

我们在SynProject工具中使用该组件,用于文件版本控制显示和文档编辑。您已经为.pas.cs.h.xml.html.dfm文件(以及更多)高亮显示了内容。

它有行号和其他不错的功能。请参阅此处的一些屏幕截图。

TRichView是一个流行的组件,专门用于显示、编辑和打印超文本文档。还有一个TRichView插件提供所见即所得的编辑。它有Unicode、RTF导入和导出、HTML导出、数据感知版本等等。

我在家谱程序中使用它作为主要组件,并使用它加载非常大的文件(例如100MB或更大)。它可以直接读/写流。

Killer组件:Synedit-http://sourceforge.net/apps/mediawiki/synedit/index.php?title=SynEdit_Home_Page

查看:)

是否存在任何可以链接看起来像TMemo的内容的组件?

需要(将其作为必须能够做的事情):

  • 放两个,中间放一个T分裂器
  • 只加载一次内容,但在两者上都显示(以便能够同时看到两个部分),而不是像TMemo那样必须在ram上复制所有内容
  • 在不到一秒钟的时间内加载100MiB TXT纯文本文件的时间(读取介质的I/O时间除外),换句话说,如果您在RAM上有数据,并希望在不到1秒的时间内在两者上显示
  • 应用程序必须是可运行的(所以没有需要单独dll的组件,我知道如何将dll插入exe并在运行时提取它们),并且必须以取证的方式从只读介质中运行(任何地方都不能写入)

通缉:

  • 不限于32Bits系统上的3GiB(不是像丑陋的ram需求TMemo那样一次加载整个文件,只显示了部分)
  • Unicode和UTF-8/UTF-16,带/不带BOM头等
  • 选择字体来显示文本,如果可以为所有字体选择单间距或普通的布尔值,效果会更好
  • 行长度没有限制(TMemo每行限制为4KiB-1),如果你有一行字符超过一百万个,请在一行中使用正确的滚动条滚动查看,等等

不需要:

  • Sintax、color等…仅用于纯文本
  • 换行符(每一行都是一行)

好吧,我在假装什么?简短回答:一个纯文本文件的同时链接视图。

再解释一下:

  • 假设您有一个GUI,用户可以在其中添加"分隔符"
  • 每个分隔符将视图(而不是文件)分为两部分。。。因此,如果你有N个分隔符,你可以同时看到文件的N+1个部分
  • 每个视图都有自己的垂直滚动条,但所有视图只有一个水平滚动条(滚动时所有视图都是水平同步的)
  • 因此,用户可以在一个视图中看到第一行,而无需每次上下滚动即可同时看到其他部分

为什么?简单的答案:假设这个文件是一个日志,有超过一百万行。。。再次想象它就像一个历史日志。。。并且用户希望看到第X天、第Y天和第#天的一些行。。。等等(为了比较或任何原因)。

如果你使用TMemo,你需要复制所有数据。。。以及32位应用程序在32位处理器上的ram限制为2GiB,在64位处理器上限制为3GiB(f用特殊指令编译)。

请记住,该应用程序必须在32Bits和64Bits处理器上运行,而无需编译不同的版本。。。并且必须是可运行的,并且在运行时(任何地方)都不需要写(取证风格)。

我想了一种可能的方法来创建它…基于TStringList,但我再次受到限制。。。而且这是很多从头开始的工作。

也许有一个组件,因为我看到一些应用程序可以在不加载的情况下向你显示一个大文件,所有这些应用程序都有自己的实现吗?或者他们使用了一个我不知道的组件?,其中大多数用于十六进制编辑一个大的二进制文件,有些可以编辑大量GiB的文件,只有少数可以快速插入和删除,直到保存为止(在执行挂起的插入/删除操作时复制整个文件的I/O可能需要很长时间,超过一个小时,但在屏幕上执行插入/删除非常快,不到十分之一秒)。

如果我找到一个组件,我可以做我想做的一切:

  • 看起来像TMemo
  • 通过代码可以模拟垂直&水平滚动而不触摸所选文本(我可以用较小的TPanel容器隐藏滚动条,所以控件不需要隐藏滚动条)
  • 非常重要:不要加载整个文件(只读取显示的部分)
  • 拥有LoadFromFile(但不是真正加载整个文件,只是在内部存储文件引用)
  • 不需要但需要:用户可以像在TMemo上一样进行编辑
  • 不需要但需要:使用SaveToFile保存用户更改

外面有人吗?

添加:免费(任何用途)和开放源码是必须的。

最新更新