Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Страницы с закладками

Читайте также:
  1. Вырванные страницы из дневника
  2. Использование таблицы при оформлении Web-страницы
  3. Разработка Web-сайтов. Тема - тэги HTML для форматирования Web-страницы.
  4. Страницы для заметок
  5. УТРЕННИЕ СТРАНИЦЫ
  6. Форматирование шрифта. Внести в текст страницы тэги, определяющие начертание шрифта. Отделить этот фрагмент от остального текста с помощью горизонтальных разделительных линий.

МНОГОСТРАНИЧНЫЕ ОКНА ДИАЛОГА

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

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

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

Шаг 1. Приступим к реализации примера. Начните новый проект и установите для формы следующие свойства:

Name = ExamForm;

Caption = Examination;

BorderStyle = bsDialog;

Position - poScreenCenter.

Шаг 2. Теперь поместите на форму многостраничный компонент PageControl, найдете его в Палитре Компонентов на странице Win95 (рис. 7.50).

Характерные свойства компонента PageControl кратко описаны в таблице:

Свойство Описание
ActivePage Задает активную страницу.
Align Способ выравнивания многостраничного компонента в пределах владельца.
MultiLine Если равно True, то закладки располагаются в несколько рядов.
Pages Массив страниц. Каждая страница является объектом класса TtabSheet. Свойство Pages доступно только из программы.
PageCount Общее количество страниц. Доступно только из программы.
TabWidth, TabHeight Ширина и высота закладки. Если эти свойства равны нулю, то ширина и высота каждой закладки подбирается автоматически по высоте и ширине содержащегося на ней текста.

Шаг 3. Первоначально компонент PageControl не содержит ни единой страницы, поэтому вы не видите на нём закладок. Для создания страницы щёлкните правой кнопкой мыши на компоненте и выберете во всплывающем меню команду NewPage.

Будет создана первая страница и появится закладка с надписью TabSheet1.

Каждая страница в компоненте PageControl представлена объектом класса TTabSheet. Свойства страницы устанавливаются в Инспекторе Объектов и кратко описаны в следующей таблице.

СВОЙСТВО ОПИСАНИЕ
PageControl Многостраничный компонент, который владеет страницей. Доступно только из программы.
PageIndex Номер страницы в многостраничном компоненте(смотрите свойство Page компонента PageControl).
TabIndex Номер страницы, считая по видимым закладкам. Если закладка для данной страницы не видна, то свойство TabIndex равно -1. Доступно только из программы и только для чтения.
TabVisible Определяет, видна ли закладка страницы на форме, Если нужен многостраничный компонент без закладок, установите свойство TabVisible каждой страницы в значение False/

Шаг 4. Активизируйте Инспектор Объектов и измените надпись на закладке, установив в свойстве Caption значение Mathematics. Действуя аналогично, добавьте страницы с закладками Physics и Chemistry.

Шаг 5. Ну вот, у нас уже есть три пустые страницы с закладками и можно приступать к наполнению страниц содержанием. Сначала активизируйте страницу Mathematics, щелкнув мышью на ее закладке (закладки уже работают!). Затем поместите на нее группу зависимых переключателей — компонент RadioGroup. Заголовок группы будет содержать условие вопроса, а текст на зависимых переключателях — возможные варианты ответа. Догадываемся, что вас интересует, какой же вопрос мы придумали по математике. Ответ на него вы получите, взглянув на следующий рисунок.

Шаг 6. Чтобы группа зависимых кнопок выглядела так, как на рисунке, подберите ей соответствующие размеры и установите значения следующих свойств:

Caption=The right expression is (правильным является выражение)

Items=sin 50° <cos50°

sin 50° >cos50°

sin 50° =cos50°

Itemlndex = 0 (номер варианта, принимаемый по умолчанию)

Tag = 1 (номер правильного варианта, считая от нуля)

Свойство Tag не несёт смысловой нагрузки в компонентах Delphi. Помещая в него номер правильного ответа, мы заботимся об упрощении подсчёта оценки. Когда пользователь укажет ответ, мы сравним значения свойств ItemIndex и Tag. Ответ будет правильным лишь в том случае, если номера совпадут.

Шаг 7. Билет по математике готов, приступим к написанию билета по физике. Активизируйте страницу Physics и поместите на нее компонент RadioGroup. Подберите для группы зависимых кнопок подходящие размеры и установите для нее следующие свойства:

Caption = When the ice in water dissolves then (когда лед в воде тает)

