Как сделать текстовый редактор на c
Я изучал С++ в несколько раз, но никогда не писал реальные приложения, использующие его.
долгое время я думал, что писать текстовый редактор будет что-то очень интересное, теперь я ищу простой, но достойный текстовый редактор, написанный на c или С++, из которого я могу получить вдохновение и научиться писать текстовый редактор сам,
Не могли бы вы, ребята, порекомендовать мне "простой, но достойный" текстовый редактор, написанный на c или С++?
Ну, что вы хотите видеть, больше похоже на учебник, чем на реальное приложение (я думаю, что приложения, такие как Notepad ++, будут много для погружения в начале). Поскольку вы не указываете какую-либо среду, в которую хотите запрограммировать, вы можете проверить текстовый редактор QT. QT - это кросс-платформенный GUI Toolkit, поэтому вы не привязаны к определенной операционной системе, но, вероятно, сложнее настроить среду Visual Studio в Windows.
Стандартные диалоги – это диалоговые окна, общие для большинства приложений Windows. Например, когда пользователь сохраняет файл в редакторе Word, он использует диалоговое окно Save As … (Сохранить как …). Когда он сохраняет рабочую книгу в Microsoft Excel, он также использует диалоговое окно Save As …
Вместо этого программист попросту устанавливает стандартный компонент на форму и задает ему необходимые свойства.
В составе Lazarus поставляется 14 диалоговых компонентов. Все они находятся на вкладке Dialogs. Как и MainMenu, в среде Lazarus диалоговые компоненты являются невизуальными, они присутствуют на форме в виде значков, однако во время выполнения они невидимы.
В этом уроке мы рассмотрим диалоговые компоненты: TOpenDialog, TSaveDialog, TFontDialog.
Для активизации диалогового окна используется метод Execute(). Он выполняет открытие соответствующего окна и возвращает значение True, если пользователь щелкнул по кнопке ОК.
Компоненты TOpenDialog и TSaveDialog
Компонент TOpenDialog предназначен для выбора файла с целью последующего открытия, а компонент TSaveDialog — для последующего сохранения файла.
свойства приведены в таблице.
Эти компоненты не предназначены для выполнения конкретных действий: загрузки файла, записи в файл. Они применяются только для получения от пользователя желаемых настроек, например ввода полного имени файла вместе с путем поиска.
Рассмотрим использование диалоговых окон на примере создания простейшего Текстового редактора.
Задание. Создайте приложение Текстовый редактор. В приложении должно быть меню, содержащее пункты: Файл -Открыть, Файл-Сохранить, Шрифт. Приложение открывает текстовый файл на диске с использованием компонента TOpenDialog, записывает текст из файла в объект Memo на форме. После редактирования и форматирования текст необходимо сохранить. Для выбора файла для сохранения использовать компонент TSaveDialog, при форматировании шрифта — компонент TFontDialog.
При работе с текстовыми файлами следует иметь в виду, что при выводе в TMemo файла с русским текстом, в Windows буквы могут отображаться некорректно. Это вызвано тем, что текстовые файлы в ОС Windows имеют кодировку CP-1251. Перед выводом текст необходимо преобразовать в кодировку UTF8.
Ход выполнения проекта
1. Создайте форму и разместите на ней компоненты MainMenu, Memo1. Компонент MainMenu – невизуальный компонент, его значок можно поместить в произвольном месте.
2. Чтобы начать формирование пунктов меню, дважды щелкните по компоненту TMainMenu1. Откроется специальное окно Редактор меню.
Определите пункты меню.
Меню первого уровне содержит два пункта: New Item1 и New Item2 . Первый пункт создается автоматически. Чтобы на этом уровне добавить второй пункт, откройте контекстное меню существующего пункта и выполните команду Вставить новый пункт (после). Появиться новый пункт New Item2.
Меню New Item1 содержит пункты : New Item3 и New Item4. Откройте контекстное меню пункта New Item1 и выполните команду Создать подменю. В подменю появиться пункт New Item3. Для него откройте контекстном меню и выполните команду Создать новый пункт (после). Появиться пункт New Item4.
3. Значения свойств установите в соответствии с таблицей.
Компонент | Свойство | Значение |
MenuItem1 | Caption | Файл |
MenuItem2 | Caption | Шрифт |
MenuItem3 | Caption | Открыть |
MenuItem4 | Caption | Сохранить |
Form1 | Caption | Текстовый редактор |
Memo1 | ScrollBars | ssVertical |
5. Выберите в палитре компонентов вкладку Dialogs и поместите на форму компоненты OpenDialog, SaveDialog, FontDialog.
Эти компоненты невизуальные, разместить их в нижней части формы рядом со значком TMainMenu.
6. Настройте свойства компонентов OpenDialog, SaveDialog
Компонент | Свойство | Значение |
OpenDialog1 | Title | Открыть |
SaveDialog1 | Title | Сохранить |
7. Чтобы реализовать выбор типа файла при открытии файла в окне диалога:
- выберите в окне Инспектор объектов объект OpenDialog1;
- на странице свойства дважды щелкните мышью по списку значений свойства Filter.
- в окне Редактор фильтра (Filter Edit) задайте фильтры для выбора типа и расширения файла.
8. Чтобы установить в качестве расширения файла первый вариант (.txt), задайте для свойства OpenDialog1.FilterIndex значение 1.
9. Для диалога SaveDialog задайте свойство DefaultExt = txt (чтобы расширение txt автоматически добавлялось к создаваемому файлу).
10. В разделе implementation после директивы < TForm1 >запишите программный код процедуры Ansi_Memo, реализующей загрузку текста из файла с системной кодировкой (кодировка Ansi) в memo-поле (кодировка UTF8), а также процедуры Memo_Ansi, сохраняющей текст из memo-поля в файле на диске.
11. Напишите программный код для процедуры обработчика щелчка на пункте меню Файл – Открыть. Для этого дважды щелкните на данном пункте меню.
После выбора пользователем файла в свойстве OpenDialog1.FileName будет находиться имя файла вместе с путем к нему.
Обратите внимание на оператор:
Если имя файла, а также путь содержит кириллицу, то необходимо строку с именем файла преобразовать в системную кодировку.
12. Напишите программный код процедуры обработчика щелчка на пункте меню Файл-Сохранить:
13. Напишите программный код процедуры обработчика щелчка на пункте меню Шрифт:
14. Сохраните, откомпилируйте и запустите на выполнение созданное приложение.
15. Щелкните мышью на кнопке Открыть, в диалоговом окне Открыть текстовый файл выберите папку, задайте тип файла и выберите текстовый файл, после чего нажмите кнопку Открыть.
16. Отредактируйте текст в окне приложения и нажмите кнопку Сохранить.
После этого в диалоговом окне сохранить текстовый файл выберите в поле тип файла расширение для сохраняемого файла, задайте его имя и щелкните мышью по кнопке Сохранить.
17. Открыв в окне Проводника папку, в которой был сохранен файл, убедитесь, что файл с указанным вами именем в ней есть.
Как написать текстовой редактор (редактор кода) имея минимум средств, т.е. с графической стороны у меня будет возможность только :
- Рендер текста в точке (x, y)
- Рисование графических примитивов (точка, линия, круг, изображение, . )
Т.е. в наборе инструментов не будет виджетов типа TextBox , textarea и т.п. Хотя я не отказался бы от кнопок и меню.
Т.е. мне придется самому организовать все элементы интерфейса. Например, курсор я буду рисовать с помощью drawLine(x, y, x, y + heightOfCursor) .
Это нужно для того, чтобы иметь больший контроль над текстом.
Подскажите какую лучше всего использовать библиотеку и какой язык. Было бы здорово чтобы у языка и библиотеки были высокая производительность.
Прежде всего, я хотел бы сказать вам всем, что я провел много исследований в Google и в других местах, но безрезультатно.
Я хочу знать, как мне сделать текстовый редактор на турбо С++ без Windows API. Я начал делать это некоторое время назад в Turbo C++, а также научился включать мышь с помощью функции int86() и реализовал это. Но время от времени я застреваю на том или ином. Как сейчас, я застрял, как выделить и выбрать текст для щелчка правой кнопкой мыши.
Во-вторых, я также научился обращаться к видеопамяти (какой бы фальшивой или старой она ни была в наши дни), чтобы лучше контролировать текст.
Также для ввода текста я использую большой массив, так как у меня мало знаний об использовании списков ссылок для такого большого ввода текста и управлении им.
Примечание. Я не хочу использовать какую-либо другую IDE или какой-либо API для этого по чисто образовательным причинам.
Пожалуйста, объясните мне, как заставить эту вещь продолжаться до завершения. Я готов изучить все дополнительные вещи, чтобы завершить его.
Оригинальная версия продукта: Visual Studio
Исходный номер КБ: 816149
Сводка
В разделе Чтение текстовых файлов этой статьи описывается, как использовать класс для чтения StreamReader текстового файла. Разделы Write a text file (пример 1) и разделы Write a text file (пример 2) описывают, как использовать класс для записи StreamWriter текста в файл.
Чтение текстового файла
Следующий код использует класс для открытия, чтения и закрытия StreamReader текстового файла. Вы можете передать путь текстового файла конструктору, чтобы StreamReader открыть его автоматически. Метод читает каждую строку текста и приращение указателя файла к следующей строке по ReadLine мере чтения. Когда метод достигает конца файла, он возвращает ReadLine ссылку null. Дополнительные сведения см. в группе StreamReader Class.
Создайте пример текстового файла в Блокнот. Выполните следующие действия:
- Вклеить текст hello world в Блокнот.
- Сохраните файл как Sample.txt.
Начните Microsoft Visual Studio.
В меню File указать на New, а затем выбрать Project.
Добавьте следующий код в начале файла Class1.cs:
Добавьте в метод следующий Main код:
В меню Отлаговка выберите Пуск для компиляции и запуска приложения. Нажмите КНОПКУ ВВОД, чтобы закрыть окно консоли. В окне Консоли отображается содержимое файла Sample.txt:
Написать текстовый файл (пример 1)
Следующий код использует класс для открытия, записи и закрытия StreamWriter текстового файла. Аналогично классу, вы можете передать путь текстового файла конструктору, чтобы открыть StreamReader StreamWriter его автоматически. Метод WriteLine записывает полную строку текста в текстовый файл.
Запустите Visual Studio.
В меню File указать на New, а затем выбрать Project.
Добавьте следующий код в начале файла Class1.cs:
Добавьте в метод следующий Main код:
В меню Отлаговка выберите Пуск для компиляции и запуска приложения. Этот код создает файл, которыйTest.txt на диске C. Open Test.txt в текстовом редакторе, например Блокнот. Test.txt содержит две строки текста:
Написать текстовый файл (пример 2)
Следующий код использует класс для открытия, записи и закрытия StreamWriter текстового файла. В отличие от предыдущего примера, этот код передает конструктору два дополнительных параметра. Первый параметр — путь к файлу и имя файла. Второй параметр true указывает, что файл открыт в режиме приложения. Если вы указываете для второго параметра, содержимое файла перезаписывается при каждом запуске false кода. Третий параметр Unicode указывает, чтобы StreamWriter кодировать файл в формате Unicode. Можно также указать следующие методы коди-кодинга для третьего параметра:
Метод похож на метод, за исключением того, что метод не автоматически встраит комбинацию символов возврата или строки Write WriteLine Write (CR/LF). Это полезно, когда нужно одновременно писать по одному символу.
Запустите Visual Studio.
В меню Файл выберите пункт Создать и затем пункт Проект.
Добавьте следующий код в начале файла Class1.cs:
Добавьте в метод следующий Main код:
В меню Отлаговка выберите Пуск для компиляции и запуска приложения. Этот код создает файл, которыйTest1.txt на диске C. Open Test1.txt в текстовом редакторе, например Блокнот. Test1.txt содержит одну строку текста: 0123456789.
Полное перечисление кода для чтения текстового файла
Полное перечисление кода для записи текстового файла (версия 1)
Полное перечисление кода для записи текстового файла (версия 2)
Устранение неполадок
Для всех манипуляций с файлами, это хорошая практика программирования, чтобы обернуть код в блок try-catch-finally для обработки ошибок и исключений. В частности, может потребоваться освободить ручки для файла в окончательном блоке, чтобы файл не был заблокирован на неопределенный срок. Некоторые возможные ошибки включают файл, который не существует, или файл, который уже используется.
Читайте также: