Панель элементов управления




 


 

Панель элементов управления — основной рабочий инструмент при визуальной разработке форм приложения (рис. 1.7). Панель элементов управления вызывается из меню Вид(Вид) командой Набор инструментов(Панель элементов управления). Для вызова этой панели можно воспользоваться также кнопкой Набор инструментовна стандартной панели инструментов. В составе панели элементов управления содержатся основные элементы управления форм — метки, текстовые поля, кнопки, списки и другие элементы для быстрого визуального проектирования макета формы. На панели представлены кнопки, назначение которых описано в табл. 1.15.
Рис. 1.7.Панель элементов управления Visual Basic 6

 

Таблица 1.15. Кнопки панели элементов управления

 

Кнопка Название Назначение
Pointer (Указатель) Используется для позиционирования маркера (указателя) мыши
PictureBox(Графическое окно) Размещает в форме графическое окно, предназначенное для объединения элементов в группы, для вывода в него графических изображений, а также текста, графических элементов и анимации
Label (Метка) Размещает в форме объекты, предназначенные для создания текстовой информации, надписей и примечаний
TextBox (Текстовое поле) Размещает в форме текстовое поле, предназначенное для ввода текстовой информации, чисел и дат
Frame (Рамка) Создает в форме рамку с заголовком для группировки объектов в логическую группу
CommandButton (Кнопка управления) Размещает в форме кнопки управления для инициации действий, выполнения команд, запуска программ
CheckBox (Флажок) Размещает в форме флажок, предназначенный для формирования условий выполнения программ или каких-либо настроек, работающий по принципу "да — нет"
OptionBufrton (Переключатель) Создает в форме переключатели для выбора режима работы или настроек выполнения программы
ComboBox (Поле со списком) Создает в форме объект, содержащий одновременно поле ввода и раскрывающийся список
ListBox (Список) Создает в форме список для выбора одного или нескольких значений из предлагаемого списка значений
HScrollBar (Горизонтальная полоса прокрутки) Размещает в форме горизонтальную полосу прокрутки, используемую в качестве ползунка для выбора значения из заданного диапазона
VScrollBar (Вертикальная полоса прокрутки) Размещает в форме вертикальную полосу прокрутки, используемую в качестве ползунка для выбора значения из заданного диапазона
Timer (Таймер) Размещает в форме таймер
Трансмиссионная коробка (Список устройств) Создает в форме список устройств
DirListBox (Список папок) Создает в форме древовидный список папок
FileListBox (Список файлов) Создает в форме список файлов
Shape (Очертание) Создает в форме геометрические фигуры, такие как прямоугольник, квадрат, круг, эллипс, прямоугольник и квадрат со скругленными углами
Line (Линия) Создает линии
Image (Изображение) Создает в форме поля, предназначенные для отображения графических изображений
Data (Данные) Создает элемент управления данными в базе данных для перемещения по записям и отображения результата навигации

Как и все объекты, ЭУ имеют свойства и методы. Свойства ЭУ определяют их внешний вид (положение, цвет, размер) и поведение. Изменять свойства можно как во время проектирования, так и во время выполнения программы.

Метод – это процедура, которая воздействует на объект во время её выполнения (например, метод Move – перемещение объектов). Примером свойства может служить свойство Name, которое определяет имя объекта и используется для ссылок на ЭУ в программе. Можно использовать русские буквы.

Общие свойства почти для всех элементов:

Свойство Содержание свойства
Name имя, которое используется для ссылок на ЭУ в программе, его нельзя менять в процессе выполнения программы
Left позиция ЭУ относительно левого края формы или рамки
Top позиция ЭУ относительно верхнего края формы или рамки
Height высота ЭУ
Width ширина ЭУ
BorderStyle стиль границы формы (окна программы): Sizable - обычная, FixedSingle - тонкая, None – отсутствует
BackColor Цвет фона элемента, можно задать выбрав из палитры или указав привязку к текущей цветовой схеме операционной системы
ForeColor цвет, используемый при выводе текста и для контуров графических объектов
Font шрифт, используемый при выводе текста на элементе
ScaleMode определяет единицы измерения размеров управляющих элементов
Visible определяет, будет ли виден ЭУ на экране: True – виден, False – нет

