Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л5.doc
Скачиваний:
13
Добавлен:
30.10.2018
Размер:
208.38 Кб
Скачать

4. Багаторядкові вікна редагування Memo і RichEdit

Компоненти Memo і RichEdit є вікнами редагування багаторядкового тексту. Вони так само, як і вікно Edit, забезпечені багатьма функціями, властивими більшості редакторів.

У компоненті Memo формат (шрифт, його атрибути, вирівнювання) однаковий для всього тексту і визначається властивістю Font. Якщо ви збережете у файлі текст, введений або відредагований користувачем, то буде створений текстовий файл, що містить тільки символи, і що не містить елементів форматування. При подальшому читанні цього файлу в Memo формат визначатиметься поточним станом властивості Font компоненту Memo, а не тим, в якому форматі раніше вводився текст.

Компонент RichEdit працює з текстом в збагаченому форматі RTF. При бажанні змінити атрибути фрагмента тексту, ви можете задати властивість SelAttributes, Ця властивість типу TTextAttributes, яка в свою чергу має підвластивості: Color (колір), Name (ім'я шрифту), Size (розмір), Style (стиль) і ряд інших, що дозволяє форматувати фрагменти тексту різними шрифтами, розмірами, кольорами, стилями. Встановлювані атрибути впливають на виділений текст або, якщо нічого не виділено, то на атрибути нового тексту, що вводиться починаючи з поточної позиції курсору (позиція курсору визначається властивістю SelStart).

У компоненті є також властивість Def Attributes, що містить атрибути за умовчанням. Ці атрибути діють до того моменту, коли змінюються атрибути у властивості SelAttributes. Але значення атрибутів в DefAttributes зберігаються і у будь-який момент ці значення можуть бути методом Assign привласнені атрибутам властивості SelAttributes, щоб повернутися до колишнього стилю.

Властивість DefAttributes доступно тільки під час виконання. Тому її атрибути при необхідності можна задавати, наприклад, в обробнику події OnCreate.

За вирівнювання, відступи і т.д. в межах поточного абзацу відповідає властивість Paragraph типу TParaAttributes. Цей тип в свою чергу має ряд властивостей:

Alignment - визначає вирівнювання тексту. Може приймати значення taLeftJustify (вліво), taCenter (по центру) або taRightJustify (управо).

FirstIndent - число пікселів відступу абзацу.

Numbering - управляє вставкою маркерів, як в списках. Може приймати значення nsNone — відсутність маркерів, nsBullet — маркери ставляться.

Leftlndent - відступ в пікселах від лівого поля;

Rightlndent - відступ в пікселах від правого поля.

TabCount - Кількість позицій табуляції.

Tab - Значення позицій табуляції в пікселах.

Значення підвластивостей властивості Paragraph можна задавати тільки в процесі виконання програми, наприклад, в події створення форми або при натисненні якої-небудь кнопки. Значення підвластивостей властивості Paragraph відносяться до того абзацу, в якому знаходиться курсор. Наприклад, кожний з наступних операторів здійснить відповідне вирівнювання поточного абзацу:

RichEdit1->Paragraph->Alignment = taLeftJustify;//Вліво

RichEdit1->Paragraph->Alignment = taCenter;//По центру

RichEdit1->Paragraph->Alignment = taRightJustifу;//Управо

Наступний оператор приведе до того, що поточний абзац відображатиметься як список, тобто з маркерами:

RichEdit1->Paragraph->Numbering = nsBullet;

Знищення списку в поточному абзаці здійснюється оператором

RichEdit1->Paragraph->Numbering = nsNone;

Властивості TabCount і Tab мають сенс при введенні тексту тільки при значенні властивості компоненту WantTabs true. Ця властивість дозволяє користувачу вводити в текст символ табуляції. Якщо WantTabs = false, те натиснення користувачем клавіші табуляції просто перемкне фокус на черговий компонент і символ табуляції в текст не введеться.

Ми розглянули основні відмінності Memo і RichEdit. Тепер зупинимося на загальних властивостях цих вікон редагування.

Властивості Alignment і Wordwrap мають той же смисл, що, наприклад, в мітках, і визначають вирівнювання тексту і допустимість перенесення довгих рядків. Установка властивості ReadOnly в true задає текст тільки для читання. Властивість MaxLength визначає максимальну довжину тексту, що вводиться. Якщо MaxLength = 0, то довжина тексту не обмежена.

Властивості WantReturns і WantTab визначають допустимість введення користувачем в текст символів переведення рядка і табуляції.

Властивість ScrollBars визначає наявність смуг прокрутки тексту у вікні. За умовчанням ScrollBars = ssNone, що означає їх відсутність. Користувач може в цьому випадку переміщатися по тексту тільки за допомогою курсору. Можна задати властивості ScrollBars значення ssHorizontal, ssVertical або ssBoth, що відповідно означатиме наявність горизонтальної, вертикальної або обох смуг прокрутки. Вікна Memo і RichEdit по-різному реагують на завдання смуг прокрутки. У Memo завдання цих смуг означає, що вони з'являються незалежно від розміру тексту у вікні. А в RichEdit смуги з'являються автоматично тільки в тих випадках, коли текст не поміщається у вікні.

Основна властивість вікон Memo і RichEdit Lines, що містить текст вікна у вигляді списку рядків і що має тип TStrings. Початкове значення тексту можна встановити в процесі проектування, натиснувши кнопку з багатокрапкою біля властивості Lines у вікні Інспектора Об'єктів. Перед вами відкриється вікно редагування списків рядків. Ви можете редагувати або вводити текст безпосередньо в цьому вікні, або натиснути кнопку CodeEditor і працювати в звичайному вікні Редактора Коду.

Під час виконання програми ви можете заносити текст у вікно редагування за допомогою методів властивості Lines типу TStrings.

Весь текст, представлений одним рядком типу String, усередині якої використовуються роздільники типу символів повернення каретки і переведення рядка, міститься у властивості Text.

Доступ до окремого рядка тексту ви можете одержати за допомогою властивості AnsiString Strings [int Index]. Індекси, як і скрізь в C++Builder, починаються з 0. Отже Memo1 ->Lines ->Strings[0] — це текст першого рядка.

Властивість тільки для читання Count указує число рядків в тексті.

Для очищення тексту у вікні треба виконати процедуру Clear. Цей метод відноситься до самого вікна, а не до його властивості Lines.

Для занесення нового рядка в кінець тексту вікна редагування можна скористатися методами Add або Append властивості Lines. Для завантаження тексту з файлу застосовується метод LoadFromFile. Збереження тексту у файлі здійснюється методом SaveToFile.

Наприклад:

Memo1->Clear ();

Memo1->Lines->Add("ХАРАКТЕРИСТИКА");

Memol->Lines->Add("Співробітник "+Edit1->Text);

Memol->SetFocus ();

У компоненті RichEdit той же фрагмент може виглядати інакше. Можна, наприклад, рядки «Характеристика» і «Співробітник» виділити жирним шрифтом і вирівняти по центру, після чого повернутися до стилю за умовчанням. Код, що виконує подібні операції, може мати вигляд:

RichEdit->Clear ();

/*установка вирівнювання по центру*/

RichEdit1-> Paragraph->Alignment = taCenter;

/*установка жирного шрифту*/

RichEdit1->SelAttributes->Style=RichEdit1->SelAttributes->Style= fsBold;

RichEdit1->Lines->Add("XАРАКТЕРИСТИКA" );

RichEdit1->Lines->Add("Співробітник "+Edit1->Text);

/*відновлення атрибутів за умовчанням*/

RichEdit1->SelAttributes->Assign{RichEdit1->DefAttributes);

/* установка вирівнювання по лівому краю*/

RichEdit1->Paragraph->Alignment = taLeftJustify;

RichEdit1->SetFocus();

Завантаження у вікно RichEdit1 тексту з файлу може здійснюватися командою

RichEdit1->Lines->LoadFromFile("text.rtf") ;

Збереження тексту у файлі може здійснюватися командою

RichEditl->Lines->SaveToFile("text.rtf");

Властивість SelStart компонентів Memo і RichEdit указує позицію курсора в тексті або початок виділеного користувачем тексту.

Властивість CaretPos указує на структуру, поле X якої, містить індекс символу в рядку, перед яким розташований курсор, а поле Y — індекс рядка, в якому знаходиться курсор. Таким чином, враховуючи, що індекси починаються з 0, значення

RichEdit1->CaretPos.y + 1

і

RichEdit1->CaretPos.x + 1 визначають відповідно номер рядка і символу в ній, перед яким розташований курсор.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]