Компоненты 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иRichEdit − Lines, содержащее текст окна в виде списка строк. Начальное значение текста можно установить в процессе проектирования, нажав кнопку с многоточием около свойства 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.Сохраните проект и выполните приложение. Убедитесь в работоспособности приложения, используя матрицы разных и одинаковых (повторным нажатием кнопки Вывод матриц) размеров.