Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прикл_программир_ч1.doc
Скачиваний:
6
Добавлен:
18.09.2019
Размер:
11.05 Mб
Скачать

5.3 Многострочные окна редактирования Memo и RichEdit

Компоненты Memo и RichEdit являются окнами редактирования многострочного текста. В компоненте Memo формат всего текста одинаков и определяется свойством Font. Компонент RichEdit работает с текстом в формате RTF, который позволяет выбирать различные атрибуты форматирования для разных фрагментов текста. При желании изменить атрибуты вновь вводимого фрагмента текста можно задать свойство SelAttributes. Это свойство , в свою очередь имеет подсвойства: Color (цвет), Name (имя шрифта), Size (размер), Style (стиль) и ряд других. Установленные атрибуты шрифта влияют на выделенный текст, если же текст не выделен ,то эти атрибуты начинают действовать на вновь вводимый текст. За выравнивание , отступы и другие атрибуты в пределах текущего абзаца отвечает свойство Paragraph , которое в свою очередь имеет ряд подсвойств:

Alignment - определяет выравнивание текста;

FirstIndent - число пикселей отступа красной строки;

Numbering - управляет вставкой маркеров, как в списках;

LeftIndent - отступ в пикселях от левого поля;

RightIndent - отступ в пикселях от правого поля;

TabCount - количество позиций табуляции;

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

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

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

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

RichEdit1->Paragraph->Alignment:=taRightJustify;// Вправо

Перечисленные свойства отличают компонент RichEdit от компонента Memo. Общими для этих компонентов являются следующие основные свойства :

Alignment - определяет способ выравнивания текста внутри компонента - по левому краю, правому краю, центру. Значение по умолчанию - по левому краю.

Font - определяет атрибуты шрифта.

Lines - это свойство доступное как при проектировании, так и во время выполнения, имеет множество свойств и методов типа TStrings, которые обычно используются для формирования и редактирования текста.

MaxLength - указывает максимальное количество символов, которое пользователь может вводить в компонент.

Modified - указывает, редактировался ли пользователем текст в компоненте.

PopupMenu - определяет появление всплывающего меню, связанного с данным компонентом.

ReadOnly - указывает, может ли пользователь изменять текст в компоненте.

SelLength, SelStart, SelText – имеют те же значения , что и компоненте Edit.

Text - текст окна в виде одной строки

WantTabs - указывает, можно ли вставить в текст символы табуляции

WordWrap - указывает, переносится ли текст на новую строку, если он превышает ширину компонента.

Элементами списка строк в компонентах Memo и RichEdit можно манипулировать ,используя следующие типовые методы свойства Lines :

Add ( ) – добавляет новую текстовую строку к концу списка и возвращает номер добавленной сроки.

Append( ) – добавляет новую текстовую строку к концу списка.

Clear( ) – очищает список.

Delate( ) - удаляет элемент с указанным номером.

Insert( ) – вставляет текстовую строку в позицию с указанным номером.

Move( )- перемещает элемент из одной позиции в другую.

LoadFromFile( ) – выгружает список из файла.

SaveToFile ( ) – загружает список в файл.

Примеры использования основных свойств и методов многострочных редакторов представлены на рисунках 5.5 –5.8. На рисунке 5.5 показан внешний вид интерфейса, а программный код этого приложения приведен на рисунке 5.6.

Обозначения, принятые в приложении, и свойства используемых компонентов, установленные во время проектирования, поясняются в таблице 5.3. В приложение включены три многострочных окна редактирования (текстовых поля) Memo. Первое из них(Memo1) используется для ввода исходного текста, второе(Memo2) – для отображения изменений исходного текста в результате переключения радио кнопок (RadioButton1 – RadioButton8), а третье (Memo3) – для демонстрации операторов кода при выполнении программы. Назначение остальных компонентов приложения понятно из интерфейса (рис.5.5) и не требует дополнительных пояснений.

Таблица 5.3

Компонент

Свойство

Значение

Форма

Caption

Основные свойства текстового поля Memo

Кнопка

Name

Button1

Caption

Ввод текста

Радио кнопки

Caption

Ввод новой строки текста

Caption

Перенос всего текста в Поле2

Caption

Считывание выделенной строки

Caption

Помещение выделенной строки в нач.списка

Caption

Удаление 3-ей строки

Сaption

Замена местами 2-ой и 4- ой строк

Caption

Запись

Caption

Считывание

Метки

Caption

Поле1

Caption

Поле2

Caption

Код программы

Многострочное окно редактиров.

Name

Memo1

Name

Memo2

Name

Memo3

Другие свойства компонентов принимаются по умолчанию.

Рис.5.5. Интерфейса приложения, демонстрирующего свойства и методы

компонента Memo

// Программный код приложения, демонстрирующего свойства и методы компонента //Memo

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton1Click(TObject *Sender)//Ввод новой строки текста

{

Memo1->Lines->Append("Дополнительная строка");

//Запись оператора в текстовое поле Memo3

Memo3->Lines->Append ("Memo1->Lines->Append(Дополнительная строка); " );

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton2Click(TObject *Sender)

//Перенос всего текста в поле Memo2

{

Memo2->Text=Memo1->Text;

//Запись оператора в текстовое поле Memo3

Memo3->Lines->Append ("Memo2->Text=Memo1->Text;"); }

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{

Memo2->Lines->Add(Memo1->SelText); )//Считывание выделенной строки

//Запись оператора в текстовое поле Memo3

Memo3->Lines->Append ("Memo2->Lines->Add(Memo1->SelText); " );

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton4Click(TObject *Sender)

{

//Помещение выделенной строки в начало списка

Memo2->Lines->Insert(0,Memo1->SelText);

//Запись оператора в текстовое поле Memo3

Memo3->Lines->Append (" Memo2->Lines->Insert(0,Memo1->SelText);");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton5Click(TObject *Sender)

{

Memo1->Lines->Delete(2);// )//Удаление 3 - строки списка

//Запись оператора в текстовое поле Memo3

Memo3->Lines->Append ( "Memo1->Lines->Delete(2); ");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton6Click(TObject *Sender)

{

Memo1->Lines->Move(1,3);//Замена местами 2- ой и 4-ой строк

//Запись оператора в текстовое поле Memo3

Memo3->Lines->Append (" Memo1->Lines->Move(1,3);");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Memo1->Clear();//Очистка текстового поля Memo1

Memo1->Lines->Add("Этот текст записывается в файл");//Ввод в текстовое поле Memo1 //нового текста

//Запись оператора в текстовое поле Memo3

Memo3->Lines->Add("Memo1->Lines->Add(Этот текст записывается в файл)");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton7Click(TObject *Sender)

{

Memo1->Lines->SaveToFile("n"); // Загружает список в файл.

//Запись оператора в текстовое поле Memo3

Memo3->Lines->Add(" Memo1->Lines->SaveToFile(n)");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton8Click(TObject *Sender)

{

Memo2->Lines->LoadFromFile("n");// Выгружает список из файла.

//Запись оператора в текстовое поле Memo3

Memo3->Lines->Add(" Memo2->Lines->LoadFromFile(n)");

}

//---------------------------------------------------------------------------–

Рис.5.6 Программный код приложения, демонстрирующего свойства и методы

компонента Memo

Программный код( Рис.5.6) на базе исходного текста позволяет демонстрировать основные свойства и методы многострочного окна редактирования Memo. Запускающим ключом для демонстрации каждого свойства(метода) является событие OnClick (включение радио кнопки ), а операторы программного кода ,реализующие то или иное свойство ( метод ) отображаются в окне редактирования Memo3. Листинг программного кода снабжен подробными комментариями и не требует дополнительных пояснений.

Внешний вид интерфейса приложения, позволяющего демонстрировать свойства и методы компонента RichEdit показан на рисунке 5.7, а программный код этого приложения приведен на рисунке 5.8. Обозначения, принятые в приложении, и свойства используемых компонентов, установленные во время проектирования, поясняются в таблице 5.4. В приложение включены три многострочных окна редактирования . Первое из них(Memo1) используется хранения исходного текста, второе(Memo2) – для демонстрации операторов кода при выполнении программы , а третье (RichEdit1) – для иллюстрации свойств и методов. На ряду с тремя кнопками типа Button , шестью радио кнопками типа RadioButton в приложении задействован и невидимый компонент- FontDialog1, с помощью которого осуществляется изменение параметров шрифта в окне редактирования RichEdit1. Назначение остальных компонентов приложения понятно из интерфейса (рис.5.7) и не требует дополнительных пояснений.

Таблица 5.4

Компонент

Свойство

Значение

Форма

Caption

Основные свойства поля RichEdit

Кнопки

Caption

Копирование текста(Button1)

Caption

Атрибуты шрифта(Button2)

Caption

Передача фокуса(Button3)

Радио кнопки

Caption

Абзац влево(RadioButton1)

Caption

Абзац по центру(RadioButton2)

Caption

Абзац вправо(RadioButton3)

Caption

Строка в начало текста(RadioButton4)

Сaption

Стока на 4-ой позиции(RadioButton5)

Caption

Удаление текста(RadioButton6)

Диалог выб.шрифта

Name

FontDialog1

Метки

Caption

Поле Memo1

Caption

Поле RichEdit1

Caption

Строки кода

Многострочное окно редактиров.

Name

Memo1

Name

Memo2

Name

RichEdit1

Другие свойства компонентов принимаются по умолчанию.

Рис.5.7. Интерфейс приложения, демонстрирующего свойства и методы

компонента RichEdit

// Программный код приложения, демонстрирующего свойства и методы компонента //RichEdit

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Memo1->Lines->SaveToFile("Text.RTF");//Запись содержимого поля Memo1 в файл

RichEdit1->Lines->LoadFromFile( "Text.RTF");//Загрузка поля RichEdit1 из файла

//Занесение операторов программного кода в поле Memo2

Memo2->Lines->Add("Memo1->Lines->SaveToFile(Text.RTF)");

Memo2->Lines->Add("RichEdit1->Lines->LoadFromFile( Text.RTF)");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)//Изменение атрибутов шрифта

{

if (FontDialog1->Execute())

RichEdit1->SelAttributes->Assign( FontDialog1->Font);

RichEdit1->SetFocus();

//Занесение операторов программного кода в поле Memo2

Memo2->Lines->Add(" if (FontDialog1->Execute())");

Memo2->Lines->Add(" RichEdit1->SelAttributes->Assign( FontDialog1->Font);");

Memo2->Lines->Add(" RichEdit1->SetFocus();");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton1Click(TObject *Sender)

{

RichEdit1->Paragraph->Alignment= taLeftJustify;//Перемещение выделенного абзаца влево

//Занесение операторов программного кода в поле Memo2

Memo2->Lines->Add(" RichEdit1->Paragraph->Alignment= taLeftJustify;");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton2Click(TObject *Sender)

{

RichEdit1->Paragraph->Alignment= taCenter;//Расположение, выделенного абзаца по //центру

//Занесение операторов программного кода в поле Memo2

Memo2->Lines->Add(" RichEdit1->Paragraph->Alignment= taCenter;");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{

RichEdit1->Paragraph->Alignment= taRightJustify;//Расположение, выделенного абзаца //справа

//Занесение операторов программного кода в поле Memo2

Memo2->Lines->Add("RichEdit1->Paragraph->Alignment= taRightJustify;");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton4Click(TObject *Sender)//Занесение новой строки на //первое в начало текста

{

RichEdit1->Lines->Insert(0,"Новая строка,помещаемая в начало текста");

//Занесение операторов программного кода в поле Memo2

Memo2->Lines->Add("RichEdit1->Lines->Insert(0,Новая строка,помещаемая в начало текста)");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton5Click(TObject *Sender)// Занесение новой строки на

// 4-ю позицию

{

RichEdit1->Lines->Insert(3,"Строка помещается на 4-ю позицию ");

//Занесение операторов программного кода в поле Memo2

Memo2->Lines->Add(" RichEdit1->Lines->Insert(3,Строка помещается на 4-ю позицию )");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton6Click(TObject *Sender)

{

RichEdit1->Clear();//Очистка поля RichEdit1

//Занесение операторов программного кода в поле Memo2

Memo2->Lines->Add(" RichEdit1->Clear();");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

RichEdit1->SetFocus();//Передача фокуса полю RichEdit1

//Занесение операторов программного кода в поле Memo2

Memo2->Lines->Add("SetFocus();”);

}

//---------------------------------------------------------------------------

Рис.5.8 Программный код приложения, демонстрирующего свойства и методы

компонента RichEdit

В программный коде( Рис.5.8) при щелчке по кнопке Button1, будет реализован обработчик этого события, и произойдет копирование текста из компонента Memo1 в компонент RichEdit1.При щелчке по кнопке Button2 будет реализовано событие по вызову диалога FontDialog1, с помощью которого осуществляется изменение параметров шрифта. Различные элементы редактирования фрагментов текста реализуются при включении радио кнопок RadioButton1 - RadioButton6. Операторы программного кода ,соответствующие каждому событию отображаются в окне редактирования Memo2. Основные операторы программного кода снабжены подробными комментариями, поясняющими их назначение.

События компонентов Memo и RichEdit , в основном , такие же как и у однострочного редактора Edit. В многострочных редакторах они используются крайне редко.