- •Министерство образования российской федерации
- •Северо-западный государственный заочный технический университет
- •В. Л. Макаров
- •Прикладное программирование
- •Конспект лекций с. Петербург 2003г
- •Окно формы. Форма является основой большинства приложений , так как на ней размещаются другие управляющие компоненты. Внешний вид окна формы показан на рисунке 1.3.
- •3.Основные свойства, методы и события формы
- •Компоненты vcl
- •5.1. Кнопки управления
- •5.2. Окно редактирования Edit
- •5.3 Многострочные окна редактирования Memo и RichEdit
- •5.4 Компоненты выбора из списков – ListBox, CheckListBox, ComboBox
- •5.5 Элемент управления Label (надпись или метка)
- •5.6 Элемент управления RadioButton (Радиокнопка)
- •5.7 Полосы прокрутки (ScrollBar)
- •5.9 Компонент Timer(Таймер)
- •5.10 Компонент StringGrid ( таблица строк)
- •5.11 Компонент Chart – графики и диаграммы
- •5.12 Компонент f1Book
- •6. Создание меню
- •7. Системные диалоги
- •7.1 Диалоги открытия и сохранения файлов
- •7.2 Диалог выбора шрифта(компонент FontDialog )
- •7.3 Диалог выбора цвета(компонент ColorDialog )
- •7.4Диалоги поиска и замены текста(компоненты FindDialog и ReplaceDialog )
- •8.1 Структура головного файла проекта
- •8.2 Структура файлов модулей форм
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. В многострочных редакторах они используются крайне редко.