Items= the level of water becomes higher (уровень воды поднимается)

the level of water becomes lower (уровень воды понижается)

the level of water remains unchanged (уровень воды остаётся неизменным)

Itemlndex = 0 (номер варианта, принимаемый по умолчанию)

Tag = 2 (номер правильного варианта, считая от нуля)

Результат должен быть таким:

Шаг 8. Осталось определить билет по химии. Мы надеемся, что после всех предыдущих испытаний это не составит для вас труда. Кратко поясним, что нужно сделать. Активизируйте страницу Chemistry и поместите на неё компонент RadioGroup. Подгоните его под размеры страницы и установите следуюшие свойства:

Caption = The right way of mixing acid and water is (чтобы разбавить кислоту, нужно)

Items = to add acid to water (добавить кислоту в воду)

to add water to acid (добавить воду в кислоту)

Itemlndex = 0 (номер варианта, принимаемый по умолчанию)

Tag = 0 (номер правильного варианта, считая от нуля)

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

Шаг 9. Все страницы с экзаменационными билетами вроде бы готовы, но как вы считаете, какая из них будет активной при запуске приложения? Конечно та, которая осталась активной при проектировании, т.е. Chemistry. А надо, чтобы первой оказалась страница Mathematics. Поэтому активизируйте ее, щелкнув мышью на закладке. Кроме того, установите свойство формы ActiveControl в значение RadioGroup1. Управляющий элемент, указанный в свойстве ActiveControl, первым получает фокус ввода при появлении формы на экране.

Шаг 10. Теперь вас ждет самая ответственная работа — выставление пользователю оценки. Для этого поместите на форму два компонента Button. Первая кнопка предназначена для выдачи результата экзамена, сделайте ее свойства такими:

Name= ResultBtn

Caption= Result

Default= True

Вторая кнопка служит для закрытия окна, ее сделайте такой:

Name= CloseBtn

Caption = Close

Cancel = True

Шаг 11. Определите в кнопках следующие обработчики события OnClick:

procedure TExamForm.ResultBtnClick (Sender: TObject);

const

MarkText: array [0..3] of string= ('Bad', 'Satisfactory', 'Good', 'Excellent');

var

Mark:Integer;

Begin

Mark:=0;

if RadioGroupl.ItemIndex = RadioGroupl.Tag then Inc (Mark);

if RadioGroup2.ItemIndex = RadioGroup2.Tag then Inc (Mark);

if RadioGroup3.ItemIndex = RadioGroup3.Tag then Inc (Mark);

ShowMessage (MarkText [Mark] + ' result.');

end;

procedure TExamForm.CloseBtnClick (Sender: TObject);

begin

Close;

end;

Оценка вычисляется элементарно. Сначала предполагается, что она равна нулю (ни одного правильного ответа), а затем она уточняется в соответствии с тем, дал ли пользователь правильный ответ по математике, физике и химии. Наконец вызывается процедура ShowMessage, которая выдаёт в маленьком окне диалога заключение экзаменатора.

После компиляции и запуска проекта предложите своим родственникам или друзьям пройти экзамен. Мы надеемся, что все они получат оценку “отлично”.

Поупражняйтесь с компонентом PageControl, например измените размеры закладок (свойства TabHeight и TabWidth), добавьте в компонент больше страниц. Когда закладки перестанут умещаться в строке, обнаружится, что их можно прокручивать. Для этого автоматически создаются кнопки со стрелками.

Если это вам не нравится, закладки можно расположить в несколько рядов, установив |свойство MultiLine в значение True.

А можно ли получить страницы без закладок? Да, для этого в объектах TTabSheet, описывающих страницы, нужно установить свойство TabVisible в False. Заметьте, это свойство управляет не видимостью страницы (для этого служит свойство Visible), а лишь видимостью закладки. Переключение между такими страницами становится вашей заботой и может осуществляться как угодно, например с помощью кнопок инструментальной панели.

ЗАКЛАДКИ

Для создания многостраничных окон диалога иногда используется еще один компонент — TabControl, который расположен в Палитре Компонентов по соседству.

Компонент TabControl — это одна страница с множеством закладок. Он используется в том случае, когда логические страницы имеют одинаковый вид, а их переключение мечет лишь изменение отображаемых данных. Это как раз случилось с нашими экзаменационными билетами — все страницы содержали компоненты RadioGroup.

