Компоненты Memo, RichEdit

Компоненты MemoиRichEditявляются окнами редактирования многострочного текста. Рассмотрим сначала основные отличия компонентов.

В Memo формат (шрифт, его атрибуты, выравнивание) одинаков для всего текста и определяется свойством Font.

RichEdit работает с текстом в обогащенном формате RTF. Атрибуты вновь вводимого фрагмента текста можно задать свойством SelAttributes, которое имеет подсвойства: Color(цвет), Name (имя), Size (размер), Style (стиль) и др. Устанавливаемые атрибуты влияют на выделенный текст или, если ничего не выделено, на атрибуты нового текста, вводимого, начиная с текущей позиции курсора (определяется свойством SelStart). В RichEdit есть также свойство DefAttributes (доступно только во время выполнения), содержащее атрибуты по умолчанию, которые действуют, пока не изменятся атрибуты в свойстве SelAttributes. Но значения атрибутов в DefAttributes сохраняются и в любой момент могут быть методом Assign присвоены атрибутам свойства SelAttributes, чтобы вернуться к прежнему стилю.

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

 

Alignment Определяет выравнивание текста. Может принимать значения taLeftJustify(влево), taCenter (по центру) или taRightJustify(вправо)
FirstIndent Число пикселов отступа красной строки.
Numbering Управляет вставкой маркеров, как в списках. Может прини-мать значения nsNone − отсутствие маркеров, nsBullet − мар-керы ставятся
LeftIndent Отступ в пикселах от левого поля
RightIndent Отступ в пикселах от правого поля
TabCount Количество позиций табуляции
Tab Значения позиций табуляции в пикселах

 

Значения подсвойств свойства Paragraph можно задавать только в процессе выполнения приложения, например при нажатии кнопки.

Теперь рассмотрим общее основное свойство MemoиRichEditLines, содержащее текст окна в виде списка строк. Начальное значение текста можно установить в процессе проектирования, нажав кнопку с многоточием около свойства Lines в окне Инспектора Объектов. В открывшемся окне Редактор строки списка можно редактировать или вводить текст.

Во время выполнения приложения можно заносить текст в окно с помощью методов свойства Lines.

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

Доступ к отдельной строке текста, например первой, можно получить так: Memo1->Lines->String[0].

Свойство только для чтения Count указывает число строк в тексте.

Для очистки текста в окне используется функция Clear().

Для занесения новой строки в конец текста окна редактирования пользуются методами Add или Append свойства Lines.

Для работы с файлом используются методы LoadFromFile и SaveToFile. Например,

RichEdit1->Lines->LoadFromFile(“text.rtf”);

RichEdit1->Lines->SaveToFile(“text.rtf”);

Рассмотрим использование компонентов MemoиRichEdit на примере работы с двумерным массивом (матрицей) чисел.

1.Создайте новый проект и сразу сохраните файл модуля и проект под разными именами в созданной ранее папке.

2.В верхней части формы, слева поместите окно LabeledEdit1. У свойства EditLabel зачистите значение подсвойства Caption.

3.Правее поместите кнопку Button1. В свойство Caption впишите Ввод размеров матрицы (<=10).

4.Ниже поместите вторую кнопку Button2 и зачистите у нее свойство Caption.

5.Ниже, на одной горизонтали поместите окна Memo1иRichEdit1 и сделайте их размеры равными и достаточными для размещения двух матриц из двузначных чисел, размерами 10x10. Для обоих окон установите имя шрифта Courier (символы этого шрифта равны по ширине).

6.Впишите обработчики щелчков кнопок, как показано ниже:

int k=0,n,m;

void __fastcall TForm1::Button1Click(TObject *Sender)

{ if(k==0) {LabeledEdit1->EditLabel->Caption="Число строк=";

LabeledEdit1->SetFocus();

}

if(k==1) {n=StrToInt(LabeledEdit1->Text);

LabeledEdit1->EditLabel->Caption="Число столбцов=";

LabeledEdit1->SetFocus();

}

if(k==2) {m=StrToInt(LabeledEdit1->Text);

LabeledEdit1->EditLabel->Caption="Размер матрицы : " +

IntToStr(n)+" x "+IntToStr(m);

LabeledEdit1->Text="";

Button2->Caption="Вывод матриц";

}

if(k==0||k==1)k++;

else k=0;

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

int x[10][10],i,j;

Memo1->SetFocus();

AnsiString s[10][10],s1[10],s2[10];

Memo1->Clear();

Memo1->Lines->Add("ИСХОДНАЯ МАТРИЦА");

for(i=0;i<n;i++){

s1[i]="";

for(j=0;j<m;j++){

x[i][j]=random(101)-50;

if(x[i][j]<-9) s[i][j]=" "+IntToStr(x[i][j]);

else if(x[i][j]<0||x[i][j]>9) s[i][j]=" "+IntToStr(x[i][j]);

else s[i][j]=" "+IntToStr(x[i][j]);

s1[i]+=s[i][j];}

Memo1->Lines->Add(s1[i]);}

Memo1->Lines->Add("");

Memo1->Lines->Add("ТРАНСПОНИРОВАННАЯ МАТРИЦА");

for(j=0;j<m;j++){

s2[j]="";

for(i=0;i<n;i++)

s2[j]+=s[i][j];

Memo1->Lines->Add(s2[j]);}

RichEdit1->SetFocus();

RichEdit1->Clear();

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

RichEdit1->Paragraph->Alignment=taCenter;

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

RichEdit1->SelAttributes->Style =

RichEdit1->SelAttributes->Style << fsBold;

RichEdit1->Lines->Add("ИСХОДНАЯ МАТРИЦА");

/*восстановление атрибутов по умолчанию*/

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

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

RichEdit1->Paragraph->Alignment=taLeftJustify;

for(i=0;i<n;i++)RichEdit1->Lines->Add(s1[i]);

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

/*установка размера шрифта*/

RichEdit1->SelAttributes->Size=12;

/*установка цвета шрифта*/

RichEdit1->SelAttributes->Color= clHotLight;

/*установка стиля шрифта fsItalic*/

RichEdit1->SelAttributes->Style=

RichEdit1->SelAttributes->Style<<fsItalic;

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

RichEdit1->Paragraph->Alignment=taCenter;

RichEdit1->Lines->Add("ТРАНСПОНИРОВАННАЯ МАТРИЦА");

/*восстановление атрибутов по умолчанию*/

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

for(j=0;j<m;j++)RichEdit1->Lines->Add(s2[j]);

}

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

7.Сохраните проект и выполните приложение. Убедитесь в работоспособности приложения, используя матрицы разных и одинаковых (повторным нажатием кнопки Вывод матриц) размеров.