страница 1 ... страница 2 | страница 3 | страница 4 страница 5 страница 6
Главное меню Main Menu
Обычно главное меню формируется на стадии проектирования. С этой целью следует воспользоваться компонентой Main Menu из страницы Standart палитры компонент, а затем применить свойство Items. При активизации мышью этого свойства открывается конструктор меню (работа с
ним будет описана ниже). Характеристики элементов меню задаются с помощью инспектора объектов. При необходимости (например, для создания подменю) используется локальное меню конструктора.
Можно создать меню или отдельные его элементы и на стадии выполнения программы. Для этого нужно использовать следующие стандартные функции: NewItem, NewLine, NewSubMenu, NewMenu.
Локальное меню Popup Menu
В отличие от главного меню локальное меню постоянно на экране не отображается, а выводится по мере необходимости. Чаще всего для этого
используется правая клавиша мыши, когда курсор мыши находится над тем элементом управления, для которого следует открыть локальное меню. Как правило, локальное меню является одноуровневым, хотя это необязательно. Во многих случаях отдельные элементы локального меню дублируют наиболее часто используемые элементы главного меню.
Локальное меню класса TPopupMenu, так же как и главное меню, является потомком класса TMenu. В свою очередь, в классе TPopupMenu
вводятся новые характеристики, среди которых отметим следующие свойства:
Alignment – свойство типа TPopupAlignment, которое определяет расположение локального меню относительно курсора мыши. AutoPopup – свойство логического типа. Если свойство имеет значение True, локальное меню появляется при нажатии правой клавиши мыши, если имеет значение False, меню не появляется (в этом случае следует использовать метод Popup). OnPopup – событие, возникающее при выводе локального меню на экран путем нажатия правой клавиши мыши (если свойство AutoPopup имеет значение True) или вызова метода Popup. Это единственное событие, которое обрабатывает локальное меню. Popup(X, Y) – процедура, выводящая на экран меню, при этом координаты его верхнего левого угла равны X и Y. На стадии проектирования локальное меню создается так же, как и главное меню. В форме размещается компонента Popup Menu из страницы Standart палитры компонент. Далее активизируется его свойство Items и с помощью конструктора меню набирается структура меню. Завершается создание локального меню привязкой его к конкретному элементу управления (элементам управления) через свойство PopupMenu элемента управления. Для создания локального меню на стадии выполнения программы можно использовать стандартную функцию NewPopupMenu.
Для формирования открытого массива Items элементов меню здесь также можно воспользоваться стандартными функциями NewItem, NewLine и NewSubMenu.
Конструктор меню
Окно конструктора меню содержит структуру имеющегося меню или
один пустой прямоугольник (если создается новое меню), соответствующий первому создаваемому подменю.
При создании нового главного меню в инспекторе объектов появляется
информация, соответствующая новому создаваемому элементу меню. В этой информации важным является свойство Caption, куда следует поместить название элемента, которое будет отображаться на экране. При вводе этого названия наряду с остальными можно использовать и буквы кириллицы. Перед какой-либо буквой можно поставить символ &, задающий клавишу быстрого перехода. Здесь же можно задать и клавиши быстрого управления, позволяющие выполнять определенную для этого элемента команду. Для названий подменю главного меню клавиши быстрого управления не отображаются, однако выполняют свои функции.
Для добавления элемента в любом месте меню (за исключением конечных элементов, которые создаются автоматически при прекращении
работы с предыдущим элементом) необходимо выделить элемент, перед которым следует поместить новый элемент, и выполнить команду Insert локального меню конструктора. В результате этого появится пустой элемент в соответствующем месте, с которым дальше проводится работа, как указано выше.
Для удаления любого элемента меню или даже группы элементов следует выполнить команду Delete. Все изменения главного меню сразу же отражаются на его виде, появляющемся в форме. Редактирование уже имеющегося главного меню выполняется аналогичным образом.
Работа по созданию или редактированию локального меню аналогична работе с главным меню, только его следует рассматривать как самостоятельное подменю с соответствующими элементами. Здесь также
можно использовать элементы трех типов, однако применения собственных подменю в локальном меню по возможности следует избегать.
Завершается работа с конструктором меню закрытием его окна.
Пример 1. Создание меню для приложения, работающего с БД
«Телефонная книжка»
В данном примере построим главное меню приложения, которое будет
содержать такие пункты меню, как Файл, Поиск, Сортировка, со
следующими подпунктами соответственно: Печать и Выход, По фамилии и По дате рождения, По номеру и По фамилии. Таким образом, при помощи данного меню можно будет осуществлять поиск по фамилии и по дате рождения, проводить сортировку по номеру записи, а также по фамилии, кроме этого оно дает возможность произвести печать содержимого БД
«Телефонная книжка».
Поверхностный анализ задачи проектирования меню проясняет, что
таблица People.db должна иметь вторичные индексы в полях IDPeople, Family
и Birthday для осуществления поиска и сортировки по этим полям.
1. Откроем DataBase Desktop 7.0 и создадим необходимые нам вторичные
индексы по полям Family, Birthday и IDPeople, назвав их FamilyIndex,
BirthdayIndex и Number соответственно.
2. Теперь войдем в среду Delphi 3.0 для того, чтобы начать работу по
созданию меню.
3. Вызовим заготовку проекта, созданную в лаб./раб. № 2. Сразу же сохраним
все составные части проекта в файлах с теми же именами, что и прежние, но
с добавлением цифры 7: MyExampleDB7.dpr, MyExUnitDB7.pas.
4.Подготовим форму для размещения на ней меню. Для этого выполним
следующее:
4.1. Сдвинем все имеющиеся в форме компоненты немного вниз,
освободив тем самым место под главное меню (при необходимости
нужно увеличить размер формы по вертикали). Изменим свойство
Color (Цвет) формы на clTeal (или любой другой цвет) для того, чтобы
меню выделялось на экране, привлекая внимание пользователя.
4.2. Создадим кнопку Выход для завершения работы приложения,
разместив ее справа от компоненты DBGrid1 (подобная кнопка
создавалась в лаб./раб. № 3 и лаб./раб. № 4).
5. Сформируем общий вид главного меню. Для этого выполним следующие
действия:
5.1. Со страницы Standart палитры компонент поместим на форму
Form1 компоненту MainMenu в правый нижний угол формы.
5.2. Активизируем у компоненты MainMenu1 свойство Items
(Компоненты), в результате чего откроется окно конструктора меню.
Зададим свойству Caption пустого прямоугольника значение Файл, а
свойству Name этого же элемента меню значение File_pt.
5.3. У появившегося пустого прямоугольника, который соответствует
первому элементу подменю Файл, свойство __________Caption изменим на
Печать, а свойство Name – на Print_pt. У следующего элемента
подменю свойству Caption зададим значение «-» – это будет
разделительная линия. Наконец, у следующего и последнего элемента
этого же подменю свойству Caption зададим значение Выход, а
свойству Name – Exit_pt.
5.4. У следующего элемента главного меню (пустой прямоугольник
справа от элемента меню Файл) свойству Caption зададим значение
Поиск, а свойству Name – Search-pt. Подпункты элемента меню Поиск
– По фамилии, По дате рождения – создадим аналогично элементам
Печать и Выход (их свойствам Name зададим значения Family1_pt и
Date_pt соответственно).
5.5. Аналогичным образом создадим элемент меню Сортировка,
который включает в себя пункты По номеру (свойство Name –
Number_pt) и По фамилии (свойство Name – Family2_pt).
5.6. Закроем конструктор меню. Отметим, что на форме Form1 уже
отображено создаваемое меню, и следующим шагом будет обеспечение
работы всех пунктов данного меню.
6. При выборе пункта меню Печать будет выводиться в режиме
предварительного просмотра отчет, созданный в лаб./раб. № 3, т.е. список
людей с имеющимися у них телефонами. Для того чтобы этот пункт меню
стал рабочим, необходимо выполнить следующие действия:
6.1. Добавим в проект файл MyUnitReport2.pas из лаб./раб. № 3 и
сохраним его под именем MyUnitReport.pas. В тексте модуля формы
Form2 (форма с отчетом) изменим раздел объявления используемых
модулей в секции implementation
USES MyExUnitDB3;
на раздел
USES MyExUnitDB7;
6.2. В тексте модуля формы Form1 в секции implementation напишем
следующую строчку для связи данной формы с формой Form2:
USES MyUnitReport;
6.3. В форме Form1 активизируем пункт меню Печать и в появившемся
обработчике события OnClick введем оператор, задающий отображение
отчета в режиме предварительного просмотра:
procedure TForm1.Print-ptClick (Sender: TObject);
begin
Form2.QuickRep1.Preview;
end;
7. Для обеспечения работы пункта меню Выход выполним следующие
действия: активизируем данный пункт меню и в появившемся обработчике
события OnClick введем оператор, обеспечивающий завершение работы:
procedure TForm1.Exit-ptClick (Sender: TObject);
begin
Close;
end;
8. Для обеспечения поиска по фамилии и по дате рождения нам потребуется
еще два окна, в каждом из которых будет осуществляться запрос у
пользователя строки, которую надо найти. Для создания этих окон выполним
следующее:
8.1. Добавим в проект новую форму. Изменим размер формы,
уменьшив ее значительно по вертикали и слегка увеличив по
горизонтали (в результате должен получиться узкий прямоугольник).
Изменим также свойство Caption формы на «Поиск по фамилии».
Сохраним форму в файле Search7.pas.
8.2. Со страницы Standart поместим на форму, в ее верхнюю часть,
компоненту Label. Изменим ее свойство Caption на «Введите фамилию
искомого человека», а через сложное свойство Font изменим шрифт на
полужирный.
8.3. Справа от компоненты Label1 поместим на форму со страницы
Standart компоненту Edit и увеличим ее горизонтальный размер на
оставшуюся часть формы (размер этой компоненты должен быть
достаточным для ввода фамилии с максимально возможной длиной).
Свойство Text этой компоненты сделаем пустым.
8.4. Ниже, под компонентами Label1 и Edit1, приблизительно в центре
формы поместим две кнопки BitBtn со страницы Additional палитры
компонент. Активизируем первую кнопку и изменим следующие ее
свойства: Caption на ОК, Kind на bkOK, ModalResult на mrOK и Name
на OKBtn. В результате мы получим стандартную кнопку ОК. Теперь
активизируем вторую кнопку и изменим ее свойства следующим
образом: Caption на Отмена, Kind на bkCancel, ModalResult на mrCancel
и Name на CancelBtn, т.е. создадим стандартную кнопку Cancel.
8.5. Добавим в проект еще одну новую форму. Сохраним ее в файле
Search7-1.pas. Зададим ее свойству Caption значение «Поиск по дате
рождения». Придадим форме вид, аналогичный виду формы Form3, со
следующими изменениями: свойство Caption компоненты Label1 будет
иметь значение «Введите дату рождения человека», и под ней будет
размещена еще одна компонента Label со свойством Caption равным
«дата вводится через точку».
8.6. Установим связь формы Form1 с формами Form3 и Form4, дописав
имеющуюся в форме Form1, в секции implementation строку
следующим образом:
USES MyUnitReport, Search7, Search7-1;
9. Для обеспечения работы с пунктом По фамилии подменю Поиск
активизируем данный пункт меню и в появившемся обработчике события
OnClick введем следующие строки:
procedure TForm1.Family1-ptClick (Sender: TObject);
begin
IF Form3.ShowModal = mrCancel THEN Exit;
Form1.Table1.IndexName := ‘FamilyIndex’;
Form1.Table1.SetKey;
Form1.Table1.FieldByName(‘Family’).AsString := Form3.Edit1.Text;
Form1.Table1.GotoNearest;
end;
Данный код заставляет всплыть диалог поиска (Form3) в модальном режиме
(метод ShowModal). Данный режим предполагает, что все сообщения,
поступающие в программу в случае открытого модального окна,
обрабатываются только этим окном. Если пользователь выбирает кнопку ОК,
то осуществляется поиск введенной строки. Если же выбирается кнопка
Отмена, то происходит отказ от выбранного действия, т.е. выход из
подпрограммы. Далее устанавливается вторичный индекс по полю, в котором
будет происходить поиск. После этого таблица устанавливается в режим
SetKey и потом таблице сообщается о поиске конкретной строки в поле
Family. В заключение вызывается GotoNearest и таблица подводится как
можно ближе к разыскиваемой записи, т.е. имеется возможность выполнять
частичные поиски, можно использовать неполное или неточное написание
фамилии.
10. Для обеспечения работы с пунктом меню «По дате рождения»
необходимо проделать действия, аналогичные выполненным. Обработчик
события OnClick будет иметь следующий вид:
procedure TForm1.Date-ptClick (Sender: TObject);
begin
IF Form4.ShowModal = mrCancel THEN Exit;
Form1.Table1.IndexName := ‘BirthdayIndex’;
Form1.Table1.SetKey;
Form1.Table1.FieldByName(’Birthday’).AsString := Form4.Edit1.Text;
Form1.Table1.GotoNearest;
end;
11. Активизируем теперь пункт меню По номеру подменю Сортировка и в
появившемся обработчике события OnClick введем следующие строки:
procedure TForm1.Number-ptClick (Sender: TObject);
begin
Form1.Table1.IndexName := ‘Number’;
Form1.Table1.SetKey;
Form1.Table1.GotoNearest;
end;
12. Определим действия, выполняемые пунктом меню По фамилии подменю
Сортировка, активизируя данный пункт меню и в появившемся обработчике
события OnClick запишем следующий код:
procedure TForm1.Family2-ptClick (Sender: TObject);
begin
Form1.Table1.IndexName := ‘FamilyIndex’;
Form1.Table1.SetKey;
Form1.Table1.FieldByName(‘Family’).AsString := ‘A’;
Form1.Table1.GotoNearest;
end;
Во избежание возможности появления пустых записей в начале таблицы
после сортировки по фамилии производится поиск записи, поле Family
которой является ближайшим для согласования со строкой «A».
13. Запустим программу командой Run|Run и убедимся в правильности
работы созданного меню.
14. Закроем приложение либо кнопкой Выход, либо командой главного меню
Файл|Выход.
15. Сохраним все изменения в проекте.
Задание к лабораторной работе № 5
1. Используя приложение, созданное в лабораторной работе № 2,
спроектируйте создайте главное меню, предоставляющее следующие
возможности (состав и структуру меню и его подменю определить
самостоятельно):
1. Завершение работы.
2. Печать отчета, созданного в лабораторной работе № 3, (можно
использовать любой из созданных отчетов).
А также:
Вариант 1.
1. Поиск поставщика по фамилии.
2. Поиск детали по номеру
3. Сортировка записей по фамилиям поставщика.
4. Сортировка по номерам деталей.
5. Вывод списка деталей одного и того же цвета (цвет задается
пользователем).
6. Вывод списка деталей одного и того же веса (вес задается пользователем).
Вариант 2.
1. Поиск участника по фамилии.
2. Поиск участника по фамилии тренера.
3. Поиск участника по городу.
4. Сортировка по городам.
5. Сортировка по фамилиям участников.
6. Вывод списка участников, приехавших из одного города (название города
задается пользователем).
Вариант 3.
1. Поиск студента по фамилии.
2. Сортировка по номерам групп.
3. Сортировка по фамилиям студентов.
4. Вывод списка заданий по одной и той же дисциплине (дисциплина
задается пользователем).
5. Вывод списка студентов с максимальным суммарным баллом.
6. Вывод списка студентов с их данными, выполнившими хотя бы одно
задание.
Вариант 4.
1. Поиск по должности.
2. Поиск по фамилии.
3. Поиск по дате поступления на работу.
4. Сортировка по названиям должностей.
5. Сортировка по стажу работника.
6. Вывод максимальной заработной платы.
Вариант 5.
1. Поиск по фамилии.
2. Поиск по типу изделия.
3. Сортировка по названиям цехов.
4. Сортировка по типам изделий.
5. Вывод фамилии рабочего, изготовившего за неделю наибольшее
количество деталей.
6. Вывод списка изделий, имеющих одну и ту же стоимость (стоимость
задается пользователем).
Вариант 6.
1. Поиск изделий по категориям.
2. Поиск по фамилии.
3. Сортировка по названиям цехов.
4. Сортировка по фамилиям.
5. Вывод списка рабочих из одного и того же цеха (название цеха задается
пользователем).
6. Вывод фамилии рабочего, собравшего наибольшее количество изделий по
всем категориям.
Вариант 7.
1. Поиск телефона по номеру.
2. Поиск по фамилии.
3. Сортировка по годам установки телефонов.
4. Сортировка по номерам телефонов.
5. Вывод списка абонентов, имеющих спаренный телефон.
6. Вывод списка льготных номеров телефонов и их владельцев.
Вариант 8.
1. Поиск игрушки по ее названию.
2. Поиск игрушки по названию фабрики.
3. Сортировка по цене игрушек.
4. Сортировка по количеству игрушек.
5. Вывод списка игрушек, сгруппированных по возрастным категориям, с
данными об изготовителе.
6. Вывод названия самой дорогой игрушки.
Вариант 9.
1. Поиск по фамилии.
2. Сортировка по индексу групп.
3. Сортировка по фамилиям.
4. Вывод списка студентов, имеющих собственную семью.
5. Вывод списка студентов, не сдавших сессию (более двух
неудовлетворительных оценок).
6. Вывод списка студентов, обучающихся в одной и той же группе (группа
задается пользователем).
Вариант 10.
1. Поиск спортсмена по фамилии.
2. Поиск спортсмена по названиям стран.
3. Сортировка по фамилии спортсмена.
4. Сортировка по названиям стран.
5. Вывод списка спортсменов из одной страны (задается пользователем).
6. Вывод списка спортсменов, тренирующихся у одного тренера.
Вариант 11.
1. Поиск рейса по пункту назначения.
2. Поиск рейса по количеству свободных мест.
3. Сортировка по номерам рейсов.
4. Сортировка по пунктам назначения.
5. Вывод номеров и времени вылета тех рейсов, у которых один и тот же
пункт назначения (пункт назначения задается пользователем).
6. Вывод номеров рейсов, имеющих свободные места.
Вариант 12.
1. Поиск обуви по названию.
2. Поиск обуви по размеру.
3. Поиск обуви по названию фабрики.
4. Сортировка по названиям обуви.
5. Сортировка по размерам обуви.
6. Вывод списка обуви (наименование и артикул), сгруппированной по
размерам.
Вариант 13.
1. Поиск по фамилии.
2. Поиск по дате приема в команду.
3. Сортировка по фамилиям.
4. Сортировка по количеству сыгранных матчей.
5. Вывод фамилии нападающего, сыгравшего максимальное количество
матчей.
6. Вывод списка нападающих в одной и той же команде (название команды
задается пользователем).
Вариант 14.
1. Поиск по фамилии.
2. Поиск по номеру зачетной книжки.
3. Сортировка по фамилиям.
4. Сортировка по среднему баллу успеваемости.
5. Вывод списка студентов с их данными, обучающихся в одной и той же
группе (группа задается пользователем).
6. Вывод списка студентов, проживающих в общежитии, с индексами их
групп.
Вариант 15.
1. Поиск по дате перечисления.
2. Поиск по названию организации-получателя.
3. Сортировка по дате перечисления.
4. Сортировка по видам затрат перечислений.
5. Вывод списка организаций-получателей с их адресами по заданному
пользователем признаку (коммерческие или нет).
6. Вывод пункта с максимальной суммой перечислений.
Вариант 16.
1. Поиск товара по именованию.
2. Поиск по дате поступления.
3. Поиск по № партии.
4. Сортировка по названиям товаров.
5. Сортировка по стоимости поступивших товаров.
6. Вывод списка фирм-покупателей, купивших какой-либо товар (товар
задается пользователем).
Вариант 17.
1. Поиск лекарства по его наименованию.
2. Поиск лекарства по названию фабрики.
3. Сортировка по наименованиям лекарств.
4. Сортировка по дате изготовления.
5. Вывод списка лекарств, производимых на какой-либо фабрике.
6. Вывод самого дорогого лекарства.
Вариант 18.
1. Поиск по фамилии.
2. Сортировка по фамилиям.
3. Сортировка по возрастным группам.
4. Вывод списка ветеранов спорта из одного и того же города с данными о
них (название города задается пользователем).
5. Вывод списка спортсменов, сгруппированных по виду спорта.
6. Вывод списка гостиниц.
Вариант 19.
1. Поиск по фамилии матери.
2. Поиск по дате рождения ребенка.
3. Сортировка по фамилиям матерей.
4. Сортировка по датам рождения.
5. Вывод списка детей с весом выше некоторой величины (пороговый вес
задается пользователем).
6. Вывод списка рожениц, лежащих в одной и той же палате, с указанием
даты рождения ребенка и ФИО лечащего врача (номер палаты задается
пользователем).
Вариант 20.
1. Поиск слушателя по фамилии.
2. Поиск по должности слушателя.
3. Сортировка по фамилиям слушателей.
4. Сортировка по наименованиям u1086 организаций, а внутри по фамилиям
слушателей.
5. Вывод списка слушателей (ФИО, должность, оценки по всем предметам).
6. Вывод списка слушателей из одной и той же организации (название
организации задается пользователем).
Вариант 21.
1. Поиск студента по его фамилии.
2. Сортировка по фамилиям студентов.
3. Сортировка по размеру стипендии
4. Сортировка по группам.
5. Вывод списка дисциплин с указанием ФИО преподавателя и даты
экзамена.
6. Вывод списка студентов, не получающих стипендию.
Вариант 22.
1. Поиск больного по фамилии.
2. Поиск больного по дате поступления.
3. Сортировка по фамилиям больных.
4. Сортировка по степени тяжести состояния больных.
5. Вывод списка врачей с указанием палаты.
6. Вывод списка больных из одной и той же палаты (номер палаты задается
пользователем).
Вариант 23.
1. Поиск по фамилии.
2. Поиск по дате прохождения медкомиссии.
3. Сортировка по фамилиям.
4. Сортировка по году рождения.
5. Вывод списка призывников одного года рождения (год задается
пользователем).
6. Вывод списка призывников, не пригодных к службе.
Вариант 24.
1. Поиск изделия по виду.
2. Поиск изделия по пробе.
3. Сортировка по видам изделий.
4. Сортировка по стоимости изделий.
5. Вывод самого дорогого изделия.
6. Вывод списка изделий одного и того же мастера с указанием веса, пробы
и стоимости изделия (фамилия мастера задается пользователем).
Лабораторная работа № 6
Создание справочной системы
Практически все серьезные программы в настоящее время обладают
справочной системой, позволяющей в любой момент получить информацию
о том или ином элементе программы.
Процесс формирования справочной системы программы состоит из
следующих этапов:
планирования справочной системы;
создания текстового файла в формате RTF (Rich Text Format);
создания содержания справочной системы (при необходимости);
создания файла описания проекта;
компиляции файла справочной системы;
подключения справочной системы к приложению, определение
контекстно-зависимой подсказки.
Поиск и выбор статей u1089 справочной системы программы, их отображение
обеспечивают стандартные средства Windows 95, реализованные в
программе Winhlp32 в файле Winhlp32.exe.
Перед началом создания файлов со справочной информацией
необходимо продумать вопрос, как должна быть организованна справочная
система.
Пример 1. Создание текстового файла для справочной системы
приложения, работающего с БД «Телефонная книжка»
В качестве инструмента будем использовать текстовый редактор Word
for Windows 95.
1. Проверим, будет ли скрытый текст отображаться на этапе набора текста.
Для этого нужно задать команду меню Tools|Options (Сервис|Параметры),
после чего в окне Options (Параметры) выбрать закладку View (Вид) и в
открывшейся странице у группы Nonprinting Characters (Непечатаемые
символы) установить выключатель HiddenText (Скрытый текст). После чего
нажать кнопку ОК.
2. Наберем текст раздела справочной системы, посвященный общему
описанию назначения, состава и возможностей электронной телефонной
записной книжки:
Назначение, состав и возможности электронной записной книжки
Данная телефонная записная книжка предназначена для хранения
информации о людях: ФИО, дата рождения, пол, номера имеющихся у них
телефонов; а также для удобной работы с этой информацией.
При запуске программы появляется основное окно MainWin (главная
форма) с именем «Информация о людях», большую часть которой занимают
элементы отображения информации из БДView.
Различные возможности по работе с информацией предоставляют
навигаторыNavigator и менюMenu.
В конце текста следует ввести дополнительный пустой абзац.
Подчеркнутые двойной линией слова являются выделенными фрагментами,
по которым осуществляется переход на другие разделы справочной системы.
После компиляции они будут подчеркнуты сплошной линией. Подчеркнутые
пунктирной линией слова – ссылки на другие разделы справочной системы,
оформленные как скрытый текст.
Выделим фрагменты текста с двойным подчеркиванием синим цветом,
для чего в строке ввода со списком Color (Цвет) выберем синий цвет.
Нажмем кнопку ОК.
страница 1 ... страница 2 | страница 3 | страница 4 страница 5 страница 6
|