有人知道是否有 Memo/RichEdit 的类似物吗?需求:对行进行编号,从流中加载大文件(超过 5 MB)。
6 回答
Developer Express有大量的 VCL 组件,其中有一个备忘录替换 (TcxMemo) 和一个 RTF 编辑(不过我不知道功能集)。
TMS Software有一个非常好的 TAdvMemo 和很多语法高亮。并且还有一个 TRichEdit 的“替代品”。除了突出显示他们的备忘录的语法外,还支持行号。不知道大文件,但 5MB 听起来不像他们可能拥有的任何限制。
TRichView是另一个强烈推荐的 TRichEdit 替代品,具有大量功能集。
我们的SynMemoEx 组件设计为轻巧快速。它可以毫无问题地加载和处理 50 MB 的文本内容,包括自动换行。
但它只适用于 2007 年之前的 Delphi 6(还不是 unicode)。但它是免费和开源的。
我们在SynProject 工具中使用此组件,用于文件版本控制显示和文档编辑。而且您已经突出显示 .pas .c .cs .h .xml .html .dfm 文件(以及更多)。
它具有行号和其他不错的功能。从这里查看一些屏幕截图。
杀手级组件:Synedit - http://sourceforge.net/apps/mediawiki/synedit/index.php?title=SynEdit_Home_Page
一探究竟 :)
TRichView是一个流行的组件,专门设计用于显示、编辑和打印超文本文档。还有一个 TRichView 插件提供所见即所得编辑。它具有 Unicode、RTF 导入和导出、HTML 导出、数据感知版本等。
我在我的家谱程序中使用它作为主要组件,并用它来加载非常大的文件(例如 100 MB 或更多)。它可以直接读取或写入流。
是否存在任何可以链接内容的组件,看起来像 TMemo?
需要(将其视为必须能够做到的):
- 将其中两个放在它们之间,并在它们之间放置一个 TSplitter
- 只加载一次内容,但在两者上都显示(能够同时看到两个部分),不像 TMemo 那样您必须在 ram 上复制所有内容
- 在不到一秒的时间内加载 100MiB TXT 纯文本文件的时间(不包括来自读取媒体的 I/O 时间),换句话说,如果您在 RAM 上有数据并希望在不到一秒的时间内将其显示在两者上
- 应用程序必须是可运行的(因此没有组件需要单独的 dll,我知道如何将 dll 注入 exe 并在运行时提取它们)并且必须以取证方式从只读媒体运行(不能在任何地方写入)。
通缉:
- 不限于 32Bits 系统上的 3GiB(不是像丑陋的 ram 需求 TMemo 那样一次加载整个文件,仅显示部分)
- Unicode 和 UTF-8/UTF-16 带/不带 BOM 标头等
- 选择字体以显示文本,如果可以为所有字体选择单行距或正常的布尔值,则更好
- 行长没有限制(TMemo 限制为每行 4KiB-1),如果您有超过一百万个字符的行,请使用正确的滚动条滚动等在一行中查看。
没有必要:
- Sintax,颜色等......仅适用于纯文本
- WordWrap(每一行就是一行)
好吧,我在假装什么?简短回答:纯文本文件的同时链接视图。
再解释一下:
- 想象一下,您有一个 GUI,用户可以在其中添加“分隔符”
- 每个分隔符将视图(不是文件)分为两部分......所以如果你有 N 个分隔符,你可以同时看到文件的 N+1 个部分
- 每个视图都有自己的垂直滚动条,但所有视图只有一个水平滚动条(所有视图在滚动时水平同步)
- 因此用户可以在一个视图上看到第一行,而同时看到其他部分,而无需每次都上下滚动
为什么?简单的答案:假设该文件是一个日志并且有超过一百万行......再次想象它就像一个历史日志......并且用户想要查看第 X 天和第 Y 天和第 # 天的一些行......同时等(比较或任何原因)。
如果您使用 TMemo 执行此操作,则需要复制所有数据……而且 32 位应用程序在 32 位处理器上限制为 2GiB 内存,在 64 位处理器上限制为 3GiB 内存(f 用特殊的编译指示)。
请记住,应用程序必须在 32 位和 64 位处理器上运行,而无需编译不同的版本......并且必须是可运行的,并且在运行时(取证风格)根本不需要(任何地方)写入。
我想了一种可能的方法来创建它……基于 TStringList,但我又是如此有限……而且从头开始工作太多了。
也许那里有一个组件,因为我已经看到一些应用程序可以在不加载它的情况下向您显示一个大文件,它们都是从头开始有自己的实现吗?或者他们使用了一个我不知道的组件?,他们中的大多数是用于十六进制编辑一个大的二进制文件,有些可以编辑很多 GiB 的文件,其中只有少数可以非常快速地插入和删除,直到他们保存(在执行挂起的插入/删除操作时复制整个文件的 I/O 可能需要很长时间,超过一个小时,但在屏幕上执行插入/删除非常快,不到十分之一秒)。
如果我找到一个组件,我可以做我想做的所有事情:
- 看起来像 TMemo
- 通过代码可以模拟垂直和水平滚动而无需触摸选定的文本选择(我可以使用较小的 TPanel 容器隐藏滚动条,因此无需控件来隐藏滚动条)
- 非常重要:不要加载整个文件(只阅读显示的部分)
- 有 LoadFromFile (但不是真正加载整个文件,只是在内部存储文件引用)
- 不需要但需要:用户可以像在 TMemo 上一样进行编辑
- 不需要但需要:使用 SaveToFile 保存用户更改
外面有人吗?
补充:免费(任何用途)和开源是必须的。