Delphi. Аналог Memo / RichEdit - PullRequest
       41

Delphi. Аналог Memo / RichEdit

2 голосов
/ 09 июня 2011

Кто-нибудь знает, есть ли аналог Memo / RichEdit? Требование: нумеровать строки, загружать большие файлы (более 5 МБ) из потока.

Ответы [ 6 ]

2 голосов
/ 09 июня 2011

TMS Software имеет очень хороший TAdvMemo с большим количеством подсветок синтаксиса. А также есть TRichEdit "замена". Помимо подсветки синтаксиса их памятки поддерживают номера строк. Не знаю, что такое большие файлы, но 5 МБ не звучат так, как если бы они находились рядом с любыми ограничениями, которые у них были бы с / *.

TRichView - это еще одна настоятельно рекомендуемая замена TRichEdit с большим набором функций.

2 голосов
/ 09 июня 2011

Developer Express имеет обширный набор компонентов VCL, среди которых замена Memo (TcxMemo) и редактирование RTF (хотя я не знаю о наборе функций).

1 голос
/ 09 июня 2011

Наш SynMemoEx компонент был разработан, чтобы быть легким и быстрым.Он загружает и обрабатывает 50 МБ текстового контента без проблем, включая перенос слов.

Но это только для Delphi 6 до 2007 года (пока не unicode).Но он бесплатный и с открытым исходным кодом.

Мы используем этот компонент в нашем инструменте SynProject , как для отображения версий файлов, так и для выпуска документации.И у вас есть подсветка для .pas .c .cs .h .xml .html .dfm файлов (и более).

Он имеет нумерацию строк и другие приятные функции.Смотрите скриншоты здесь .

0 голосов
/ 25 апреля 2017

Существует ли какой-либо компонент, который может иметь связанный контент, похожий на 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-битном процессоре (скомпилировано со специальной директивой).

Помните, что приложение должно работать как на 32-битных, так и на 64-битных процессорах без необходимости компиляции разных версий ... и должно быть RunAble и вообще не требовать записи (в любом месте) при запуске (стиль судебной экспертизы).

Я подумал о возможном способе его создания ... на основе TStringList, но опять же я настолько ограничен ... и это так много работы с нуля.

Может быть, есть компонент, так как я видел некоторые приложения, которые могут показать вам большой файл, не загружая его, все они с собственной реализацией с нуля? или они используют компонент, о котором я не знаю?, большинство из них предназначены для шестнадцатеричного редактирования большого двоичного файла, некоторые могут редактировать файлы большого количества GiB, и только некоторые из них могут вставлять и удалять действительно быстро, пока они не сохранятся ( Ввод / вывод для копирования всего файла при выполнении ожидающих операций вставки / удаления может занять очень много времени, более одного часа, но выполнение вставки / удаления на экране выполняется довольно быстро (менее одной десятой секунды).

Я могу делать все, что захочу, если найду компонент, который:

  • выглядит как TMemo
  • По коду можно смоделировать вертикальную и горизонтальную прокрутку, не касаясь выделенного выделения текста (я могу скрыть полосу прокрутки с меньшим контейнером TPanel, поэтому нет необходимости в элементе управления, чтобы скрыть полосы прокрутки)
  • Действительно очень важно: не загружать весь файл (только читать показанную часть)
  • Иметь LoadFromFile (но на самом деле не загружать весь файл, просто хранить внутреннюю ссылку на файл)
  • Ненеобходимо, но желательно: пользователь может редактировать, как на TMemo
  • Не нужно, но желательно: есть SaveToFile для сохранения пользовательских изменений

Есть кто-нибудь?

Добавлено: бесплатно (для любого использования) и OpenSource является обязательным.

0 голосов
/ 10 июня 2011

Компонент убийцы: Synedit - http://sourceforge.net/apps/mediawiki/synedit/index.php?title=SynEdit_Home_Page

проверить это:)

0 голосов
/ 09 июня 2011

TRichView - это популярный компонент, специально разработанный для отображения, редактирования и печати гипертекстовых документов. Существует также дополнение TRichView, обеспечивающее редактирование WYSIWYG. Он имеет Unicode, импорт и экспорт RTF, экспорт HTML, версии с поддержкой данных и многое другое.

Я использую его как основной компонент в моей генеалогической программе и использую его для загрузки очень больших файлов (например, 100 МБ или более). Он может читать или записывать напрямую в / из потоков.

...