Delphi. Аналог Memo/RichEdit
Кто-нибудь знает, есть ли аналог Memo/RichEdit? Требование: нумеровать строки, загружать большие файлы (более 5 МБ) из потока.
6 ответов
Developer Express имеет обширный набор компонентов VCL, среди которых замена Memo (TcxMemo) и редактирование RTF (хотя я не знаю о наборе функций).
TMS Software имеет очень хороший TAdvMemo с множеством подсветок синтаксиса. А также есть TRichEdit "замена". Помимо подсветки синтаксиса их памятка поддерживает номера строк. Не знаю о больших файлах, но 5 МБ не звучат так, как если бы они находились рядом с любыми ограничениями, которые они имели бы с / с.
TRichView - еще одна настоятельно рекомендуемая замена TRichEdit с большим набором функций.
Наш компонент SynMemoEx был разработан, чтобы быть легким и быстрым. Он загружает и обрабатывает 50 МБ текстового контента без проблем, включая перенос слов.
Но это только для Delphi 6 до 2007 года (пока не unicode). Но это бесплатно и с открытым исходным кодом.
Мы используем этот компонент в нашем инструменте SynProject, как для отображения версий файлов, так и для редактирования документации. И вы выделите для.pas.c.cs.h.xml.html.dfm файлов (и больше).
Он имеет нумерацию строк и другие приятные функции. Смотрите некоторые скриншоты здесь.
Компонент убийцы: Synedit - http://sourceforge.net/apps/mediawiki/synedit/index.php?title=SynEdit_Home_Page
проверить это:)
Существует ли какой-либо компонент, который может иметь связанный контент, похожий на TMemo?
Нужно (потому что это должно быть в состоянии сделать):
- Поместите два из них с TSplitter между ними
- Загружать контент только один раз, но показывать его на обеих (чтобы можно было видеть две части одновременно), не так, как TMemo, который вы должны скопировать на оперативную память всего контента
- Время загрузки обычного текстового файла TXT 100 МБ менее чем за секунду (время ввода-вывода с носителя считывания исключено), другими словами, например, если у вас есть данные в ОЗУ и вы хотите отобразить их на обоих менее чем за одну секунду
- Приложение должно быть RunAble (поэтому нет компонента, который требует отдельную dll, я знаю, как inyect dll в exe и извлекать их при запуске) и должен работать с носителя только для чтения криминалистическим способом (нигде не записывать).
В розыске:
- Не ограничивается 3GiB в 32-битной системе (не весь загруженный файл сразу, как на уродливой оперативной памяти, требует TMemo, только показанные части)
- Unicode и UTF-8/UTF-16 с / без заголовка спецификации и т. Д.
- Выберите шрифт, чтобы показать текст, лучше, если бы можно было выбрать для всех шрифтов логический моно с интервалом или обычный
- Нет ограничений на длину строки (TMemo ограничен 4KiB-1 на строку), если у вас есть строка с более чем одним миллионом символов, посмотрите ее в одной строке с правильной прокруткой полосы прокрутки и т. Д.
Не нужно:
- Синтаксис, цвет и т.д... только для простого текста
- WordWrap (каждая строка является строкой)
Хорошо, что я притворяюсь? краткий ответ: одновременные связанные представления простого текстового файла.
Объяснил это еще немного:
- Представьте, что у вас есть графический интерфейс, где пользователь может добавлять "разделители"
- Каждый разделитель делит представление (не файл) на две части... поэтому, если у вас есть N разделителей, вы можете видеть N+1 части файла одновременно
- Каждый вид имеет собственную вертикальную полосу прокрутки, но для всех есть только одна горизонтальная полоса прокрутки (при прокрутке все виды синхронизируются по горизонтали)
- Таким образом, пользователь может видеть первые строки в одном представлении, в то время как другие части в то же время без необходимости прокручивать вверх и вниз каждый раз
Зачем? Простой ответ: представьте, что файл представляет собой журнал и содержит более миллиона строк... снова представьте, что он похож на исторический журнал... и пользователь хочет увидеть некоторые строки дня X и дня Y и дня # ... и т. д. одновременно (для сравнения или по любой другой причине).
Если вы делаете это с TMemo, вам нужно скопировать все данные на все из них... а также 32-битное приложение ограничено 2 ГБ ОЗУ на 32-битном процессоре и 3 ГБ ОЗУ на 64-битном процессоре (f скомпилировано с помощью специального директива).
Помните, что приложение должно работать как на 32-битных, так и на 64-битных процессорах без необходимости компиляции разных версий... и должно быть RunAble и вообще не требовать записи (в любом месте) при запуске (стиль судебной экспертизы).
Я думал о возможном способе его создания... на основе TStringList, но опять же я настолько ограничен... и это так много работы с нуля.
Может быть, есть компонент, так как я видел некоторые приложения, которые могут показать вам большой файл, не загружая его, все они с собственной реализацией с нуля? или они используют компонент, о котором я не знаю?, большинство из них предназначены для шестнадцатеричного редактирования большого двоичного файла, некоторые могут редактировать файлы с большим количеством GiB, и только некоторые из них могут очень быстро вставлять и удалять, пока не сохранят (Ввод / вывод для копирования всего файла во время выполнения операций вставки / удаления может занять очень много времени, более одного часа, но вставка / удаление на экране выполняется довольно быстро (менее одной десятой секунды).
Я могу делать все, что захочу, если найду компонент, который:
- Выглядит как TMemo
- По коду можно смоделировать вертикальную и горизонтальную прокрутку, не касаясь выделенного выделения текста (я могу скрыть полосу прокрутки с меньшим контейнером TPanel, поэтому нет необходимости в элементе управления, чтобы скрыть полосы прокрутки)
- Действительно очень важно: не загружать весь файл (читайте только показанную часть)
- Иметь LoadFromFile (но на самом деле не загружать весь файл, просто внутренне хранить ссылку на файл)
- Не нужно, но желательно: пользователь сможет редактировать как на TMemo
- Не нужно, но желательно: есть SaveToFile для сохранения пользовательских изменений
Есть кто-нибудь?
Добавлено: бесплатно (для любого использования) и OpenSource является обязательным.
TRichView - это популярный компонент, специально разработанный для отображения, редактирования и печати гипертекстовых документов. Существует также дополнение TRichView, обеспечивающее редактирование WYSIWYG. Он имеет Unicode, импорт и экспорт RTF, экспорт HTML, версии с поддержкой данных и многое другое.
Я использую его в качестве основного компонента в моей генеалогической программе и использовал его для загрузки очень больших файлов (например, 100 МБ или более). Он может читать или писать прямо в / из потоков.