Методы общие для всех элементов управления:

Метод Результат применения
Move перемещение элементов управления по форме
Drag служит для перетаскивания элементов управления

Общие события для большинства элементов управления:

Событие Содержание события
Click запускается при одном щелчке на элементе управления
DblClick запускается при двойном щелчке на элементе управления

Большинству элементов управления, кроме Frame, Image, Label, Line, Shape, Timer, принадлежит понятие фокуса.

Фокус – это возможность принимать ввод пользователя посредством мыши или клавиатуры. Если элемент управления имеет фокус, он может принять ввод пользователя. На форме Visual Basic с несколькими элементами управления, например, текстовыми окнами, только одно окно (имеющее фокус) будет иметь возможность принимать текст, вводимый посредством клавиатуры.

23.

Событи́йно-ориенти́рованное программи́рование (англ. event-driven programming; в дальнейшем СОП) — парадигма программирования, в которой выполнение программы определяется событиями — действиями пользователя (клавиатура, мышь), сообщениями других программ и потоков, событиями операционной системы (например, поступлением сетевого пакета).

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

 

 

24.

Событие Причина возникновения
Activate,Deactivate Это событие имеет только форма. Activate -вызывается в тот момент, когда форма становится активной (получает фокус). Однако, если перейти к другому приложению Windows, а затем вернуться к своему, то это событие не произойдёт. Оно срабатывает только при переключении между формами внутри программы. Deactivate- Событие, обратное событию Activate. Вызывается при потере фокуса формы.
Change ComboBox — меняется текст в текстовой части элемента. Происходит только тогда, когда свойство Style установлено в 0 (Dropdown Combo) или 1 (Simple Combo) и юзер изменяет текст или вы меняете его в коде программы. DirListBox — Меняется выбранная директория. Происходит когда юзер делает двойной клик на новой директории или когда меняется свойство Path в коде. DriveListBox — Меняется выбранное устройство. Происходит когда юзер меняет устройство, выбрав его из списка, или когда меняется свойство Drive в коде. HScrollBar и VScrollBar (горизонтальная и вертикальная прокрутки) — Подвинулся скрол. Происходит когда юзер передвинул и отпустил полоску прокрутки или меняется свойство Value в коде. Label — Меняется содержимое метки. Происходит когда меняется свойство Caption в коде. PictureBox — Меняется содержимое PictureBox. Происходит при смене свойства Picture. (а также при использовании LoadPicture, прим.eax) TextBox — Меняется текст в текстовом поле. Происходит при смене текста юзером или при смене свойства Text в коде.
Click Происходит когда юзер нажимает и отпускает кнопку мышки над оъектом. Оно также может происходить при смене некоторого значения объекта. Для формы такое собитие выполняется при клике на свободном месте формы, или по отключённому элементу управления (т.е. когда его Enabled = False). Вообще событие происходит и для правой кнопки мыши и для левой. Но для элементов CheckBox, CommandButton, Listbox, и OptionButton происходит только при нажатии левой кнопки мыши. Для ComboBox или ListBox оно происходит и при клике мышой и также при смене текущего элемента клавишами курсора. Происходит при нажатии на "ПРОБЕЛ" у элементов CommandButton, OptionButton, или CheckBox, когда те имею фокус. При нажатии на ENTER при фокусе на элементе CommandButton (то бишь гашей кнопке) и когда установлено свойство Default. Происходит при нажатии на ESC когда форма имеет Cancel кнопку - CommandButton с установленым свойством Cancel. Также происходит при нажатии на горячую последовательность. Например, если кнопка имеет Caption - "&Go", то при нажатии Alt+G запуститься событие. Также, событие Click может быть сгенерировано в следующих случаях в коде: Установка значения Value для OptionButton и CheckBox.
DblClick Происходит при двойном клике по объекту. Для формы происходит при двойном клике по форме, а также по отключённому объекту. Для других элементов: Двойной клик по объекту левой кнопкой. Двойной клик по элементу в ComboBox, когда Style = 1. Или также в FileListBox, ListBox, DBCombo, или DBList.
DragDrop Происходит при завершении операции перетаскивания (Drag&Drop). В обработку события передаются 3 аргумента - координаты курсора (X,Y), где был отпущен объект, и ссылка на объект (Source), который был перетащен.
DragOver Происходит когда объект перетаскивается над получателем, но кнопка ещё не отпущена. Имеет 4 параметра. Координаты курсора, ссылка на объект, и текущее состояние (StateAs Integer): 0 = Enter (вошёл) (источник вошёл в область объекта). 1 = Leave (покинул) (источник ушёл из этой области). 2 = Over (над) (произошёл сдвиг в пределах области).
Error Происходит только при работе с базами данных. Коркретно: при ошибке в доступе к данным при выполнении кода. Имеет 2 параметра: dataerr - номер произошедшей ошибки response - номер, соответствующий выбранному в настройках (Settings): Если vbDataErrContinue, то response = 0 (Продолжить) Если vbDataErrDisplay, то response = 1 (Default) Показать сообщение об ошибке.
GotFocus Происходит, когда объект получает фокус, или при нажатии кнопки Tab или кликом по объекту, а также при запуске метода SetFocus в программе. Форма получает фокус только тогда, когда все видимые элементы отключены (Enabled = False).
Initialize Это событие имеет только форма. Обрабатывается первым и один раз. Visual Basic вызывает его при первом создании формы. Здесь обычно размещают код, для инициализации нужных переменны в программе.
ItemCheck Происходит когда у ListBox контрола свойство Style установлено в 1 (checkboxes) и выбран или сброшен флажок у какого-либо элемента (item) в контроле. Передаётся один параметр: index - номер элемента, который был выбран в ListBox.
KeyDown, KeyUp Происходит когда юзер нажимает (KeyDown) или отпускает (KeyUp) клавишу, в то время как объект имеет фокус. Чтобы получить код клавиши, используйте событие KeyPress. Параметров нет.
KeyPress Происходит когда юзер нажамает и отпускает клавишу на клавиатуре. Событие имеет один параметр: keyascii - код нажатой клавиши. Например, если нажать на клавишу "1" (основного ряда), то keyascii будет равен 49. Если нажать ESC, то 27, и и.д. Если присвоить этой переменной 0, то нажатая буква (символ) не появится в текством поле. Иногда это бывает очень удобным. Например, можно сделать так, чтобы в текстовое поле можно было вводить только цифры.  
LinkClose LinkError LinkNotify LinkOpen LinkClose: Происходит когда DDE соединение закрывается. Может произойти в любое время. LinkError: Происходит при возникновении ошибки в ходе связи DDE. LinkNotify: Происходит когда у источника меняются данные, на которые установлена ссылка DDE. LinkOpen: Происходит при создании инициализации DDE связи с источником. За подробностями пожалуйста обращайтесь к справочникам, т.к. эти события используются очень редко.
Load Это событие имеет только форма. Обрабатывается при загрузке формы в память. Происходит после события Initalize. Обычно код испольняется один раз. При запуске программы, это событие обрабатывается автоматически для той формы, которая загружается первой. Это событие может выполняться несколько раз. Т.е. если вы выгрузите форму оператором Unload, а затем вновь загрузите оператором Load или методом Show, то это событие будет выполнено.
LostFocus Происходит при потере объектом фокуса, или при нажатии Tab юзером, или при использовании метода SetFocus для другого объекта.
MouseDown, MouseUp Происходят когда юзер нажимает (MouseDown) или отпускает (MouseUp) кнопку мыши. Имеют 4 передаваемых параметра: button - содержит integer - номер кнопки мыши. С помощью этого события можно опеределить какую кнопку нажал пользователь. Для этого используюся константы: vbLeftButton (левая), vbMiddleButton (средняя), vbRightButton (правая). Проверить можно примерно так: If button = vbRightButton Then... shift - содержит integer - указывающее на состояние клавиш Shift, Alt и Ctrl. Бит 0 - Shift, бит 1 - Ctrl, бит 2 - Alt. Для опредения факта нажатия клавиш Ctrl и Alt можно использовать такой код: If (Shift And (vbCtrlMask Or vbAltMask)) = (vbCtrlMask Or vbAltMask) Then... Т.е. мы проверяем содержит ли переменная Shift биты 1 и 2 (оператором And). Скобки везде обязательны. vbShiftMask, vbAltMask, vbCtrlMask - это обычные константы, содержащие маски битов: vbShiftMask = 1 (нулевой бит) Bin: 00000001 vbCtrlMask = 2 (первый бит) Bin: 00000010 vbAltMask = 4 (второй бит) Bin: 00000100 x, y - координаты курсора мыши того места, где произошло событие MouseUp или MouseDown. Координаты всегда зависят от координытной системы, задаваемой свойствами ScaleHeight, ScaleWidth, ScaleLeft, ScaleTop объекта.
MouseMove Происходит когда курсор мыши изменяет своё положение над объектом. Т.е. когда курсор стоит на месте, событие не происходит. При каждом сдвиге курсора - срабатывает. Параметры те же, что и у MouseDown и MouseUp.
ObjectMove Происходит немедленно после того, как OLE контейнер сдвигается или меняет размеры пока объект активен. Передаваемые параметры: left - координата левой грани OLE контейнера top - координата верхней грани OLE контейнера width - ширина OLE контейнера height - высота OLE контейнера
OLECompleteDrag Происходит когда компонент - источник "брошен" на компонент - цель, информируя объект о том, что либо завершён, либо отменён процесс перетаскивания. Имеет один параметр: effect - привожу оригинал: A long integer set by the source object identifying the action that has been performed, thus allowing the source to take appropriate action if the component was moved (such as the source deleting data if it is moved from one component to another). The possible values are listed in Settings. А Settings может быть: vbDropEffectNone = 0 - операция "бросания" (Drop) была отменена. vbDropEffectCopy = 1 - показывать значок копирования данных. vbDropEffectMove = 2 - "сбрасываемые" данные являются ссылкой на оригинальные данные.
OLEDragDrop Это событие происходит когда на объект сбрасываются OLE данные. Например, происходит при перетаскивании на объект файлов из проводника, или перетаскивании изображения из Internet Explorer и т.п. Замечание: Это событие происходит только в том случае, когда свойство OLEDropMode установлено в 1 (Manual). Имеет очень много параметров: data - объект типа DataObject. Имеет 4 метода и одно свойство - коллекцию файлов, перетаскивамых на объект. Для получения данных можно использовать метод GetData. Чтобы узнать формат данных, перекинутых на объект можно использовать метод GetFormat. effect Long - привожу оригинал - set by the target component identifying the action that has been performed (if any), thus allowing the source to take appropriate action if the component was moved (such as the source deleting the data). The possible values are listed in Settings. button - то же, что и в событии MouseDown(Up). shift - то же, что и в событии MouseDown(Up). x,y - то же, что и в событии MouseDown(Up). Пример. Обработаем перетащенные на форму файлы. Не забудьте установить свойство OLEDropMode в 1. Private Sub Form_OLEDragDrop _ (Data As DataObject, Effect As Long, _ Button As Integer, Shift As Integer, _ X As Single, Y As Single) ' перетаскиваются файлы? If Data.GetFormat(vbCFFiles) = True Then Dim c As Long ' пройдёмся по всей коллекции For c = 1 To Data.Files.Count ' покажем имя перетащенного файла MsgBox "Был перетащен файл: " & Data.Files(c) Next c End If End Sub
OLEDragOver Происходит при перетаскивании над объектом. Парметры - комбинация парамтров событий OLEDragDrop и обычного DragOver.
OLEGiveFeedback Происходит после каждого события OLEDragOver. OLEGiveFeedback позволяет источнику обеспечивать визуальную "отдачу" пользователю, такое, как изменение курсора мыши (посмотрите на него при перетаскивании файлов в проводнике с нажатым Ctrl, - видите значок "+", вот это и есть та "отдача"?), которое будет говорить пользователю о том, что происходит. Параметры - effect и defaultcursors - boolean - разрешает или запрещает использование курсора по умолчанию. Если True - то используется курсор по умолчанию, если False, то использутся курсор, указанный пользователем в свойстве MousePointer объекта Screen.
OLEStartDrag Происходит тогда, когда начинается перетаскивание (т.е. когда перетаскиваемый объект (файл, например) появляется над объектом приёмником). Имеет 2 параметры: data - то же что и у события OLEDragDrop. allowedeffects - Long - содержит поддерживаемые источником эффекты. Возможные значения описаны в Setting'сах.
Paint Происходит когда часть или весь объект появляется на экране после сдвига или изменения размера. Событие происходит также при сдвиге окна, которое закрывает объект. Разберём чуть подробнее: Событие Paint полезно, если вы используете графические методы объекта (Line, PSet...) в коде. С помощью этого события вы можете убедиться в том, что данные перерисовались, когда это необходимо. Событие Paint вызывается при запуске метода Refresh. Если AutoRedraw установлено в True, то перерисовка происходит автоматически, таким образом, это событие теряет свою необходимость. Если свойство ClipControls установлено в False, то графические методы в процедуре Paint воздействуют только на видимую часть формы; иначе, графические методы перерисовывают всю открытую часть формы (т.е. ту, которая не перекрыта такими элементами, как Image, Label, Line, и Shape). Используя метод Refresh в событии Resize вызывает перерисовку всего объекта каждый раз, когда происходит изменение его размеров (Resize). Замечание: Используя событие Paint для определённых задач, может произойти каскадирование событий (Т.е. просто напросто произойдёт рекурсия, когда Paint будет вызывать сам себя, и произойдёт переполнение стека). Чтобы этого избежать, нужно придерживаться следующих правил: · Избегать вызова события Paint при сдвиге или изменении размеров объекта. · Внутри события Paint изменять свойства, которые могут вызвать событие Paint. Такие, например, как BackColor. · Включать метод Refresh метод внутрь Paint.
PathChange Происходит при смене пути, установкой свойства FileName или Path в коде. Замечание: Вы можете использовать это события, чтобы сообщить FileListBox'у о том, что путь у DirListBox изменился.
PatternChange Происходит при изменении маски (такой, как "*.*") установкой свойств FileName или Pattern в коде.
QueryUnload Это событие имеет только форма. Происходит перед закрытием формы или приложения. Если закрывается MDI форма, то это событие происходит сначала для формы контейнера, и лишь потом для дочерних форм. Это событие происходит перед событием Unload. В обработчик данного события передаётся два параметра: cancel - integer - если в обработчике события присвоить переменной cancel значение True, то выгрузка формы будет отменена. Если оставить там False, то форма благополучно выгрузится. unloadmode - константа. Содержит значение - почему происходит выгрузка формы. Может принимать: vbFormControlMenu = 0 - юзер выбрал команду Close (Закрыть) в меню приложения (слева вверху в заголовке формы). vbFormCode = 1 - произошёл вызов оператора Unload в коде программы. vbAppWindows = 2 - Windows завершает работу. vbAppTaskManager = 3 - закрытие приложения происходит через Ctr+Alt+Del. vbFormMDIForm = 4 - дочерняя MDI форма закрывается, т.к. закрывается главная. Замечания: Вообще, это событие обычно применяется для проверки завершённости некоторых действий. Или также, например, здесь можно спросить юзера, действительно ли он хочет выйти из приложения, или это произошло случаянно. Следать это можно примерно так: Private Sub Form_QueryUnload _ (Cancel As Integer, _ UnloadMode As Integer) Dim rez As VbMsgBoxResult rez = MsgBox("Вы действительно" & _ " хотите выйти?", _ vbQuestion + vbYesNo) If rez = vbNo Then Cancel = 1 End Sub
Reposition Происходит когда запись становится текущей записью. Замечания: Когда Data контрол загружен, первая запись в объекте RecordSet становится текущей, и вызывается это событие. Когда бы юзер не кликнул любую кнопку на контроле Data, передвигаясь с записи на запись, или вы используете одно из методов Move в коде (такие, как MoveFirst, MoveNext, FindFirst..), или любое другое свойство, которое может изменить текущую запись - происходит событие Reposition. Событие Validate происходит перед этим событием.
Resize Происходит когда объект первый раз появляется или когда меняется состояние окна (например, при свёртывании и развёртывании окна). А также при смене размеров окна. Это событие удобно использовать, если вы хотите сделать "растягивающийса" интерфейс. Т.е. когда все элементы на форме меняют свои размеры, в зависимости от текущих размеров формы. Код для изменения размеров этих элеметов как раз можно поместить в это событие.
Scroll Происходит тогда, когда сдвигается полоса прокрутки (ScrollBar). Замечания: Для DBGrid это событие происходит, когда двигается вертикальная или горизонтальная полоса прокрутки. Для ComboBox это событие происходит при сдвиге скролбара в выпадающем списке. Вы можете использовать это события для синхронизации изменения положения полоски прокрутки и другими объектами, с которыми эта полоска связана. К примеру, в обработку этого события вставить код, который будет синхронизировать текущую позицию с другим элеметом. Поместите на форму HScroll и вставьте такой код: Private Sub HScroll1_Scroll() Form1.Caption = HScroll1.Value End Sub Теперь в заголовок формы будет меняться в соответствии со сменой положения полоски прокрутки. Кстати, избегайте использования фукнции MsgBox в этом событии!
Terminate Это событие имеет только форма. Происходит когда все ссылки на экземпляры форм, MDI форм, элементы управления, классы удалены из памяти (установкий переменной в Nothing). Это событие выполняется после события Unload, и выполняется самым последним в программе. Можете использовать его по своему усмотрению.
Timer Это событие имеется только у элемента управления Timer. Оно происходит через определённый интервал времени, указанный в его свойтве Interval. Timer невидим для пользователя, и полезен для внутренних процессов программы. Его можно использовать когда необходимо, чтобы некоторый код программы выполнился через определённый промежуток времени. Например, с его помощью можно сделать часы. Для этого достаточно поместить на форму элемент Timer, установите его свойство Interval в 1000 (1 сек = 1000 мс), и вставить следующий код: Private Sub Timer1_Timer() Form1.Caption = Time End Sub Функция Time возвращает текущее системное время. Таким образом, каждую секунду будет выполнять событие Timer, и следовательно изменение заголовка формы. Примечание: количесво таймеров на форме не ограничего.
Unload Это событие имеет только форма. Происходит когда форма выгружается из памяти (оператором Unload, например, или нажатием на крестик). В дальнейшем она может быть загружена оператором Load. При перезагрузке формы ВСЕ ЭЛЕМЕНТЫУПРАВЛЕНИЯ ИНИЦИАЛИЗИРУЮТСЯ ЗАНОВО, т.е. все значения, которые были в них - теряются.
Updated Происходит когда меняются данные (при работе с БД). Имеет параметр Code - integer - описывает, как объект был изменён (описано в настройках). Может принимать следующие константы: vbOLEChanged = 0 - Данные объекта изменились vbOLESaved = 1 - Данные объекта были сохранены приложением vbOLEClosed = 2 - Файл, на который ссылается объект был закрыт vbOLERenamed = 3 - Файл, на который ссылается объект был переименован
Validate Это событие нужно для проверки введённых данных. Например, в TextBox. Это событие выполняется только тогда, когда свойство объекта CausesValidation = True. Рассмотрим пример, как можно проконтролировать данные, введённые в текстовое поле. Поместите на форму TextBox и вставьте код: Private Sub Text1_Validate _ (Cancel As Boolean) If Not (IsNumeric(Text1.Text)) Then Text1.ForeColor = vbRed MsgBox "Введите в TextBox числа" Cancel = True Else Text1.ForeColor = vbButtonText End If End Sub Этот код не примет введённый в TextBox текст, пока тот не будет являться числом. Если установить параметр Cancel в True, то фокус вернётся обратно TextBox. Это событие происходит при потере фокуса у объекта.

 

Подпрограмма – относительно самостоятельная часть программы, имеющая свое имя и выполняющая определенные действия. Подпрограммы повышают надежность и наглядность программ, т.к. позволяют разрабатывать и отлаживать каждый блок программы независимо (например, разными людьми).

Программист определяет действие программы путём написания процедур обработки событий (event procedure). Процедура обработки событий – это участок кода, выполняемого в момент возникновения события заданного объекта. Для создания процедуры обработки стандартного события нужно дважды щёлкнуть по элементу управления в режиме конструктора. Перед вами появится новое окно, которое называется окном кода. Окно кода будет содержать шаблон подпрограммы обработки события, которое начинается служебными словами Private Sub и заканчивается – End Sub (Subroutine - подпрограмма).

26.

Тип данных — Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и, возможно, способ реализации хранения значений и выполнения операций.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: