Пишем свой текстовый редактор на delphi 7
Для данной работы я использую среду разработки Delphi 7.
Пример текстового редактора, который мы создадим будет
иметь самый начальный функционал и вряд ли сможет тягаться
с другими текстовыми редакторами по своим возможностям.
Цель данного урока - дать Вам начальный старт в этом
направлении. С одной стороны сделать первый шаг
в программировании на примере среды разработки Delphi 7,
а с другой показать это сразу же на хорошем рабочем
примере, который вполне может пригодиться вам в вашей
деятельности.
Если будет нужно создать какую-либо небольшую утилиту
для работы с текстовыми файлами и добавления в неё каких-либо
дополнительных возможностей, которых с одной стороны нет
в более продвинутых редакторах, а даже если и есть,
то вам, к примеру не нужны все функции, а нужен только
определенный функционал и главное - это иметь возможность
расширять вашу утилиту, а также оставить её компактной
и имеющей возможность быстрого развертывания на другом
компьютере.
Если с этим все ясно, давайте приступим.
Добавим на форму компоненты TMemo и TMainMenu. Они расположены
на вкладке Standard и имеют имена MainMenu и Memo соответственно.
При добавлении на форму они будут автоматически объявлены в коде
как типы TMemo и TMainMenu, именно поэтому я указал, такие названия
для них.
Если Вы в первый раз пробуете написать приложение в среде Delphi 7,
то вполне возможно это немного сбило вас с толку.
Для Memo1, который мы добавили на форму, установим свойство Align в alClient
для того, чтобы компонент растянулся на все свободное пространство формы.
Установим свойство ScrollBars в ssBoth, а WordWrap в False.
И уберем введенный в Memo1 текст по-умолчанию, удалив этот текст из свойства Lines.
Все что мы делали называется визуальным программированием. Т. е. мы пока еще
не писали никакой код, но делали какие-то действия благодаря которым весь
нужный код был создан автоматически.
Если мы откроем модуль SmallNoteUnit1.pas (а у вас он может называться и Unit1.pas если
вы его еще не сохранили под другим именем), то увидим такой добавленный код:
Memo1: TMemo;
MainMenu1: TMainMenu;
А свойства компонента Memo1 будут выглядеть так
На рисунке я показал где описаны эти свойства, которые мы задавали через инспектор объектов
Чтобы вернуть показ формы к исходному виду (визуальный) щелкните правой кнопкой по форме
и выберите пункт View as form.
Давайте скомпилируем наше приложение и запустим, чтобы убедиться - оно работает.
Сохраняем все изменения в проекте, а затем компилируем.
Находим папку где был создан исполнимый exe файл и запускаем.
В вашем случае папка может быть другой и зависит от того, в какую папку Вы сохраняли проект
в момент сохранения.
Лучше всего укажите сразу при сохранении нужную вам папку, тогда проще будет
её и найти потом :)))).
Запустив приложение убеждаемся, что оно работает и идем дальше.
Закроем наше приложение. Иначе его нельзя будет скомпилировать.
Теперь займемся созданием пунктов главного меню для нашего маленького текстового
редактора.
Кликнем по MainMenu1 дважды - появится окно. Используя его создадим меню "Файл", а
в нем элементы: "Создать", "Открыть", "Сохранить", "Сохранить как...",
разделительную полоску (символ "-") и "Выход"
Действуя подобным образом создадим еще пункты меню Правка и Формат.
По сути мы делаем все то же, что есть в стандартном приложении Блокнот Windows,
но в отличие от него у нас еще и будет исходный код данного приложения и значит,
мы сможем добавить в него какие-то свои новые возможности, чего сделать
со стандартным Блокнотом естественно нельзя.
Ну а чтобы модифицировать какой-то открытый код каких-то более сложных текстовых
редакторов, надо обладать соответствующими навыками и знаниями. Мы собственно сейчас
этим и занимаемся - развиваем наши с вами навыки и пополняем знания -
пытаясь начать с самого простейшего примера.
Попробуем сохранить все изменения и скомпилировать, а затем запустить приложение.
Как видим оно работает, правда выбор пунктов меню пока еще не приводит ни к каким
действиям. Но это и понятно, мы еще не определили обработчики для этих действий.
Так что идем дальше.
Определим обработчик для пункта меню Выход.
Для этого в окне формы выберем пункт Выход. Делаем это естественно в среде разработки Delphi 7,
а не в запущенном приложении. :)))
Среда разработки в модуле SmallNoteUnit1.pas сгенерирует обработчик для данного пункта
меню, в который мы можем вставить какой-либо нужный нам код.
Если в обработчик не вставить никакого кода, но сохранить изменения в проекте,
то обработчик будет автоматически удален, т. к. среда разработки решит, то
он здесь не нужен - поскольку мы не добавили никакого кода.
Исправим этот недочет - повторим описанные действия и в созданный код обработчика
добавим:
Close;
procedure TForm1.iQuitClick(Sender: TObject);
begin
Close;
end;
Сохраним изменения, скомпилируем и запустим полученный exe файл.
Теперь при выборе меню:
Файл > Выход
наш текстовый редактор завершит свою работу,
как если бы мы воспользовались кнопкой Х закрытия приложения расположенной в правом
верхнем углу его окна.
Все просто - вызов Close - это сигнал того, что приложение должно завершиться.
Если говорить более точно - для завершения работы приложения обычно используется
процедура Application.Terminate;
Не следует её путать с вызовом
Exit;
который используется для выхода из текущей процедуры (функции),
но не завершает работу программы.
Метод Close закрывает форму. Если закрываемая форма главная форма программы,
то завершается работа всей программы, что как раз имеет место в нашем примере -
мы закрываем главную форму и поскольку других открытых форм у приложения нет -
то оно завершит свою работу.
Если по какой-то причине вы выполняете Close, но приложение не закрывается,
значит у приложения остались какие-то незакрытые окна или работающие в памяти
процессы и вам нужно проверить код приложения и убедиться что ничего лишнего
и незакрытого там нет.
Вместо Close можно написать
Form1.Close;
и это было бы правильнее, но поскольку мы вызываем его итак в обработчике
procedure TForm1.iQuitClick(Sender: TObject);
т. е. как раз в объекте класса TForm1,
то вызов Close подразумевает, что данный метод будет принадлежать объекту
Form1, который является экземпляром класса TForm1 в данном случае.
Если же вызывать Close внутри какого-то иного обработчика, тогда да, нам обязательно
потребовалось бы указать какого именно -
Form1.Close;
иначе по ошибке мы могли бы закрыть совсем другое окно, вместо нужного нам
по контексту.
Form1 в данном случае это родительский объект, а Close - это метод, который
принадлежит данному родителю.
Идем дальше, теперь реализуем обработчик для переноса слов (пункт меню Формат > Перенос по словам)
Аналогично тому, как мы создавали обработчик для пункта меню Выход - выбираем пункт меню
Формат > Перенос по словам на форме Form1 и получаем код обработчика.
procedure TForm1.iWordWrapClick(Sender: TObject);
begin
end;
Внутри него добавим такой код -
procedure TForm1.iWordWrapClick(Sender: TObject);
begin
If Memo1.WordWrap then
begin
Memo1.WordWrap := False;
Memo1.ScrollBars := ssBoth;
iWordWrap.Checked := False;
end
else begin
Memo1.WordWrap := True;
Memo1.ScrollBars := ssVertical;
iWordWrap.Checked := True;
end;
end;
Сохраняем изменения, компилируем, запускаем приложение.
Если вставлять в блокнот длинные строки текста при отключенной опции переноса слов,
то в окне будет появляться горизонтальная полоса прокрутки, если же
опция включена - слова будут переноситься на следующую строку.
Разберем, что делает код
procedure TForm1.iWordWrapClick(Sender: TObject);
begin
If Memo1.WordWrap then { если включена опция WordWrap у компонента Memo1, то }
begin
Memo1.WordWrap := False; // сбрасываем её в False т. е. отключаем
Memo1.ScrollBars := ssBoth; //включаем вертикальную и горизонтальную полосы прокрутки
iWordWrap.Checked := False; //у пункта меню Формат > Перенос по словам снимаем галочку
end
else begin { если отключена опция WordWrap у компонента Memo1, то }
Memo1.WordWrap := True; // устанавливаем её в True - т. е. включаем
Memo1.ScrollBars := ssVertical; // включаем отображение только вертикальной полосы
// прокрутки (когда в окне будет много текста она отобразится)
iWordWrap.Checked := True; //у пункта меню Формат > Перенос по словам устанавливаем галочку
end;
end;
Если с этим все ясно - идем вперед.
Наш учебный (или уже почти настоящий) текстовый редактор пока что бесполезен.
Мы можем набирать в нем какой-то текст, переносить его по словам или нет,
но сохранить созданный текст в файл мы пока не можем. Давайте устраним
этот досадный недостаток. Научимся как это сделать.
Создадим обработчик для пункта
Сохранить как
по-аналогии как мы это уже делали для пунктов
Файл > Выход
Формат > Перенос по словам
procedure TForm1.iSaveAsClick(Sender: TObject);
begin
end;
Добавим туда такой код
//SaveAs;
т. е. наш обработчик будет выглядеть так -
procedure TForm1.iSaveAsClick(Sender: TObject);
begin
//SaveAs;
end;
Строка начинающаяся с символа // является комментарием.
Т. е. данный код выполнен не будет.
Я это сделал по той причине, поскольку мы еще с вами не написали процедуру SaveAs,
а также не сделали кое-какие еще необходимые действия.
Давайте займемся этим.
При выборе пункта меню
Сохранить как
обычно появляется окно диалога, в котором
вам предлагается указать имя сохраняемого файла
и папку, в которую вы хотите его сохранить
Нам нужен компонент TSaveDialog, расположенный на вкладке Dialogs.
Добавим его на форму.
После того, как компонент появился на форме не снимая с него
выделения в инспекторе объектов отредактируем свойство
Filter
нажав кнопку
...
как показано на рисунке ниже
Свойство
DefaultExt
нужно изменить на
*.txt
Опишем наконец процедуру SaveAs
её код разместим сразу после строки кода
{$R *.dfm}
procedure SaveAs;
begin
If Form1.SaveDialog1.Execute then
{ если окно сохранения файла было закрыто по кнопке Сохранить, нажатой в окне, то }
begin
//содержимое строк Memo1.Lines сохраняем в файл с именем Form1.SaveDialog1.FileName
//которое было задано
//в диалоговом окне сохранения файла
Form1.Memo1.Lines.SaveToFile(Form1.SaveDialog1.FileName);
//данной глобальной переменной (её опишем далее) присваиваем имя текстового файла
//с которым идет работа
EditedTxtFile := Form1.SaveDialog1.FileName;
end;
end;
После строки
Form1: TForm1;
добавляем объявление переменной
EditedTxtFile: string;
т. е. будет выглядеть так
var
Form1: TForm1;
EditedTxtFile: string;
Не забываем в обработчике
procedure TForm1.iSaveAsClick(Sender: TObject);
begin
//SaveAs;
end;
убрать //
т. е. так
procedure TForm1.iSaveAsClick(Sender: TObject);
begin
SaveAs;
end;
Сохраняем изменения, компилируем, запускаем наше приложение и проверяем работу
пункта
Сохранить как
Для этого в редакторе нужно набрать какой-либо текст, затем сохранить его
выбрав пункт меню
Файл > Сохранить как
Убедившись, что файл действительно сохраняется
и будучи открыт, например стандартным Блокнотом Windows
содержит набранный текст - можем порадоваться - мы
только что научились с вами сохранять созданный в нашем
текстовом редакторе текст в файл.
Чтобы завершить разработку нашего текстового редактора давайте
создадим обработчики для пунктов
Файл > Сохранить
procedure TForm1.iSaveClick(Sender: TObject);
begin
if EditedTxtFile = '' then SaveAs else Memo1.Lines.SaveToFile(EditedTxtFile);
end;
Файл > Открыть
Добавим на форму компонент TOpenDialog
и его свойство DefaultExt
также как у SaveDialog1
зададим равным
*.txt
ну а в обработчик добавим такой код -
procedure TForm1.iOpenClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
EditedTxtFile := OpenDialog1.FileName;
end;
end;
Сохраняем изменения, компилируем, запускаем наше приложение и проверяем
Да. Теперь можно открыть сохраненный ранее файл, сохранить файл с тем же именем
выбрав пункт
Файл > Сохранить
вообщем все как в настоящем текстовом редакторе.
Реализуем обработчики для пунктов
Файл > Создать
а также всех подпунктов меню Правка
код для них будет выглядеть так
procedure TForm1.iCreateClick(Sender: TObject);
begin
EditedTxtFile := '';
Memo1.Clear;
end;
procedure TForm1.iCutClick(Sender: TObject);
begin
Memo1.CutToClipboard;
end;
procedure TForm1.iCopyClick(Sender: TObject);
begin
Memo1.CopyToClipboard;
end;
procedure TForm1.iPasteClick(Sender: TObject);
begin
Memo1.PasteFromClipboard;
end;
Сохраняем изменения, компилируем, запускаем наше приложение и проверяем.
При выборе пункта
Файл > Создать
если был ранее открыт какой-то текст, то все содержимое в области
Memo1 очищается. Файл при этом естественно останется без изменений,
если вы его не сохраняли.
Но работа пункта
Файл > Сохранить
станет похожа на работу пункта
Файл > Сохранить как
поскольку переменная
EditedTxtFile
была при этом очищена.
Также проверим как работает вставка и копирование, вырезание выделенных кусков текста.
Работает все прекрасно (если у вас - нет - ищите причину ошибки),
единственный минус - операции с блоками текста не работают с горячими клавишами -
Ctrl + C, Ctrl + V, Ctrl + X
Но этот недостаток поправим.
Более того, у Memo1 даже есть отмена 1 сделанного действия по горячей клавише
Ctrl + Z,
хотя мы для этого не написали ни строчки кода.
Для того, чтобы назначить операциям правки горячие клавиши
нужно задать для каждого пункта меню свойство
ShortCut
думаю с этим вы уже легко справитесь и самостоятельно.
Вот код формы который должен получиться в итоге (если форму посмотреть
выбрав пункт View as Text, о котором уже говорилось выше).
object iCut: TMenuItem
Caption = 'Вырезать'
ShortCut = 16472
OnClick = iCutClick
end
object iCopy: TMenuItem
Caption = 'Копировать'
ShortCut = 16451
OnClick = iCopyClick
end
object iPaste: TMenuItem
Caption = 'Вставить'
ShortCut = 16470
OnClick = iPasteClick
end
И завершающий штрих
Реализация функций пункта меню
Формат > Шрифт
Для этого добавляем на форму компонент TFontDialog.
И в коде добавляем такой обработчик -
procedure TForm1.iFontClick(Sender: TObject);
begin
if FontDialog1.Execute then Memo1.Font := FontDialog1.Font;
end;
а также некоторые дополнительные возможности -
название нашего текстового редактора
Form1.Caption = 'Small Note';
чтобы его окно выводилось при запуске по центру экрана
Form1.Position = poScreenCenter;
и чтобы все компоненты редактора приобрели вид в стиле Win XP.
Добавим модуль XPMan в список модулей (секция uses).
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, XPMan;
Мы с вами проделали отличную работу - научились с нуля создавать
текстовый редактор в среде Delphi 7.
Конечно тут есть нюанс - мы в своей работе использовали готовые компоненты -
TMainMenu, TMemo, TSaveDialog, TOpenDialog, TFontDialog. Поэтому благодаря
использованию этих готовых блоков наша работа протекала достаточно быстро.
Ну а если бы мы задумали сделать что-то нестандартное, то нам бы пришлось
сначала изучить код данных компонентов и на их основе сначала написать какие-то
модифицированные и уже потом использовать их для создания приложения с
нетипичным для данных компонентов функционалом.
Такая работа конечно же потребовала бы от вас значительно больших затрат
времени, да и опыт для этого нужен больший. Я конечно же надеюсь, что
Вы не остановитесь на достигнутом.
И еще пара слов в завершение урока. Сам по себе функционал нашего текстового
редактора весьма стандартный - любой текстовый редактор, включая Блокнот Windows
имеет точно такой же функционал и даже более.
Самым главным отличием является то, что Вы можете доработать свой текстовый редактор
добавив какие-то нестандартные возможности, которые в Блокнот или другой
редактор Вы никогда добавить не сможете. Либо сможете, но сделать это будет
не так просто.
А возможности, например, могут быть такими: поскольку программа умеет открывать
любые файлы похожие на текстовые, то вы могли бы добавить в код какую-либо
автоматическую обработку входных текстовых данных.
Скажем на вход подается какой-то текст (в файле) и нужно выполнить над этим
текстом какие-то действия по поиску, анализу и даже модификации без участия
человека.
Все это можно реализовать в коде вашего приложения. Согласитесь - с такими
потенциальными возможностями Ваш простенький редактор текста уже не так прост,
как это может показаться на первый взгляд.
Главное найти всему этому интересное (но конечно не обязательно) или хотя бы
полезное применение и реализовать все эти идеи в вашем коде.
Вот тогда вы уже получите именно то, что хотели - то есть воплощение любых ваших
задумок и идей !
Скачать приложение Текстовый редактор Small Note с исходным кодом на delphi 7.
Дистрибутив представлен в виде zip архива.
Размер файла: 213 Kb.
оцените статью:
0
0
игры, сервисы
играть
играть
случайный сайт
играть
видео-рассказ, уроки godot, виртуальный помощник по поиску информации
играть
читать
купить
скачать
игры Многоликий: dress - hordes эпизоды с 1 по 4
играть
скачать
купить
купить
игры, музыкальные клипы
скачать
скачать
смотреть
скачать/играть
музыкальный клип, игры
смотреть
играть
скачать
скачать
разработка игр, анимационный фильм, новогодняя дискотека 2020 - песни на итальянском, игра про лифт
смотреть
смотреть
смотреть
смотреть
игры, инструменты разработки, анимационный фильм, фильм.
купить
смотреть
смотреть
скачать
игры
скачать
скачать
скачать
купить
игры в браузере
играть
играть
играть
играть
игры в браузере
играть
играть
играть
играть
игры в браузере
играть
играть
играть
играть
игры в браузере
играть
играть
играть
играть
игры в браузере (3), создание музыки в браузере (1)
играть
играть
играть
играть
игры в браузере
играть
играть
играть
играть
игры в браузере
играть
играть
бк 0010.01 - играть!
играть
игры в браузере
играть
играть
играть
играть
игры в браузере (3), скачиваемые (1)
играть
играть
играть
скачать
игры в браузере
играть
играть
играть
играть
игры в браузере, скачиваемые игры
играть
скачать
играть
играть
игры в браузере
играть
играть
играть
играть
игры в браузере
Foxyland 2
quidget 2
играть
играть
полезный софт, игры в браузере
скачать
anova игра
A Knots Story
sabotage
сервисы, игры
24500 руб.
скачать
игра
играть
игры, программы
купить / скачать
купить
5500 руб.
скачать
поздравления, уроки рисования, уроки создания сайтов
читать
читать
читать
150 руб.
комиксы, музыка, рассказы
читать
читать
слушать
читать
игра для разработки, калькулятор услуг, cms, комикс
250 руб.
разработка на заказ
1250 руб.
350 руб.
игры для разработки, комиксы
скачать
читать
читать
скачать
игры шарики и ямки, комиксы про Костю Коробкина, ria xxl игра, fly snow 3d генератор эффектов снега, частиц и др. -
скачать
читать
150 руб.
350 руб.
Создай свою игру на fle game engine -
800 руб.
240 руб./скачать
скачать
скачать
Для создания сайта - модуль отзывов/комментариев для вашего сайта в составе megainformatic cms express files -
700 руб.
1250 руб.
150 руб.
500 руб.
Уроки Flash, бесплатные Flash - игры.
бесплатно
бесплатно
2500 руб.
14000 руб.
Поддержка сайтом нескольких языков (multi lang), создание собственной системы личных кабинетов, соц. сети или фриланс - биржи (megainformatic cms social), создание сервиса коллективных покупок на базе megainformatic cms groupon, онлайн сервис подсчёта статистики ключевых слов в статьях вашего сайта keywords gen + описание кода данного сервиса, с возможностью бесплатно реализовать его аналог на своём собственном сайте.
500 руб.
12000 руб.
14000 руб.
бесплатно
megainformatic.ru/webjob/ - сервис для фриланс проектов
- место встречи заказчиков и исполнителей
megainformatic.ru/webjob/ - сервис для фриланс проектов
- место встречи заказчиков и исполнителей
Системы управления сайтом, уроки
1250 руб.
бесплатно
550 руб.
500 руб.
megainformatic cms admin - простая и компактная система
для работы и управления сайтом
350 руб.
5800 руб.
3000 руб.
500 руб.
megainformatic cms free и серия продуктов - Уроки Photoshop
бесплатно
650 руб.
700 руб.
750 руб.
Данная серия посвящена описанию приемов и методов создания изображений,
с помощью инструментария программы Adobe Photoshop. Кроме того, многие
описанные средства могут вам помочь при освоении и многих других программ
для работы с растровой графикой - GIMP, Corel Photo Paint и других.
бесплатные игры 2d и 3d, а также эмулятор Ну, Погоди!
300 руб.
бесплатно
бесплатно
бесплатно
Это серия распространяемых бесплатно игр. Вы не только можете поиграть,
но и скачать исходники, получив тем самым возможность внести изменения
в игру или создать новую !!! (эмулятор Ну, Погоди! распространяется платно).
серия игр про Веселого Буквоежку, и бесплатно распространяемая игра
Нечто: Необъяснимое - в плену желаний
350 руб.
510 руб.
fle game engine
бесплатно
Здесь представлены новинки жанра - Говорящий Комикс, Настольная игра,
А также продукт, который позволит Вам научиться создавать игры самостоятельно.
Ну и конечно изюминка в своём роде - бесплатная игра - Нечто: Необъяснимое
- в плену желаний
Серия бесплатных онлайн уроков, посвященных 3ds max, photoshop, c++,
directx, delphi и php.
бесплатно
бесплатно
бесплатно
бесплатно
бесплатно
бесплатно
500 руб.
300 руб.
Описаны практические примеры решения различных задач, возникающих при
создании игр и сайтов.
Продукты Набор разработчика и Ваше Визуальное Шоу распространяются платно.
уроки и продукты различной тематики
бесплатно
бесплатно
бесплатно
400 руб.
Бесплатные Уроки Photoshop free, Бесплатные Уроки по программированию
на delphi directx - Как создать игру Ну, Погоди!, Бесплатная Авторская
музыка в формате mp3 - Музыкальные Миры, Платно распространяемый продукт
megainformatic cms express - система для быстрого создания Вашего сайта
на php + my sql.
Проекты игр, уроки
450 руб.
бесплатно
бесплатно
бесплатно
Игра Веселый Буквоежка, уроки delphi directx 8.1 для начинающих (описываются
основы 3d игр), моделируем девушку в 3d studio max, уроки музыки - пишем
музыку в Fruity Loops Studio
megainformatic
cms express files - это простое, быстрое и очень компактное решение
для создания первого вашего сайта. НЕ ИСПОЛЬЗУЕТ базы данных mysql.
Вместо этого используются файловые базы данных. Поэтому Вы
можете использовать систему даже на хостинге с поддержкой php, но
без поддержки баз данных my sql.
Очень
проста в установке - достаточно вам скопировать все файлы на ваш
хостинг и сайт готов к работе !!!
В комплект входят 3 готовых шаблона, модули поиска и карты сайта,
а также статьи по основам создания сайта.