Пишемо текстовий редактор, уроки, статті, програмування - програмування c, delphi, c #
Курс початківця програміста в Дельфі
Для цього ми скористаємося властивістю Align нашого компонента. Необхідно встановити його в alClient. Це дозволить нам добитися бажаного ефекту.
У компоненті RichEdit при установці вже міститься один рядок тексту (за замовчуванням це ім'я новоствореного компонента), багатьом це не сподобається. Тому ми зараз її звідти видалимо. За відображення тексту в компоненті відповідає властивість Lines типу TStrings. Це щось на зразок масиву рядків, так як кожен рядок має свій порядковий номер (відлік починається з нуля). Щоб змінити, наприклад, перший рядок, Ви повинні написати так:
Треба придумати яку-небудь назву вашої нової програми і розмістити його в заголовок форми. За відображення форми відповідає властивість Caption, тому прямо в інспектор об'єктів змініть це значення. (Не забудьте перед цим вибрати форму).
Тепер нам треба створити панель інструментів (ToolBar), на якій будуть розташовуватися кнопки швидкого виклику команд (наприклад, Відкрити, Зберегти і т.д.). Для цього розташуйте на формі компонент Panel (вкладка Standart палітри компонентів). Зітріть у неї властивість Caption. Тепер треба зробити, щоб панель розташовувалася завжди у верхній частині вікна. Встановіть властивість панелі - Align рівним alTop.
Ми тільки що створили платформу, на якій будуть знаходитися кнопки. Розмістимо і їх на нашій панелі. Поки обійдемося двома кнопками (Button). Властивість Caption першої панелі зробіть рівним Відкрити, другий - Зберегти.
Щоб нам відкривати і зберігати текстові файли нам знадобляться ще два компоненти, це OpenDialog і SaveDialog. Обидва знаходяться на вкладці Dialogs. Це невізуальні компоненти і їх не буде видно під час роботи програми, тому розміщуйте їх в будь-який зручний місце вашої форми.
Ну ось підготовчі роботи закінчені і Вас повинно вийти приблизно це:
Я не став поміщати всю картинку цілком, так як це зайняло б багато місця, до того ж там немає нічого цікавого!
procedure TForm1.Button1Click (Sender: TObject);
begin
Весь код потрібно помістити між Begin і End. Цей код дуже простий і виглядає приблизно так:
if OpenDialog1.Execute then
RichEdit1.Lines.LoadFromFile (OpenDialog1.Filename);
Тут нічого складного немає. Але якщо ви запустите програму і при запуску діалогу відкриття файлу виберіть НЕ текстовий файл, то відбудеться помилка. Щоб її уникнути треба дозволити користувачу вибирати тільки текстові файли. Для це скористаємося властивістю Filter компонента OpenDialog.
Додамо ще фільтр для форматованих файлів (тобто Rich Text Format). Для цього в другій сходинці в поле Filter Name напишіть Форматований текст, а в поле FIlter - * .rtf. Якщо вам захочеться додати в фільтр для будь-яких типів файлів, то в поле фільтр треба написати *. *
Малюнок 3. Вікно Filter Editor.
До речі у компонентів SaveDialog і OpenDialog є одна корисна властивість DefaultExt. Це розширення за замовчуванням. Бажано зробити його рівним * .txt в обох компонентів.
Тепер напишемо процедуру збереження файлу (обробки натискання на другу кнопку). Клацніть два рази на другій кнопці щоб отримати доступ до процедури обробки кліка на цю кнопку. І впишіть туди такий код:
if SaveDialog1.Execute then
RichEdit1.Lines.SaveToFile (SaveDialog1.Filename);
Таким чином код процедури обробки клацання на другий кнопці буде таким:
procedure TForm1.Button2Click (Sender: TObject);
begin
if SaveDialog1.Execute then
RichEdit1.Lines.SaveToFile (SaveDialog1.Filename);
end;
А код всієї програми буде мати приблизно такий вигляд:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class (TForm)
RichEdit1: TRichEdit;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure Button1Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
private
public
end;
var
Form1: TForm1;
procedure TForm1.Button1Click (Sender: TObject);
begin
if OpenDialog1.Execute then
RichEdit1.Lines.LoadFromFile (OpenDialog1.Filename);
end;
procedure TForm1.Button2Click (Sender: TObject);
begin
if SaveDialog1.Execute then
RichEdit1.Lines.SaveToFile (SaveDialog1.Filename);
end;
ssNone - смуги прокрутки не відображаються
ssBoth - є як горизонтальна, так і вертикальна смуга
ssVertical - тільки вертикальна смуга
ssHorizontal - тільки горизонтальна смуга
Виберіть ssVertical - це забезпечить нам поява вертикальної смуги прокрутки при редагуванні великих текстів.
Значок компонента FontDialog.
Для цього встановимо його на форму. До того ж нам знадобиться ще і кнопка, щоб викликати це діалогове вікно. Поставимо на форму і її. Задайте її властивість Caption рівним Шрифт. А в обробнику події OnCLick напишіть:
if FontDialog1.Execute then
RichEdit1.SelAttributes.Assign (FontDialog1.Font);
Цей код дозволить за допомогою діалогового вікна налаштування шрифту змінять шрифт для кожного окремого абзацу, слова, символу або всього тексту.
На малюнку 4 наведено вигляд програми після додавання третьої кнопки і компонента FontDialog.
В наш проект потрібно додати ще дуже багато функцій, а тому і кнопок, але місце на жаль, у нас обмежена. Але ми вирішимо цю проблему за допомогою використання в нашій програмі системного і спливаючого меню.
Далі частини займемося розробкою системного меню нашої програми.
Як вже говорилося в кінці минулого розділу зараз займаємося розробкою головного меню нашого застосування! Для цього ми скористаємося компонентом MainMenu, який розташований на вкладці Standart палітри компонентів.
Значок компонента MainMenu.
Відповідно поля Інспектори Об'єктів теж зміняться. Написавши у властивості Caption виділеного елемента ви тим самим змінюєте напис на ньому. Нам знадобиться така структура меню:
На малюнку 18 наведено вид нашого меню. Його зовсім не складно буде створити!
procedure TForm1.N2Click (Sender: TObject);
begin
Тепер між begin і end треба написати код. Але тут є одна маленька хитрість: звичайно, можна було б скопіювати код з оброблювача події OnClick для першої кнопки, але це не зовсім зручно і не раціонально. Уявіть якщо у вас безліч кнопок і стільки ж пунктів меню. По-перше розмір програми збільшується вдвічі, а по-друге раптом вам знадобитися що-небудь змінити. Тоді доведеться все перебирати виправляючи код.
Виконайте те ж з пунктами меню "Шрифт" і "Зберегти".
Тепер напишемо обробник натискання на пункт меню "Вихід". Для завершення роботи програми досить викликати метод Close головної форми. Оскільки форма у нас одна, вона і є головною. І ще, якщо властивість відноситься до форми, то в коді можна не писати ім'я форми. Тобто закрити нашу програму можна так:
Якщо ви звернули увагу в меню правка знаходяться пункти Копіювати, Вставити і Вирізати. Реалізувати ці функції дуже просто:
Змініть там інформацію на свій смак. І в обробник події кнопки з написом Ok (OKButton) напишіть тільки одне слово: Close;
Тепер перейдіть до нашої основної формі, створіть обробник події OnClick для пункту меню Про програму. Туди треба написати:
Тепер запустіть програму. Перед вами з'явиться повідомлення про те, що форма AboutBox не оголошена в секції uses. Дайте відповідь на запит позитивно.
Наводжу весь код повністю:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls, Menus;
type
TForm1 = class (TForm)
RichEdit1: TRichEdit;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button3: TButton;
FontDialog1: TFontDialog;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
procedure Button1Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure N2Click (Sender: TObject);
procedure N3Click (Sender: TObject);
procedure N9Click (Sender: TObject);
procedure N6Click (Sender: TObject);
procedure N7Click (Sender: TObject);
procedure N8Click (Sender: TObject);
procedure N11Click (Sender: TObject);
private
public
end;
var
Form1: TForm1;
procedure TForm1.Button1Click (Sender: TObject);
begin
if OpenDialog1.Execute then
RichEdit1.Lines.LoadFromFile (OpenDialog1.Filename);
end;
procedure TForm1.Button2Click (Sender: TObject);
begin
if SaveDialog1.Execute then
RichEdit1.Lines.SaveToFile (SaveDialog1.Filename);
end;
procedure TForm1.Button3Click (Sender: TObject);
begin
if FontDialog1.Execute then
RichEdit1.SelAttributes.Assign (FontDialog1.Font);
end;
procedure TForm1.N2Click (Sender: TObject);
begin
button1.OnClick (self);
end;
procedure TForm1.N3Click (Sender: TObject);
begin
button2.OnClick (self);
end;
procedure TForm1.N9Click (Sender: TObject);
begin
button3.OnClick (self);
end;
procedure TForm1.N7Click (Sender: TObject);
begin
RichEdit1.PasteFromClipboard;
end;
procedure TForm1.N8Click (Sender: TObject);
begin
RichEdit1.CutToClipboard;
end;
procedure TForm1.N11Click (Sender: TObject);
begin
AboutBox.showmodal;
end;