Методические указания. 1. Многострочные окна редактирования Memo (страница Standart) и RichEdit (страница Win32)

1. Многострочные окна редактирования Memo (страница Standart) и RichEdit (страница Win32)

КомпонентыMemo и RichEditявляются окнами редактирования много­строчного текста. В компонентеMemo формат (шрифт, его атрибуты, выравнивание) одинаков для всего текста и определяется свойствомFont,а компонентRichEdit работает с текстом в обогащенном формате RTF. В остальном эти компоненты похожи.

Основные свойства:

¨ Font – шрифт текста

¨ Lines - текст окна в виде списка строк и имеющее тип TStrings.

¨ ScrollBars - определяет наличие полос прокрутки текста в окне.

ú SsNone – отсутствие(по умолчанию).Пользователь может перемещаться по тексту только с помощью курсора.

ú ssHorizontal - горизонтальная полоса прокрутки.

ú ssVertical - вертикальной полоса прокрутки

ú ssBoth – обе полосы прокрутки

Начальное значение текста можно установить в процессе проектирования, нажав кнопку с многоточием около свойства Lines в окне Инспектора Объектов. При этом откроется окно редактирования списков строк. Можно редактировать или вводить текст в этом окне или нажать кнопку < CodeEditor> и работать в обычном окне Редактора Кода. В этом случае, завершив работу с текстом, нужно выбрать из контекстного меню, всплывающего при щелчке правой кнопкой мыши, команду Close Page и ответить утвердительно на вопрос о сохранении текста в свойстве.

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

Memo1.Lines.

