- •В.В. Чуркин
- •Содержание
- •Ознакомление с Интегрированной Средой Разработки (иср)
- •Основное окно иср
- •Библиографический список
- •Занятие 1 Формы и компоненты Включение в проект новой формы
- •Размещение компонентов на форме
- •Депозитарий – хранилище форм и проектов
- •Задание 7. Опробовать режимы заимствования форм из Депозитария
- •Контрольные вопросы
- •Библиографический список
- •Занятие 2 Отладка приложений Компиляция и компоновка проекта
- •Сообщения компилятора и компоновщика
- •Действия в случае ошибки выполнения
- •Дальнейшие действия
- •Окно наблюдения Список Часов
- •Окно оценки и модификации Оценить|Изменить
- •Пошаговое выполнение приложения
- •Точки прерывания
- •Использование окна Инспектора Отладки
- •Другие средства отладки
- •Контрольные вопросы
- •Библиографический список
- •Занятие 3 Компоненты ввода и отображения текстовой информации
- •Компоненты Label, StaticText, Panel
- •Компоненты Edit, LabeledEdit, MaskEdit
- •Компоненты Memo, RichEdit
- •Компоненты ListBox, CheckListBox, ValueListEditor
- •Компонент StringGrid
- •Контрольные вопросы
- •Библиографический список
- •Занятие 4 Диаграммы и графики Компонент Chart
- •Компонент Image
- •Контрольные вопросы
- •Библиографический список
- •Контрольные вопросы
- •Библиографический список
- •Формирование квадратных матриц
- •Контрольные вопросы
- •Библиографический список
- •Кнопки, индикаторы, управляющие элементы
- •Управляющие кнопки Button и BitBtn
- •Кнопка с фиксацией SpeedButton
- •Группы радиокнопок − компоненты RadioGroup, RadioButton и GroupBox
- •Индикаторы CheckBox и CheckListBox
- •Ползунки и полосы прокрутки − компоненты TrackBar и ScrollBar
- •Заголовки − компоненты HeaderControl и Header
- •Таймер − компонент Timer
- •Календарь − компонент DateTimePicker
- •Панели и компоненты внешнего оформления
- •Панели общего назначения − компоненты Panel,
- •Многостраничные панели − компоненты TabControl,
- •Инструментальные панели − компоненты ToolBar и PageScroller
- •Перестраиваемые панели − компоненты CoolBar и ControlBar
- •Контрольные вопросы
- •Библиографический список
- •Занятие 8 Системные диалоги
- •Диалоги открытия и сохранения файлов – компоненты
- •Фрагменты диалогов – компоненты
- •Диалог выбора шрифта – компонент FontDialog
- •Диалоги выбора цвета – компоненты ColorDialog, ColorBox
- •Контрольные вопросы
- •Библиографический список
- •Занятие 9 Технология разработки приложений. Диспетчеризация действий
- •Диспетчеризация действий на основе компонента ActionList
- •Диспетчеризация действий на основе компонентов ActionManager, ActionMainMenuBar, ActionToolBar, CustomizeDlg
- •Контрольные вопросы
- •Библиографический список
- •Занятие 10 Динамически присоединяемые библиотеки dll Назначение dll
- •Статическое и динамическое связывание dll с приложением
- •Создание dll
- •Примеры статического и динамического связывания dll
- •Контрольные вопросы
- •Библиографический список
Компоненты 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 на примере работы с двумерным массивом (матрицей) чисел.
Создайте новый проект и сохраните файл модуля и проект под разными именами в созданной ранее папке.
В верхней части формы, слева поместите окно LabeledEdit1. У свойства EditLabel зачистите значение подсвойства Caption.
Правее поместите кнопку Button1. В свойство Caption впишите Ввод размеров матрицы (<=10).
Ниже поместите вторую кнопку Button2 и зачистите у нее свойство Caption.
Ниже, на одной горизонтали поместите окна Memo1 и RichEdit1 и сделайте их размеры равными и достаточными для размещения двух матриц из двузначных чисел, размерами 10x10. Для обоих окон установите имя шрифта Courier (символы этого шрифта равны по ширине).
Впишите обработчики щелчков кнопок, как показано ниже:
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]);
}
//---------------------------------------------------------------------------
Сохраните проект и выполните приложение. Убедитесь в работоспособности приложения, используя матрицы разных и одинаковых (повторным нажатием кнопки Вывод матриц) размеров.