Кадая страница в компоненте PageControl потребляет системные ресурсы Windows. Используя компонент TabControl вместо компонента PageControl, мы значительно снизим потребление оперативной памяти в нашем последнем примере, правда за счет времени и сил, затраченных на программирование. Давайте не поленимся и переделаем пример с экзаменационными билетами так, чтобы в нём использовался компонент TabControl.

Свойство Описание
Align Способ выравнивания компонента в пределах владельца.
MultiLine Если равно True, то закладки располагаются в несколько рядов.
Tabs Список текстовых строк, отображаемых на закладках.
TabIndex Номер выбранной закладки. Если ни одна закладка не выбрана, то значение свойства равно -1.
TabWidth, TabHeight Ширина и высота закладки. Если эти свойства равны нулю, то ширина и высота каждой закладки подбирается автоматически по ширине и высоте содержащегося на ней текста.

Шаг 12. Удалите с формы ExamForm компонент PageControl и поместите на его место компонент TabControl.

Шаг 13. Выберите в Инспекторе Объектов свойство Tabs и щёлкните на кнопке с многоточием в поле значения. На экране появится Редактор Строк.

Шаг 14. Наберите подписи к закладкам и щелчком мыши на кнопке ОК закройте окно. Компонент TabControl немедленно нарисует закладки.

 

Шаг 15. Теперь поместите на компонент TabControl группу зависимых переключателей и придайте ей соответствующие размеры и положение.

 

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

На этом визуальная часть проектирования закончена. Всё остальное придётся программировать вручную.

Шаг 16. Сначала нужно позаботиться о хранении содержания вопросов и их ответов, поэтому добавьте следующие описания в текст модуля Main, поместив их перед всеми обработчиками событий:

const

Questions: array[0..2] of string=('The right expression is',

'When the ice in water dissolves then',

'The right way of mixing acid and water is');

Answers: array[0..2,0..2] of string = (('sin 50° < cos 50°',

'sin 50° > cos 500',

'sin 50° = cos 50°'),

('the level of water becomes higher',

'the level of water becomes lower',

'the level of water remains unchanged'),

('to add acid to water',

'to add water to acid',' '));

ValidAnswers: array [0..2] of Integer =(1, 2, 0);

Шаг 17. Для промежуточного хранения ответов пользователя воспользуемся инициализированной переменной-массивом:

var

UserAnswers: array [0..2] of Integer = (0, 0, 0);

Шаг 18. Значения элементов этого массива должны изменяться, когда пользователь выбирает ответ (активизирует зависимый переключатель), поэтому определите в компоненте RadioButton1 следующий обработчик события OnClick:

procedure TExamForm.RadioGrouplClick (Sender: TObject);

begin

UserAnswers [TabControl1.TabIndex]:= RadioGroup1.ItemIndex;

end;

Шаг 19. При смене закладки должен изменяться вопрос экзаменационного билета и возможные варианты ответов. Для этого определите в компоненте TabControl1 обработчик события OnChange:

procedure TExamForm.TabControl1Change (Sender: TObject);

var

I: Integer;

begin

{ Отобразить новый вопрос }

RadioGroupl.Caption:= Questions[TabControll.TabIndex];

{ Стереть прежние варианты ответа }

RadioGroupl.Items.Clear;

{ Добавить новые варианты ответа в группу переключателей}

for I:= 0 to 2 do

if Length(Answers[TabControl1.TabIndex, I]) > 0 then

RadioGroupl.Items.Add(Answers[TabControl1.TabIndex, I]);

{ Установить ответ, принимаемый по умолчанию }

RadioGroupl.ItemIndex:= UserAnswers[TabControl1.TabIndex];

end;

Шаг 20. Все готово? Не совсем. Нужно обеспечить визуализацию первого вопроса при первом появлении формы на экране. Проще всего это можно сделать, вставив вызов метода TabControl1Change в обработчик события создания формы:

procedure TExamForm.FomCreate (Sender: TObject);

begin

TabContol1Change(TabControl1);

end;

А вот теперь скомпилируйте и запустите приложение. С точки зрения пользователя оно не будет отличаться от приложения, созданного ранее с помощью компонента PageControl. Думаем, что получив такой практический опыт, вы сможете сами сделать вывод о том, какой из двух компонентов (PageControl или TabControl) и в каких случаях следует использовать.

 

 


Дата добавления: 2015-07-11; просмотров: 147 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
ОБРАЩЕНИЕ К ЕДИНОЙ ЧАКРЕ| ОСНОВЫ СЕЛЕКЦИИ

mybiblioteka.su - 2015-2024 год. (0.025 сек.)