¨ Add (‘Новая строка') - добавление в конец текста строки «Новая строка».Возвращает номер новой строки.

¨ Append ( 'Новая строка ') - добавление в конец текста строки «Новая строка». Не возвращает значение.

¨ Delete ( N ) – удалить строку с номером N.

¨ Insert ( N, “Строка”) добавляет строку в позицию N

¨ Exchange ( N1, N2 ) – меняет местами строки с номерами N1 и N2.

¨ Move ( N1, N2 ) – перемещает строку с номером N1 в позицию N2.

¨ LoadFromFile ( FileName ) – загрузить список из текстового файла с именем FileName
LoadFromStream ( Stream ) - загрузить список из потока Stream

¨ SaveToFile ( FileName ) - сохранить список в текстовом файле с именем FileName
SaveToStream ( Stream ) - сохранить список в потоке Stream

¨ Clear - очистки текста в окне. Этот метод можно применять не только к свойству Lines, но и к самому окну Memo.

Memo1.Lines.Clear() или Memo1.Clear()

2. Создание меню с помощью мастера

С помощью мастера можно создать приложение с типовой конфигурацией главного меню. Чтобы запустить мастер необходимо:

Þ вызвать команду «New…» из главного меню «File»

Þ в появившемся окне «New Items» перейти на страницу «Projects»

Þ выбрать «Application Wizard».

После нажатия OK мастер начнет свою работу.

Процесс создания меню мастер проводит в несколько шагов, запрашивая у пользователя необходимые сведения.

1 шаг На первом шаге мастер предлагает выбрать разделы, которые будут содержаться в главном меню.

2 шаг На втором шаге, если был выбран раздел «File», есть возможность отредактировать расширения файлов, которые будут использоваться в диалогах открытия и записи файла. Для добавления новой записи нужно нажать на кнопку «Add» и в открывшееся окно ввести описание (Description) и расширение(я) (Extension(s)), например, «Файлы программ» и «.com»; «.exe»

3 шаг На третьем шаге с помощью кнопок «Remove», «Insert» и «Space» можно создать панель инструментов.

4 шаг На четвертом шаге необходимо задать имя (в верхнем поле) и каталог (в нижнем поле) приложения и, по желанию, включить следующие опции:

Þ Create MDI Application – создать многооконное приложение;

Þ Create a status line – создать строку состояния;

Þ Enable Hints – включить всплывающие подсказки.

После этого в выбранном каталоге будет создано новое приложение с заданным именем, включающее в себя созданное по ответам пользователя главное меню.

3. Компоненты MainMenu и РоpupMenu (панель Standart)

В Dlphir имеется два компонента, представляющие меню:MainMenu – главное меню и РоpupMenu всплывающее меню. Эти компоненты имеют много общего.

Меню - невизуальные компоненты, т.е. место размещения их на форме в процессе проектирования не имеет значения для пользователя, так как он их не увидит, а увидит только меню, сгенерированные ими.

Компоненты меню необходимо связать с компонентами, к которым они относятся. Главное меню всегда связано с самой формой. Связь формы с главным меню MainMenu осуществляется через специальное свойство формы – Menu, в котором указывается ссылка на главное меню. Эта связь возникает автоматически при добавлении на форму MainMenu.

Связь компонента со всплывающим меню также осуществляется через специальное свойство, присущее почти всем компонентам – PopupMenu.Эта связь автоматически не возникает. Для ее установления в свойстве PopupMenu некоторого компонента необходимо самостоятельно указать ссылку на всплывающее меню, которое будет связано с данным компонентом, а свойство всплывающего меню AutoPop должнобыло установлено в true. Тогда при при нажатии на компоненте правой кнопки мыши в процессе выполнения приложения будет появляться всплывающее меню. Такое всплывающее меню называется контекстным.

4. Проектирование меню с помощью Конструктора Меню

Основное свойство компонентов меню — Items. Редактирование меню, т.е. заполнение свойства Items, осуществляется в Конструкторе Меню. Его вызов производится двойным щелчком на компонентеили нажатием кнопки с многоточием рядом со свойствомItems в окне Инспектора Объектов. В результате откроется окно, вид которого представлен на рис.1, в котором можно спроектировать все меню.

ü Создание раздела. Для создания нового раздела необходимо поместить курсор в рамку из точек, обозначающую место расположения раздела (см. рис.1) и задать в Инспекторе Объектов его свойство Caption, которое обозначает надпись раздела. Если в свойство Caption ввести символ «-», то будет создана разделительная черта.

Рис. 1 Создание раздела меню

 
 

Каждый раздел меню, т.е. каждый элемент свойства Items, является объектом типа TMenuItem, обладающий своими свойствами, методами, событиями.
Свойство Name задает имя объекта, соот­ветствующего разделу меню. Во избежание путаницы рекомендуется задавать объектам осмысленные имена.

ü Вставка нового раздела. Для вставки нового раздела необходимо выбрать раздел, выше или левее которого требуется сделать вставку и нажать клавишу «Ins» или вызвать команду «Insert» из контекстного меню (появляется при щелчке на окне правой кнопкой мыши, см. рис.1).

ü Перемещение раздела. Чтобы переместить раздел в другое место меню необходимо отбуксировать его туда мышью.

ü Создание подменю. Для создания подменю необходимо выбрать раздел, для которого требуется создать подменю, и нажать «Ctrl+®» или вызвать команду «Create Submenu» из контекстного меню.

ü Удаление раздела. Чтобы удалить раздел необходимо выделить его и нажать «Del» или вызвать команду «Delete» из контекстного меню.

ü Вставка раздела из шаблона. Для вставки раздела из шаблона необходимо вызвать команду «Insert From Template» из контекстного меню и выбрать нужный шаблон. Элементы шаблона создадут подменю выбранного элемента или новый раздел в главном меню. Пользователю предоставляется возможность контролировать наполнение списка шаблонов: удалять ненужные – команда «Delete Templates», сохранять созданные – «Save As Template» из контекстного меню.

ü Вставка раздела из другого меню. Эта операция часто используется для редактирования всплывающего меню, т.к. обычно его разделы повторяют некоторые из главного меню. Для вставки раздела из другого меню необходимо сначала перейти в это меню. Это можно сделать, вызвав команду «Select Menu» из контекстного меню. Затем выделить нужные разделы (несколько разделов можно выделить, удерживая Shift или Ctrl), скопировать разделы в буфер, нажав «Ctrl-C». Потом с помощью пункта «Select Menu» вернуться обратно и вставить разделы из буфера, нажав «Ctrl-V».

ü Задание «горячих клавиш» и клавиш быстрого доступа к разделу.
Свойство ShortCut определяет «горячие» клавиши, с помощью которых пользователь, даже не заходя в меню, может в любой момент вызвать выполнение процедуры, связанной с данным разделом. Чтобы определить «горячие» клавиши, надо открыть выпадающий список свойстваShortCut в окне Инспектора Объектов и выбрать из него нужную комбинацию клавиш. Эта комбинация появится в строке раздела меню.

Клавиши быстрого доступа задаются в свойстве Caption. Если некоторой букве надписи (например «S») предшествует сим­вол «&», то обращение к соответствующей команде можно выполнять нажатием «Alt-S».

ü Задание раздела по умолчанию. Свойство Default определяет, является ли данный раздел разделом по умолчанию своего подменю, т.е. разделом, выполняемым при двойном щелчке пользователя на родительском разделе.

ü Задание изображения для раздела. В C++Builder-4 и выше предусмотрена возможность ввода в разделы меню изображений. Для этого служит свойство Bitmap. Выбор изображения производится подобно выбору изображения для свойства Glyph компонента BitBtn (см. лаб.раб.№1): при на­жатии кнопки с многоточием в строке этого свойства открывается окно, нажав кнопку Load в котором можно перейти в обычное окно открытия файла рисун­ка. Выбрав изображение необходимо нажать OK.

5. Организация отклика на вызов пункта меню

Основное событие раздела — OnClick, возникающее при щелчке пользователя на разделе или при нажатии «горячих» клавиш. В обработчик этого события можно перейти, используя вкладку Events Инспектора Объектов в процессе конструирования меню или щелкнув мышью по разделу меню на форме (обратите внимание – на форме, а не в Конструкторе Меню).

6. Диалоги как модальные формы

Диалоговое окно представляет собой отдельно проектируемую форму. Каждая форма представлена в программе отдельным модулем с заголовочным файлом. Для возможности вызова диалога из основной формы необходимо подключить заголовочный модуль диалога в модуль основной формы с помощью директивы препроцессора include.

v Например, если главная форма определяется модулем «Main.pas», а диалоговая – «MyDialog.pas», то необходимо в файл «Main.pas» добавить строку:

uses MyDialog;

Диалоговая форма должна появляться и закрываться во время выполнения программы. Для экономии памяти и меньшей требовательности к ресурсам, целесообразно переместить эту форму из автосоздаваемых (AutoCreateForms) в доступные (Availiable) при помощи пункта меню Project/options/forms. Для вызова требуемой формы в программе следует в вызывающей процедуре объявить переменную класса формы, создать ее, а затем отображать:

uses MyDialog; //подключение модуля диалоговой формы

procedure TMainForm.ShowModalFormButtonClick (Sender: TObject);

var

MyNewForm: TFormDialog; // определение переменной класса модальной формы

Begin

MyNewForm:= TFormDialog.Create(application); // создание формы диалога

End;

В программе можно предусмотреть изменение компонентов формы в зависимости от поставленных задач, например изменение заголовка формы после выбора пользователем какого-либо режима работы. Форму можно сделать видимой методами Show и ShowModal, например,

MyNewForm.Show;

Метод ShowModal открывает форму как модальную. Открытие форм как модальных используется в большинстве диалоговых окон. Модальная форма приостанавливает выполнение вызвавшей ее процедуры до тех пор, пока пользователь не закроет эту форму. Модальная форма также не позволяет пользователю переключить фокус курсором мыши на другие формы данного приложения, пока форма не будет закрыта. Так что пользователь должен выполнить предложенные ему действия прежде, чем продолжить работу. Модальной может быть сделана любая форма, если она делается видимой методом ShowModal. Если та же самая форма делается видимой методом Show, то она не будет модальной.

Поведение модальной формы определяется ее основным свойством ModalResul t. Это свойство доступно только во время выполнения приложения. При открытии формы методом ShowModal сначала свойство ModalResult=mrNone=0. Как только при обработке каких-то событий на форме свойству ModalResult будет присвоено положительное значение от 1=mrOK до 8=mrAll, модальная форма закроется.

Если на модальной форме размещена кнопка, то при ее нажатии происходит присваивание свойству ModalResult формы значения свойства ModalResult кнопки. Значение свойства ModalResult кнопки можно задать в процессе проектирования программы, выбрав его из выпадающего списка свойств в Инспекторе Объектов. Значение свойства ModalResult формы можно будет прочитать после ее закрытия.

v Пример:

MyNewForm.ShowModal;

if (MyNewForm.ModalResult = mrCancel)

Edit1.Text:= 'В окне Form2 была нажата кнопка Отмена'

Таким образом, программа, вызвавшая модальную форму, может узнать, что сделал пользователь, работая с этой формой, например, по какой он кнопке щелкнул.

7. Создание диалогового окна с помощью шаблона

Диалоговое окно можно создавать вручную, т.е. создать новую форму, используя команду « New Form» из главного меню «File», разместить на ней необходимые компоненты, определить действия, обработчики событий и т.д., а можно воспользоваться заготовками диалогов из шаблона. Шаблон позволяет вставить в приложение заготовку нового диалогового окна, на котором уже размещены типовые кнопки, чаще всего встречающиеся в диалогах, такие как OK, Cancel, Help; и для которого уже заданы некоторые свойства.

Чтобы вставить в приложение диалог из шаблона необходимо:

Þ вызвать команду «New…» из главного меню «File»

Þ в появившемся окне «New Items» перейти на страницу «Dialogs»

Þ выбрать нужный шаблон, например, StandardDialog или запустить мастер DialogWizard, который, запрашивая пользователя, за несколько шагов конструирует новое диалоговое окно.

При добавлении диалога в приложение будет вставлен новый модуль, представляющий диалоговую форму. Его следует сохранить в папке с приложением, задав какое-либо имя.

В процессе проектирования часто бывает, что главная форма скрывает за собой диалоговую. Чтобы выбрать скрытую форму можно использовать комбинацию клавиш «Shift+F12».

8. Вызов диалогового окна пунктом меню

Для вызова диалогового окна пунктом меню необходимо в обработчике события OnClick пункта меню делать диалоговое окно видимым. Как отмечалось, чаще всего для диалоговых окон используют метод ShowModal, который позволяет открыть форму как модальную.

v Пример:

Используя шаблон, добавим в приложение диалоговое окно OKRightDlg. Для вызова диалога пунктом меню CallDlg обработчик события OnClick должен иметь следующий вид:

procedure TForm1.CallDlgClick(Sender: TObject)

begin

OKRightDlg.ShowModal; // открытие формы OKRightDlg как модальной

end; // обработка результата закрытия диалоговой формы

9. Прием введенных значений из диалогового окна в основное окно приложения

Обмен данными между окнами можно осуществлять через глобальные переменные. Описать глобальную переменную нужно либо в отдельном модуле подключаемом к ко всем модулям приложения, либо с помощью прямой передачи данных из созданной модальной формы как упоминалось раньше. Однако использование глобальных переменных не является корректным, затрудняет процесс отладки приложения и считается плохим тоном в высокоуровневом программировании

Пример:

Пусть на основной форме имеется компонент Memo1, в который должна добавляться строка из окна редактирования Edit1 диалога.

При нажатии кнопки ОК на диалоге его свойство ModalResult станет равным свойству ModalResult кнопки, а так как это свойство для кнопки отлично от нуля (от mrNone), а именно равно mrOK=1, то диалоговое окно закроется, но его свойство ModalResult останется доступным.

Проверяя это свойство в обработчике OnClick пункта меню можно узнать, какую кнопку нажал пользователь. Если он нажал ОК, то необходимо в Memo1 добавить строку stroka.Обработчик события OnClick для раздела меню CallDlg должен выглядеть следующим образом:

procedure TForm1.CallDlgClick(Sender: TObject)

begin

OKRightDlg.ShowModal;

If (OKRightDlg.ModalResult=mrOk)

then Memo1.Lines.Add(OKRightDlg.Edit1.Text);.

end;

При работе с многоформовыми программами не стоит забывать, что неудаленные формы засоряют память, создают проблемы с совместно используемыми переменными и замедляют работу приложения. Поэтому после окончания работы с формой необходимо очищать отведенную под нее память, например в нашем случае после передачи данных в основное приложение стоит добавить в процедуру строку, вызывающую деструктор для созданной формы:

OKRightDlg.Destroy;

v Пример программы «Анкета»:

Будем запрашивать у пользователя данные о ФИО и дате рождения и заносить их в общую таблицу.

Поместим на форму MyForm компоненты

Þ Memo1

Þ MainMenu1

С помощью конструктора добавим в меню пункт <Добавить строку>. Для этого

o Щелкнем 2 раза на компоненте MainMenu1

o Заполним свойсто Caption первого раздела: &Добавить строку

Создадим диалоговую форму для ввода данных. File ® New Form. Поместим на нее компоненты:

Þ Label1 – Caption = Фамилия

Þ Edit1

Þ Label2 – Caption = Имя

Þ Edit2

Þ Label3 – Caption = Отчество

Þ Edit3

Þ Label4 – Caption = Дата рождения

Þ DateTimePicker1

Þ Button1 – Caption = Ввод, ModalResult = MrOk

Þ Button1 – Caption = Отмена, ModalResult = MrCancel

Определим переменную для передачи данных из диалоговой форму в главную в виде записи:.

В файле Unit1.pas напишем

Type

TNewMan = record

Fam, Name, Otch: string;

Date: TDateTime;

end;;

var

NewMan: TNewMan;

Для связи форм в файле Unit1.pas:

uses Unit2;

Для вызова диалоговой формы при нажатии пункта меню и принятия из нее данных в обработчике этого события (щелкнуть на пункте меню) напишем:

Form2:= TForm2.Create;

Form2.ShowModal;

if (Form2.ModalResult=mrOk)

then

begin

NewMan.Fam:= Form2.Edit1.Text;

NewMan.Name:= Form2.Edit2.Text;

NewMan.Otch:= Form2.Edit3.Text;

NewMan.Date:= Form2.DateTimePicker1.DateTime;

Str:= NewMan.Fam + ‘ ’ + NewMan.Name + ‘ ‘ + NewMan.Otch + ‘#13#10’ +

+ DateTimeToString(NewMan.Date)+ ‘#13#10’;

Memo1.Lines.Add(Str);

end;

Создадим в текущем каталоге файл “Anketa.txt” (Файл®Создать®Текстовый документ) и добавим операторы для считывания данных из файла при начале работы и записи в файл при завершении.

procedure TForm1.FormCreate(Sender: TObject)

begin

Memo1.Lines.LoadFromFile(‘Anketa.txt’);

end;

procedure TForm1.FormClose(Sender: TObject, &Action: TCloseApplication)

begin

Memo1.Lines.SaveToFile("Anketa.txt");

end;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: