Часть Вторая "Создание Текстового редактора на Delphi" Для полной русификации не хватает только одного — русского названия программы. Щелкните на свободном месте заготовки (она называется формой) и в ОИ напишите что-нибудь в свойстве Caption. Я, например, написал вот что: "Текстовый редактор "Блокнотик"".
Программу мы русифицировали. Пора создавать сам текстовый редактор. Его основа — поле, куда пользователь может вводить текст. На палитре "Дельфи" есть компонент, который отвечает за подобное поле ввода, — RichEdit. Найдите этот компонент (а размещается он на вкладке Win32), кликните на него, а потом кликните на свободном месте на форме. Невзрачная кнопочка развернется в целое поле ввода. Однако расположено оно абы как. Надо с этим что-то делать. Выделите RichEdit и в ОИ установите свойство Align в alClient. Поле ввода заняло всю свободную площадь на форме. А нам как раз это и надо. Теперь ещё раз выделите RichEdit и в ОИ установите свойство ScroolBars в ssVertical. Это необходимо для того, если пользователь в окне нашего редактора напишет слишком много текста, тогда справа появиться вертикальный ScroolBar. Однако в самом поле уже написана какая-то несуразность. А нам надо, чтобы перед пользователем предстал девственно чистый и готовый к работе лист. За содержимое поля ввода отвечает свойство Lines. В объектном инспекторе щелкните на маленькую кнопку с тремя точками напротив этого свойства и в открывшемся окне удалите все содержимое поля ввода.
Теперь запустите программу. Оказывается, в поле ввода уже можно писать, и при этом работают многие стандартные комбинации клавиш Windows. Теперь нам остается прописать функции сохранения и загрузки текстовых файлов. Внимательно посмотрите на нашу форму. Видите невизуальные компоненты OpenDialog и SaveDialog? Они отвечают за стандартные окна сохранения и загрузки файлов Windows. Благодаря этому нет необходимости создавать соответствующие диалоги.
Но кое-что придется сделать ручками. Ведь окна сохранения и загрузки "не знают" о поле ввода. Надо их как-то связать. А также надо связать все это с кнопками и пунктами меню, которые будут запускать процедуры сохранения и загрузки файлов. Вот этим мы сейчас и займемся.
Дважды щелкните по кнопке сохранения документа нашей заготовки. Откроется новый обработчик события — мышиного клика. И между begin и end (вторыми по счету, после надписи, выделенной синим цветом) пропишите одну-единственную строку:
RichEdit1.Lines.SaveToFile(SaveDialog.FileName);
Разберем эту строку по звеньям. Мы вызываем у свойства Lines объекта RichEdit1 метод SaveToFile, а в качестве параметра передаем ему значение свойства FileName объекта SaveDialog. Вместе эта конструкция сохраняет все строки из RichEdit в текстовый файл. А имя файла мы получаем из свойства FileName. После того как пользователь выбрал или ввел название какого-то файла в диалоге сохранения файла, этот диалог (который по совместительству объект SaveDialog) передает в свойство FileName путь и название этого самого файла. Чтобы вы лучше усвоили все вышесказанное, приведу своеобразную русскую транскрипцию всего содержимого обработчика события
FileSaveAs:
Если Диалог_сохранения запустился, тогда
begin
Поле_ввода1.Строки.Сохранить_в_файл(Диалог_Сохранения.Имя_файла);
end;
Теперь даже человек, не знающий английского языка, поймет, что к чему. Поэтому строчку для открытия текстового файла я приведу без всяких комментариев (вы сами легко разберетесь, что она означает):
RichEdit1.Lines.LoadFromFile(OpenDialog.FileName);
Ее надо прописать в обработчик клика для кнопки открытия файла. Сама кнопка расположена рядом с кнопкой сохранения.
Можете запустить программу. Теперь вы получили полноценный текстовый редактор — можно и писать, и сохранять написанное для потомков, и даже открывать ранее сохраненное.
Но останавливаться только на этом было бы странно. Давайте сделаем текстовый редактор еще более функциональным. Смотрите, сколько еще неработающих кнопок осталось на панели инструментов! Значит, есть над чем поработать.
Кнопка Новый документ все еще не работает. Но это легко поправить. В обработчике события этой кнопки напишите такую строку:
RichEdit1.Clear;
Как понятно из названия, эта команда очищает содержимое поля ввода. Теперь кнопка работает. Вы, наверное заметили, что мы назначаем обработчики только кнопкам. А как быть с одноименными пунктами меню? Оказывается, для них обработчики создавать не надо, так как кнопки и пункты меню связаны особой внутренней логикой "Дельфи".
Обработчик для кнопки Настройка печати уже готов, значит, нам остается назначить обработчик самой кнопке Печать. Создавайте его и между вторыми begin и end пишите:
RichEdit1.Print('Текст редактора "Блокнотик"');
Эта строчка отправляет на печать все содержимое RichEdit1, а в качестве параметра процедуре Print мы передаем заголовок распечатки.
Далее по списку у нас идет кнопка Отмена. Создавайте для нее обработчик и пишите в нем буквально следующее:
with RichEdit1 do if HandleAllocated then SendMessage(Handle, EM_UNDO, 0, 0);
Я сейчас не буду объяснять, как действует эта строчка — пока это будет непонятно. Дело в том, что эта строка затрагивает глубинные механизмы Windows, и ее нельзя вот так просто "разложить по полочкам", как мы лихо поступали с предыдущими командами.
Обработчики для кнопок Вырезать, Копировать и Вставить выглядят следующим образом:
RichEdit1.CutToClipboard;
RichEdit1.CopyToClipboard;
RichEdit1.PasteFromClipboard;