Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РАБ_C++BUILDER.doc
Скачиваний:
100
Добавлен:
02.06.2015
Размер:
7.07 Mб
Скачать

Компоненты 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]);

}

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

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