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

Среднее профессиональное образование 12 страница



8.3.8. Извлечение клавишных назначений из оперативной памяти

POP KEY TALL]

Команда извлекает из стека клавишные назначения в обрат­ном порядке и делает их активными. Если указана опиия ALL, то стек очищается, и отменяются все текущие назначения.

8.3.9. Изменение назначений функциональных клавиш

SET FUNCTION <Bbip.N> | <имя клавиши> ТО [ <выр.О ]

Команда закрепляет выражение символьного типа <выр.С> за функциональной клавишей. Клавишу задают либо порядко­вым номером <Bbip.N>, либо именем <имя клавиши>. Если символьное выражение <выр.С> содержит символ «;* (точка с запятой), то наличие этого символа соответствует нажатию кла­виши Enter. Символьное выражение <выр.С> может содержать несколько команд, раэдслсшшх символом «;*. Если в символь­ное выражение <выр.С> будет помешено число (символ «;* в этом случае игнорируется), то это число правильно определяется командой ввода @ GET В Симени клавиши> при задании име­ни клавиши допускается использование комбинании функцио­нальных клавиш со специальными клавишами Shift и Ctrl.

8.3.10. Отмена назначений функциональных клавиш

CLEAR MACROS

Команда отменяет все назначения как пользовательские, так и системные за функциональными клавишами.

8.3.11. Отмена назначения конкретной функциональной клавиши

SET FUNCTION <имя клавиши ТО

Для просмотра текущих клавишных назначений следует исполь­зовать команду DISPLAY | LIST STATUS или функцию ON().

При создании клавишных меню можно использовать также следующие клавишные функции.

8.3.12. Определение кода нажатой клавиши

INKEY([ <Bbip.N> 1 [, <выр.О ])

Функция возвращает ASCII-код последней нажатой клави­ши. Если нажатия клавиши не было, то функция возвращает 0 (ноль). Параметр <выр.Ы> задает время ожидания в секундах до нажатия клавиши (или задание временного интервала — паузы). Если <выр.Ы>=0, то задано неограниченное время ожидания нажатия клавиши. Если параметр <выр.1М> не указан, то функ­ция выполняется немедленно. Параметр <выр.С> управляет включением/выключением курсора и фиксацией факта нажатия кнопки мыши. Параметр <выр.С> может содержать одну из констант или сочетание констант:

S — включить курсор;

Н — выключить курсор;

М — контроль нажатия кнопки мыши (при этом возвращает­ся значение 151).

8.3.13. Определение кода нажатой клавиши и направление кода в буфер

LASTKEYO

При нажатии клавиш их коды заносятся в буфер клавиатуры. При нажатии клавиш управления (Enter, Tab и т. д.) содержимое буфера переносится в оперативную память. Код последней нажа­той клавиши, кроме того, переносится в клавишную ячейку.



Функция LASTKEYO работает только с клавишной ячейкой.

Функция INKEY(<выр.1Ч>) ждет нажатия любой клавиши и, кроме того, возвращает код нажатой клавиши и переносит код нажатой клавиши в клавишную ячейку, не дожидаясь нажатия одной из клавиш управления, таким образом предоставляя воз­можность работать функции LASTKEYO- Функция INKEY0 без параметров работает только с буфером клавиатуры. Если буфер заполнен, то она читает левый символ, возвращает его код, поме­щает код прочитанного символа в клавишную ячейку и сдвигает содержимое буфера на один символ влево. Таким образом, мно­гократно подавая функцию INKEY(), можно очистить буфер клавиатуры. Заполняется буфер клавиатуры двумя способами, либо с помощью нажатия клавиш, либо с помощью функции KEYBOARD(<выр.О).

8.3.14. Фиксация выхода из режима редактирования

READKEY0

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

Имя клавиши Данные не изменяюсь Данные изменялись

PgUp 6 262

PgDn 7 263

Esc 12 268

FI 36 292

Ctrl + Home 33 289

Ctrl + PgUp 34 290

Ctrl + PgDn 35 291

Ctrl + End 14 270

8.3.15. Определение команды, закрепленной за клавишей

ON(<выр.С1> [, <выр.С2> ])

Функция возвращает команду, закрепленную за клавишей или ON-командой.

<выр.С1> — содержит ON-команду (например. ERROR, READERROR, KEY, и т. д.).

<выр.С2> — содержит имя клавиши. Используется только для команды ON KEY LABEL.

8.3.16. Проверка заполнения буфера клавиатуры

CHRSAW((<выр.М> ])

Функция возвращает значение «истина» (.Т.), если в буфере клавиатуры имеется хотя бы один символ, содержимое буфера не изменяется. В противном случае возвращается значение «ложь*

(F).

8.3.17. Управление регистром букв

CAPSLOCK([ <выР.1> ])

Если <Bbip.L> истинно (.Т.), то устанавливается верхний ре­гистр. Если <вырХ> ложно (.F.), то устанавливается нижний регистр. Если <вырХ> отсутствует, то устанаативается текущее состояние регистра (управление с клавиатуры).

8.3.18. Ввод данных с клавиатуры

INPUT [<кыр.>] ТО <псрс.менная пачяти>

Команда производит ввод данных от пользователя (с клави­атуры) и сохраняет их в указаной <переменной памятиХ Тип <переменной памяти > определяется типом ввод имых данных.

8.3.19. Ввод данных символьного типа с клавиатуры

ACCEPT [<выр.>] ТО <переменная памятн>

Команда производит ввод данных символьного типа от поль­зователя (с клавиатуры) и сохраняет их в указаной <переменной памятиХ В отличие от команды INPUT, в команде ACCEPT ука­зание разделителя (кавычек или двойных кавычек) не предусмат­ривается.

8.3.20. Определение имени переменной (поля), куда вводятся данные

VARREAD0 или SYS(18)

Функции возвращают имя переменной или поля, куда с по­мощью команды READ вводятся данные, при условии что было выполнено прерывание от одной из клавишных команд. Имя пе­ременной возвращается прописными (большими) буквами. Имя поля возвращается строчными буквами, кроме первой буквы: первая буква — прописная.

8.4. ПРИМЕРЫ

Пример 1. Произвольное меню типа LIGHBAR.

* LIGHTDFR-Mghso типа FOX CLEAR

@ 5,7 PROMPT 'Пуск' MESSAGE 'Запуск программы' MENU ТО peri

0 12.32 PROMPT 'Выход' MESSAGE 'Завершение программы' MENU ТО peri

@ 8,50 PROMPT 'Поиск' MESSAGE 'Поиск данных'

MENU ТО peri

Пример 2. Использование LIGHBAR-меню.

Просмотреть таблицу Catalog и выводить на экран по одной записи. Начало просмотра организовать либо с начала таблицы, либо с конца таблицы, либо с произвольного места таблицы по номеру издания (книги).

CLOSE ALL && Закрытие всех файлов

SET DEFAULT ТО Е:\PRIMER && Задание рабочего

* каталога

USE Customer.dbf in 1 alias cus && Далее открытие

* двенадцати таблиц

USE

Order.dbf

in

 

alias

ord

 

 

USE

Salesman.dbf

in

 

alias

ВПГ.

 

 

USE

Sale.dbf

in

 

alias

sal

 

 

USE

Account.dbf

in

 

alias

acr.t

 

 

USE Catalog.dbf ORDER TAG Fam

in

 

alias

ctl

INDEX

catalog;

USE

Autor.dbf

in

 

alias

atr

 

 

USE

Town.dbf

in

 

alias

twn

 

 

USE

Street.dbf

in

 

alias

str

 

 

USE

Fam.dbf

in

10 alias

fam

INDEX

ORDER

fam;

TAG tag(2»

USE

Im.dbf

in

 

alias

im

INDEX

in ORDER TAG

USE

Ot.dbf

in

 

alias

ct

INDEX

ot ORDER TAG

 

CLEAR

PRIVATE OTV SSLE ct 1

SET RELATION TO Key_fam INTO

Fam, Key_im INTO; Im, Key_ot INTO Ot

DO WHILE.T.

CLEAR

@ 10,10 SAY 'Задайте режим просмотра'


CASE 0TV=2

GO BOTTOM CASE OTV=3

INPUT 'Введите номер автора' TO С_NOMN LOCATE FOR Key_book = C_NOMN IF BOF()

WAIT 'Такой записи нет'

LOOP

ENDIF CASE OTV=4 CLEAR EXIT

ENDCASE

CLEAR ScSc Помощь о назначении клавиш

б 20,1 SAY 'Для просмотра следующей записи '; +

' нажмите Enter'

@ 21,1 SAY 'Для просмотра предыдущей записи '; +

' нажмите PgUp'

@ 22,1 SAY 'Для выхода нажмите Esc'

DO WHILE not EOF() && Вывод на экран найденной

* записи

<3 8,5 SAY 'Фамилия автора: ' + fam.Name_fam @ 9,5 SAY 'Имя автора: ' + im.Name_In»

@ 10,5 SAY 'Отчество автора: ' ♦ ot.Name_ot

@ 11,5 SAY 'Название книги: ' + ctl.Name_book

@ 13,5 SAY RECNOO

К = INKEY(0) && Ожидание нажатия клавиши

DO CASE && Управление выводом на

* экран

CASE К=27 && Проверка клавиши Esc

CLEAR EXIT

CASE К=18 && Проверка клавиши PgUp

SKIP-1

CASE К=13 && Проверка клавипи Enter

SKIP

ENDCASE

EKDDO

ENDDO

Пример 3. Вертикальное POPUP-менютипа FOX.

Левый верхний угол меню помешен в 25-ю позицию 6-й стро­ки. Одновременно на экран выводится 7 строк меню: первая стро­ка — заголовок меню, четыре строки — пункты меню и две строки дпя организации прокрутки.

CLEAR

DIME а(10)

а(1)= 'Старт'

а(2)='Файл'

а(3)='Поиск'

а(4)='Редактирование'

а(5)='Фильтр'

а(6)='Печать'

а{7)='Модификация'

а{8)='Дополнение'

а{9) = ''

а(10)='Выход'

@ 6,25 MENU а, 10, 7 TITLE 'База данных'

READ MENU ТО рг

@2, 10 SAY рг && Вывод на экран номера выбранного * пункта меню

С помощью оператора DO CASE можно проанализировать выбор пользователя и написать обработчик выбранного пункта меню (см. пример 2).

П р и м е р 4. Двухуровневое PULLDOWN-меню типа FOX.

CLEAR

DECL Ъ(5,2), а(10) а(1)= 'Файл' а(2)='Формат' а(3)='Поиск'

а (4) =' \ Редактирование' а(5)='Фильтр' а(6)='Печать' а(7)='Модификация' а (8) ='Дополнение' а(9)='' а(10)='Выход'

Ь(1,1)='\ Старт'

Ь(2,1)='База данных' fc(3,1> ='Программа' to(4,1)='Объект' to(5,l)='Выход'

0(1,2)='ENTER'

to(2,2) ='Команда USE'

Ь(3,2)='Редактир. программы' b (4,2) ='Вставка объекта' b(5,2)='Esc'

8t 1=3

&& Определяет актизный по умолчанию пункт

* горизонтального меню вг2=1

MENU BAR Ь, 5 MENU 4, а. 10, б

READ MENU BAR TOstl, st2 && Фиксация выбора

* пользователя

@12, 5 SAY stl GET st2 && Выводит на экран

* номера выбранных

* пользователем && пунктов горизонтального и вертикального меню

Первый пункт горизонтального меню описан как недоступ­ный для выбора. Четвертому пункту горизо пального меню на­значено подчиненное вертикальное меню.

Пример 5. Вертикальное меню типа dBASE с произволь­ными пунктами.

В меню имеются линейка прокрутки, верхний и нижний заго­ловки, предусмотрен множественный отбор пунктов, установле­но по одному пробелу слева и справа от имени пункта меню.

DEFINE POPUP Edit FROM 2,2 SCROLL MARGIN;

TITLE " Редактирование'' MULTI FOOTER ''Правка" DEFINE BAR 1 OF Edit PROMFT «Вырезать» KEY 'Ctrl+X'

DEFINE BAR 2 OF Edit PROMPT 'Копировать' KEY 'Ctrl+C'

DEFINE 3AR 3 OF Edit PROMPT 'Вставить' KEY 'Ctrl+P'

DEFINE BAR 4 OF Edit PROMPT 'Удалить' KEY 'Ctrl+D'

ACTIVATE POPUP Edit

Пример 6. Вертикальное меню типа dBASE, пунктами ко­торого назначены имена файлов, левый верхний угол меню по­мещен в строку 4 столбец 12.

DEFINE POPUP File PROMPT FILES LIKE E:\PRIMER\*.dbf; FROM 4, 12 TITLE "Файл"

ACTIVATE POPUP File

Пример 7. Вертикальное меню типа dBASE, пунктами ко­торого назначены значения поля Name fam из таблицы Fam. Для сортировки списка по алфавиту текущим задан тег с номе­ром 1. Если при создании вертикального меню используется оп­ция PROMPT, то запрещено использовать опции MOVER и MULTI. Поэтому для организации множественного отбора пун­ктов меню в структуру таблицы добавлено логическое поле w и написана процедура рг.

USE

Customer.dbf

in

 

alias

cus

 

 

ЬЬ

Далее открытие двенадцати таблиц

 

USE

Order.dbf

in

 

alias

ord

 

 

USE

Salesman.dbf

in

 

alias

smn

 

 

USE

Sale.dbf

in

 

alias

sal

 

 

USE

Account.dbf

in

 

alias

acnt

 

 

USE

Catalog.dbf

in

 

alias

ctl

INDEX catalog TAG Fam

ORDER;

USE

Autor.dbf

in

 

alias

atr

 

 

USE

Town.dbf

in

В

alias

twn

 

 

USE

Street.dbf

in

 

alias

str

 

 

USE

Fam.dbf

in

 

alias

fam

INDEX fam; ORDER TAG

tag(2)

USE

Im.dbf

in

 

alias

im

INDEX im

ORDER TAG

In

USE

Ot.dbf

in

 

alias

ot

INDEX ot

ORDER TAG

ot

&& Закрытие всех файлов && Задание рабочего каталога


 

CLOSE ALL

SET DEFAULT TO B:\PRIMER

SELE fam

SET ORDER ТО TAG(1)

DEFINE POPUP Fam PROMPT FIELDS

fam.Kame_fam-<TIF{fam. w,'+',' *)+pr() FROM 3, B; SCROLL TITLE ''Фамилии''

ON SELECTION POPUP Fam REPLACE w WITH!W ACTIVATE POPUP Fam

FUNCTION pr && Функция для возврата символа «пробел» в 25, 0

в 25, 0 SAY "Пусто"

RETURN ' '

Пример 8. Вертикальное меню типа dBASE, пунктами ко­торого назначены значения поля Name_fam из таблицы Fam.

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

CLOSE ALL && Закрытие всех файлов

SET DEFAULT ТО E:\PRIMER && Задание рабочего каталога

USE

Customer.dbf

in

 

alias

cus

&&

Далее открытие

двенадца-

•к таб

USE

Order.dbf

in

 

alias

ord

USE

Salesman.dbf

in

 

alias

smn

USE

Sale.dbf

in

 

alias

sal

USE

Account.dbf

in

 

alias

acnt

USE

Catalog.dbf

in

 

alias

ctl

 

ORDER TAG Fam

USE

Autor.dbf

in

 

alias

atr

USE

Town.dbf

in

В

alias

twn

USE

Street.dbf

in

 

alias

st r

USE

Fam. dbf

in

10 alias

fam

 

ORDER TAG tag(2) USE Im.dbf in 11 alias im INDEX im;

ORDER TAG Im USE Ot.dbf in 12 alias ot INDEX ot;

ORDER TAG Ot

SELE fam

SET ORDER TO TAG{3)

DEFINE POPUP Fam PROMPT FIELDS fam.Name_fam+IIF(w,' + ',' ') FROM 3, B;

SCROLL TITLE "Фамилия"

ON SELECTION POPUP Fam DO Selbar

ACTIVATE POPUP Fam

REPLACE w WITH.F. FOR w && Очистка поля w

PROCEDURE Selbar DO CASE

CASE LASTKEY()=32 && Фиксация нажатия клавиши

&& ЗрасеЗаг и окончание процесса выбора пунктов


 


HIDE POPUP Fam SCAN FOR w ENDSCAN

DEACTIVATE POPUP

CASE LASTKEY()=13 *

*

REPLACE w WITH!w

ENDCASE

RETURN && Скрытие POPUP-меню && Сканирование текущей таблицы bSc и обработка записей && Удаление меню && Фиксация нажатия клавиши Enter для отмены ранее сделанных выделений && Инверсия значения поля w


 


* Допускается работа без указания текущего индекса по

* полю w, но отображение

* сделанного выбора будет другим (не упорядоченным).

Пр и м е р 9. Вертикальное меню типа dBASE, пунктами ко­торого назначена структура таблицы Catalog.

CLOSE ALL && Закрытие всех файлов

SET DEFAULT ТО E:\PRIMER && Задание рабочего

* каталога

USE Customer.dbfin 1 alias cus

ScSc Далее открытие двенадцати таблиц

USE Order.dbf in 2 alias ord

USE Salesman.dbf in 3 alias smn

USE Sale.dbf in 4 alias sal

USE Account.dbf in 5 alias acnt


USE

Catalog.dbf

in

 

alias

ctl

USE

Autor.dbf

in

 

alias

atr

USE

Town.dbf

in

 

alias

twn

USE

Street.dbf

in

 

alias

str

USE

Fam. dbf

in

 

alias

fan

USE

Im.dbf

in

 

alias

im

USE

Ot.dbf

in

 

alias

ot

 

ORDER TAG Fan

INDEX fan;

ORDER TAG tag(2)

INDEX im;

ORDER TAG Im

INDEX ot;

ORDER TAG ot


 


CLEAR SSLE ctl

DEFINE POPUP Catal PROMPT STRUCTURE FROM 3, 8; SCROLL TITLE ''Каталог''

ACTIVATE POPUP Catal

Пример 10. Назначение вертикальному меню подчиненно­го вертикального меню второго уровня.

CLOSE ALL && Закрытие всех файлов

SET DEFAULT ТО Е:\PRIMER && Задание рабочего каталога

USE

Customer.dbf

in

 

alias

cus

 

 

 

&&

Далее

открытие двенадцати

USE

Order.dbf

in

 

alias

ord

USE

Salesman.dbf in

 

alias

smn

USE

Sale.dbf

in

 

alias

sal

USE

Account.dbf

in

 

alias

acnt

USE

Catalog.dbf

in

 

alias

ctl INDEX catalog;

 

 

 

 

 

ORDER 1

USE

Autor.dbf

in

 

alias

atr

USE

Town.dbf

in

 

alias

twn


 


 

USE Street.dbf in 9 alias str

USE Fan. dbf in 10 alias fam INDEX fam;

ORDER TAG tag(2) USE Im.dbf in 11 alias im INDEX im;

ORDER TAG Im USE Ot.dbf in 12 alias ot INDEX ot;

ORDER TAG ot

CLEAR SELE fan

SET ORDER TO TAG Name

DEFINE POPUP Edit FRCM 2,2 SCROLL MARGIN;

TITLE ''Редактирование''; MULTI FOOTER ''Edit''

DEFINE BAR 1 OF Edit PROMPT "Вырезать" KEY 'Ctrl+X'

DEFINE BAR 2 OF Edit PROMPT ' Копировать'KEY 'Ctrl+C'

DEFINE BAR 3 OF Edit PROMPT 'Вставить' KEY 'Ctrl+P'

DEFINE BAR 4 OF Edit PROMPT 'Удалить' KEY 'Ctrl+D'

DEFINE POPUP Fam PROMPT FIELDS fam.Name_fam SCROLL; TITLE "Фамилии" FROM 4,29 TO 11,45

On 3AR 2 OF Edit ACTIVATE POPUP Fam

ACTIVATE POPUP Edit

Пример 11. Горизонтальное меню типа dBASE.

DEFINE MENU arm BAR AT LINE 7;

KEY 'Ctrl+M' FONT "Times New Roman". 12 STYLE 'BI'

* Описание четырех пунктов горизонтального меню.

DEFINE PAD File OF arm PROMPT 'Файл' KEY 'Ctrl+F' DEFINE PAD Edit OF arm PROMPT 'Редактирование';

KEY 'Ctrl+E'

DEFINE PAD Filter OF arm PROMPT 'Фильтр' KEY 'Ctrl+T' DEFINE PAD Finish OF arm PROMPT 'Выход' KEY 'Escape'

ACTIVATE MENU arm

* Для написания имен пунктов меню задан шрифт.

Пример 12. Двухуровневое меню типа dBASE.

CLOSE ALL && Закрытие всех файлов

SET DEFAULT ТО E:\PRIMER && Задание рабочего каталога

USE

Cuetomer.dbf

in

 

alias

cus

 

 

 

 

&& Далее открытие

двенадцати табгп

USE

Order.dbf

in

 

alias

ord

 

 

USE

Salesman.dbf

in

 

alias

smn

 

 

USE

Sale.dbf

in

 

alias

sal

 

 

USE

Account.dbf

in

S

alias

acnt

 

 

USE

Catalog.dbf

in

 

alias

ctl

INDEX

ORDER

catalog; TAG Farr

USE

Autor.dbf

in

 

alias

atr

 

 

USE

Town.dbf

in

 

alias

twr.

 

 

USE

Street.dbf

in

 

alias

str

 

 

USE

Fam.dbf

in

 

alias

fam

INDEX

ORDER

fan;

TAG tag(2)

USE

Im.dbf

in

 

alias

irr.

INDEX

ORDER

im;

TAG In

USE

Ot.dbf

in

 

alias

ot

INDEX

ORDER

ot;

TAG Ot

 

CLEAR SELE ctl

SET RELATION TO Key_fam INTO Fam, Key_iir. INTO Im,;

Key_ot INTO Ot

DEFINE MENU arm BAR AT LINE 7 KEY 'Ctrl+F'

* Описание четырех пунктов горизонтального меню.

DEFINE PAD File OF arm PROMPT 'Файл' KEY 'Ctrl+F'

DEFINE PAD Edit OF arm PROMPT ' \<Редактирование';

KEY 'Ctrl+E'

DEFINE PAD Filter OF arm PROMPT '\<Фильтр' KEY 'Ctrl+T' DEFINE PAD Finish OF arm PROMPT 'Выход' KEY 'Escape'

* Описание подчиненного мен» для пункта Edit

* горизонтального меню.

* Пунктами подчиненного меню заданы произвольные

* названия.

DEFINE POPUP Ed“ RELATIVE SCROLL MARGIN

* Описание четырех пунктов подчиненного меню.

DEFINE BAR 1 OF Edt PROMPT «Вырезать» KEY 'Ctrl+X'

DEFINE BAR 2 OF Edt PROMPT 'Копировать' KEY 'Ctrl+C'

DEFINE BAR 3 OF Edt PROMPT 'Вставить' KEY 'Ctrl-P'

DEFINE BAR 4 OF Edt PROMPT 'Удалить' KEY 'Ctrl+D'

* Вызов процедуры при выборе пунктов подчиненного вертикального меню

ON SELECTION BAR 1 OF Edt DO ppp IN;

E:\PRIMER\progS.prg WITH menuO, pad() ON SELECTION BAR 2 OF Edt DO ppp IN;

E:\?RIMER\prog5.prg WITH menu(), pad() ON SELECTION BAR 3 OF Edt DO ppp IN;

E:\PRIMER\prog5.prg WITH menuO, pad() ON SELECTION 3AR 4 OF Edt DO ppp IN;

E:\PRIMER\prog5.prg WITH menuO, pad()

* Вызов описанного ранее подчиненного меню при выборе

* пункта Edit горизонтального меню.

* ON PAD Edit OF arm ACTIVATE POPUP Edt

* Вызов подчиненного меню при выборе пункта File

* горизонтального меню.


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







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







<== предыдущая лекция | следующая лекция ==>