Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Приложение 1 Справка по работе с основным набором визуальных компонентов Delphi, требуемых при выполнении лабораторных работ




 

 

TLabel

 

Компоненты класса TLabel (метки) предназначены для размещения на форме различного рода текстовых надписей. С компонентом может быть связан оконный управляющий элемент, который выбирается при нажатии Alt+Буква, где Буква – выделенная подчеркиванием буква в тексте метки. Такие символы в терминологии Windows называются акселераторами.

 

Свойства компонента:

 

propertyAutoSize: Boolean; Указывает, будет ли метка изменять свои размеры в зависимости от помещенного в ее свойство Caption
propertyFocusControl: TWinControl; Содержит имя оконного компонента, который связан с меткой акселератором.
TTextLayout = (tlTop, tlCenter, tlBottom); propertyLayout: TTextLayout; Определяет выравнивание текста по вертикали относи­тельно границ метки: tlTop –текст располагается вверху; tlCenter – текст центрируется по вертикали; tlBottom – текст располагается внизу.
propertyShowAccelChar: Boolean; Если содержит True, символ & в тексте метки предшест­вует символу-акселератору.
propertyTransparent: Boolean; Определяет прозрачность фона метки. Если False, фон закрашивается собственным цветом Color, в противном случае используется фон родительского компонента.
propertyWordwrap: Boolean; Разрешает/запрещает разрыв строки на границе слова. Для вывода многострочных надписей задайте AuroSize = False, Wordwrap = True и установите подходя­щие размеры метки.

 


 

TEdit

 

Компонент класса TEdit представляет собой однострочный редактор текста. С его помощью можно вводить и/или отображать достаточно длинные текстовые строки.

 

Свойства компонента:

 

propertyAutoSelect: Boolean; Указывает, будет ли выделяться весь текст в момент получения компонентом фокуса ввода.
propertyAutoSize: Boolean; Если True и BorderStyle = bsSingle, высота компо­нента автоматически меняется при изменении свойства Font.Size.
TBorderStyle = bsNone..bsSingle; propertyBorderStyle: TBorderStyle; Определяет стиль обрамления компонента: bsNone - нет обрамления; bsSingle - компонент обрамляется одной линией.
TEditCharCase = (ecNormal, ecUpperCase, ecLowerCase); propertyCharCase: TEditCharCase; Определяет автоматическое преобразование высоты букв: ecNormal –нет преобразования; ecUpperCase - все буквы заглавные; ecLowerCase -все буквы строчные. Правильно работает с кириллицей.
propertyHideSelection: Boolean; Если False, выделение текста сохраняется при потере фокуса ввода.
propertyMaxLength: Integer; Определяет максимальную длину текстовой строки. Если имеет значение 0, длина строки не ограничена.
propertyModified: Boolean; Содержит True, если текст был изменен.
propertyOnChange: TNotifyEvent; Определяет обработчик события OnChange, которое возникает после любого изменения текста.
propertyOEMConvert: Boolean; Содержит True, если необходимо перекодировать текст из кодировки MS-DOS в кодировку Windows и обратно.
propertyPasswordChar: Char; Если символ PasswordChar определен, он заменяет собой любой символ текста при отображении в окне. Используется для ввода паролей.
propertyReadonly: Boolean; Если содержит True, текст не может изменяться.
propertySelLength: Integer; Содержит длину выделенной части текста.
propertySelStart:Integer; Содержит номер первого символа выделенной части текста.
property Text: String; Содержит текст.

 

 

Методы компонента:

 

procedureClear; Удаляет весь текст.
procedureClearSelection; Удаляет выделенный текст.
procedureCopyToClipboard; Копирует выделенный текст в Clipboard.
procedureCutToClipboard; Копирует выделенный текст в Clipboard, после чего удаляет выделенный текст из компонента.
functionGetSelTextBuf(Buffer: PChar; BufSize: Integer): Integer; Копирует не более BufSize символов выделенно­го текст в буфер Buffer.
procedurePasteFromClipboard; Заменяет выделенный текст содержимым Clipboard, а если нет выделенного текста, копи­рует содержимое Clipboard впозицию текстово­го курсора.
procedureSelectAll; Выделяет весь текст.
procedure SetSelTextBuf(Buffer:PChar); Заменяет выделенный текст содержимым Buffer, а если нет выделенного текста, копирует содер­жимое Buffer в позицию текстового курсора.

 

 

TButton

 

Кнопки TButton широко используются для управ­ления программами.

 

Свойства компонента:

 

propertyCancel: Boolean; Если имеет значение True, событие OnClick кнопки возникает при нажатии клавиши Esc.
propertyDefault: Boolean; Если имеет значение True, событие ОпСliсk кнопки возникает при нажатии клавиши Enter.
TModalResult = Low(Integer)..High(Integer); propertyModalResult: TModalResult; Определяет результат, с которым было закрыто модальное окно (см. ниже поясне­ние).

 

В терминологии Windows модальными окнами называются такие специальные окна, которые, раз появившись на экране, блокируют работу пользователя с другими окнами вплоть до своего закрытия. Обычно с их помощью реализуется диалог, требующий от пользова­теля принятия некоторого решения. Для этого в состав модального окна включается несколько кнопок. Если у кнопки определено свой­ство ModalResult, нажатие на нее приводит к закрытию модального окна и возвращает в программу значение ModalResult как результат диалога с пользователем. В Delphi определены следующие стандарт­ные значения ModalResult:

 

 

mrNone   mrOk mrCancel mrAbort mrRetry Модальное окно не закрывается. Была нажата кнопка ОК. Была нажата кнопка Cancel. Была нажата кнопка Abort. Была нажата кнопка Retry. mrIgnore mrYes mrNo mrAll Была нажата кнопка Ignore. Была нажата кнопка Yes. Была нажата кнопка No. Была нажата кнопка Аll.

 

 

TCheckBox

 

Независимый переключатель TCheckBox использу­ется для того, чтобы пользователь мог указать свое решение типа Да/Нет или Да/Нет/Не знаю. Это решение отражается в свойстве State компонента, доступном как для чтения, так и для записи. В составе диалогового окна может быть несколько компонентов TCheckBox. Состояние любого из них не зависит от состояния остальных, поэтому такие переключатели называются независимыми.

Свойства компонента:

 

TLeftRight = (taLeftJustify, taRightJustify); propertyAlignment: TLeftRight; Определяет положение текста: taLeftJustify – с левой стороны компонента; taRightJustify – с правой стороны.
propertyAllowGrayed: Boolean; Разрешает/запрещает использование состоя­ния cbGrayed (He знаю).
propertyChecked: Boolean; Содержит выбор пользователя типа Да/Нет. Состояния cbUnchecked и cbGrayed отража­ются как False.
TCheckBoxState = (cbUnchecked, cbChecked, cbGrayed); propertyState: TCheckBoxState; Содержит состояние компонента: cbUnchecked – нет; cbChecked – да; cbGrayed – не знаю.

 

TRadioButton

 

В отличие от TCheckBox, компоненты TRadioButton представляют собой зависимые переключатели, предназначенные для выбора одного из нескольких взаимоисключающих решений. На форму (точнее, в компонент-контейнер) помещается по меньшей мере два таких компонента. Они могут находиться в одном из двух состояний, определяемом свойством Checked. Если в одном компо­ненте это свойство принимает значение True, во всех других компо­нентах, расположенных в том же контейнере, свойства Checked при­нимают значения False.

Помимо свойства Checked компонент TRadioButton имеет еще одно специфичное свойство – Alignment, аналогичное такому же свойству TCheckBox.

 

 

TMemo

 

Обойтись простым текстовым полем удается не всегда. Если пользователь должен ввести большой объем информации (например полный почтовый адрес или произвольный комментарий), ему может понадобиться несколько строк текста. В таком случае следует использовать компонент ТМеmо.

При вводе текста для перехода на новую строку (к новому абзацу) обычно исполь­зуется клавиша ENTER. Однако в диалоговых окнах Windows эта клавиша часто применяется для завершения ввода. Способ использования клавиши ENTERопреде­ляется значением свойства WantReturns. Если оно имеет значение true, то клавиша ENTERпозволяет переходить к новой строке внутри текстовой области, в противном случае она служит для завершения ввода и перехода к следующему элементу управле­ния, а для перехода к новой строке применяется комбинация клавиш CTRL+ENTER.

Главное свойство данного компонента – Lines (Строки), имеющее тип TStrings. В нем хранится список строк, введенных пользователем. Эти строки можно обрабатывать всеми методами, доступными в классе TStrings, например сохранять в файле:

Memo1.Lines.SaveToFile('С:\Memo.TXT');

 

Наличие у текстовой области полос прокрутки задается в свойстве ScrollBars.

 

Значение Вид текстовой области
ssNone Полосы прокрутки отсутствуют
ssHorizontal Имеется горизонтальная полоса прокрутки
ssVertical Имеется вертикальная полоса прокрутки
ssBoth Имеются две полосы прокрутки

 

Если включена горизонтальная полоса прокрутки, значение свойства WordWrap игно­рируется. Это свойство определяет, будет ли выполняться автоматический перенос слов на новую строку при достижении правой границы области (при этом никаких символов новой строки в текст не добавляется – перенос отображается только на экране).

При выделении фрагмента текста в текстовой области в свойство SelStart записывается позиция первого выделенного символа, а в свойство SelLength – число выделяемых символов. Выделенный текст доступен через свойство S elText (тип string).

Для выделения всего текста применяется метод SelectAll, для удаления выделенного текста – метод ClearSelection.

Чтобы очистить содержимое текстовой области, используется метод Clear, чтобы отменить последние изменения – метод Undo, а чтобы очистить буфер, хранящий историю изменений, и сделать такую отмену невозможной – метод ClearUndo.

Группа методов предназначена для работы с буфером обмена Windows. Для копирования выделенного текста в буфер обмена применяется метод CopyToClipboard, для вырезания текста – метод CutToClipboard, для вставки текста из буфера – метод PasteFromClipboard.

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

TListBox

 

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

Свойство Items имеет тип TStrings и содержит список строк, выводимых на экран. Во время разработки программист может редактировать свойство Items с помощью редакто­ра списка строк (String List editor). Во время выполнения элементы списка можно добав­лять с помощью метода Add () класса TStrings, а удалять – с помощью метода De­lete () этого же класса. Свойство ItemIndex содержит порядковый номер выделенного элемента, для первого элемента значение ItemIndex равно 0. Если ни один элемент не вы­делен, то значение ItemIndex равно – 1. Свойство MultiSelect определяет, может ли пользо­ватель выделить более одного элемента списка. Если значение MultiSelect равно True, то свойство ItemIndex является индексом выделенного элемента, имеющего фокус. По умолчанию ItemIndex имеет значение 0. Свойство SelCount содержит количество выде­ленных элементов, а свойство Selected определяет, выделен ли конкретный элемент. Свойство Sorted определяет, будут ли элементы выведены в алфавитном порядке. Свой­ство Style задает внешний вид элементов. По умолчанию элементы выводятся в виде строк, однако, изменив свойство Style, их можно вывести в графическом виде или с раз­ной высотой. Ниже приведен код, иллюстрирующий использование списка.

 

TComboBox

 

Компонент поле со списком (TComboBox) объединяет возможности поля ввода и про­кручиваемого раскрывающегося списка. Пользователь может или выбрать элемент списка или ввести его непосредственно в поле ввода. Поэтому поле со списком обладает многими свойствами и методами, входящими в рассмотренные раньше компоненты TEdit и TListBox. В поле со списком свойство Style определяет внешний вид списка и наличие поля ввода

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

 

 

Компонент Окно выбора файла (TOpenDialog)

 

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

Свойства класса TOpenDialog:

 

Свойство Назначение
DefaultExt Расширение имени, используемое по умолчанию. Добавляется в конец выбранного пользователем имени файла, если расширение не указано явно
FileName Выбранное пользователем имя файла вместе с полным путем поиска
Files Список выбранных имен файлов. В свойстве Options должен быть включен флажок ofAllowMultiSelect
Filter Набор масок, в соответствии с которыми отбираются имена файлов для отображения в диалоговом окне. Каждая маска состоит из двух частей: названия и шаблона, – разделенных символом |. Одному названию могут соответствовать несколько шаблонов. Маски отделяются друг от друга символом |
FilterIndex Номер текущей маски. Нумерация начинается с 1
HistoryList Список ранее выбранных файлов (тип TStrings)
InitialDir Текущий каталог, содержимое которого отображается при первом открытии диалогового окна
Options Набор флажков, определяющих работу окна выбора файлов
Title Заголовок диалогового окна

 

Среди методов этого класса следует отметить функцию

 

function GetStaticRect: TRect;

 

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

События класса TOpenDialog:

 

Событие Условие генерации
OnCanClose Пользователь пытается закрыть диалоговое окно. Обработчик этого события позволяет проконтролировать правильность выбранного или введенного в соответствующее поле окна имени файла и разрешить или запретить закрытие
OnFolderChange Пользователь переключился в другой каталог
OnIncludeItem К текущему списку файлов в диалоговом окне будет добавлено новое имя. Обработчик данного события дает возможность отбирать допустимые имена по алгоритму, определяемому программистом
OnSelectionChange Пользователь выбрал новое имя файла в диалоговом окне
OnTypeChange Пользователь выбрал новую маску файлов (свойство Filter)

 

В следующем примере при щелчке на кнопке отображается диалоговое окно выбора имени файла (объект OpenDialogl), которое имеет заголовок Выбор нужного файла, а в списке отображаются все файлы, имеющие расширение.PAS. Это обеспечивается присвоением свойству FilterIndex значения 2.

 

procedure TForml.ButtonlClick(Sender: TObject);

Begin

OpenDialogl.Filter:= 'Все файлы (*. *) |*.*|Файлы Паскаля

(*.pas)|*.PAS';

OpenDialogl.Title:= 'Выбор нужного файла';

OpenDialogl.FilterIndex:= 2;

if OpenDialogl.Execute then

Begin

AssignFile(F, OpenDialogl.FileName);

// работа с файлом F

end; end;

 

 

Компонент Окно сохранения файла (TSaveDialog)

 

Этот компонент практически ничем не отличается от компонента TOpenDialog за исключением некоторых настроек, специфичных для процесса сохране­ния файла.

 

 

TStringGrid

 

Использование многими пользователями электронных таблиц типа Excel стало практически неотъемлемой частью применения компьютеров. В системе Delphi 5 имеются два компонента, которые позволяют до некоторой степени сымитировать работу электронной таблицы, оставляя при этом, конечно, основную работу по реализации конкретных функций такой таблицы программистам.

Первый компонент – это таблица строк, позволяющая работать с тексто­вой информацией в двумерной таблице, имеющей столбцы и строки (их размеры можно менять с помощью мыши). Дополнительно, к каждой ячейке таб­лицы можно «привязать» свой объект, характеристики которого программист пред­ставит в виде строки, расположенной в этой ячейке.

 

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

 

Замечание: Нумерация элементов в таблице строк начинается с нуля.

 

Число столбцов задается в свойстве ColCount, число строк – в свойстве RowCount.

Следующий код программы изменяет размер таблицы, помещенной на форму в режиме проектирования (по умолчанию принят размер 5x5 элементов), на размер 10x10 ячеек и заполняет ячейки строками, содержащими их координаты.

 

procedure TForm1.FormCreate(Sender: TObject);

Varc,r: integer; begin

StringGrid1.ColCount:= 10; StringGrid1.RowCount:= 10; for с:= 0 to StringGrid1.ColCount-1 do for r:= 0 to StringGrid1.RowCount-1 do StringGrid1.Cells[c,r]:=

'(' + IntToStr(c) + ',' + IntToStr(r) + ')'; end;

 

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

 

Замечание: Число строк и столбцов, имеющих характер заголовка, задается свойствами FixedCols и FixedRows. Если таблица не содержит заголовочной информации, эти свойства должны принимать значение 0.

 

Можно получить доступ ко всем элементам одного столбца или одной строки. Соответствующие свойства Col и Row имеют тип TStrings, позволяющий обращаться к нужному элементу по номеру.

Чтобы привязать к ячейке объект (наследник класса TObject), надо использовать свойство Objects, представляющее собой такой же массив, как Cells, но содержащий не строки, а объекты. Эти объекты должны создаваться, а также уничтожаться про­граммистом вручную, иными словами, весь контроль над состоянием этого массива полностью возлагается на разработчика. Свойство Objects предоставляет только доступ к нужному объекту.

 

Свойства, предназначенные для оформления таблицы строк:

 

Свойство Назначение
BorderStyle Стиль отрисовки ячейки. Значение этого свойства можно комбинировать со значением свойства Ctrl3D для получения оригинального вида ячеек
Ctrl3D Таблица представляется в «трехмерном» стиле
ColWidths Массив, хранящий ширину каждого столбца в пикселах
DefaultColWidth Начальная ширина столбца по умолчанию
DefaultDrawing Если значение свойства – true, производится автоматическая отрисовка содержимого каждой ячейки. В противном случае для таблицы необходимо определить обработчик события OnDrawCell, чтобы запрограммировать процесс отрисовки ячейки
DefaultRowHeight Начальная высота строки по умолчанию
FixedColor Цвет области строк и столбцов, служащих заголовком таблицы
GridHeight Высота всей таблицы (в пикселах)
GridLineWidth Ширина (в пикселах) линий, разделяющих ячейки таблицы
GridWidth Ширина всей таблицы (в пикселах)
Options Множество значений (тип set of TGridOption), позволяющее задавать различные режимы работы таблицы: выделение нескольких ячеек, способ использования линий прокрутки и прочие. В частности, чтобы разрешить изменение размеров строк и столбцов, надо установить значение true для свойств goRowSizing и goColSizing, вложенных в свойство Options. Чтобы разрешить редактирование содержимого ячеек, надо записать значение true в подсвойство goEditing
RowHeights Массив, хранящий высоту каждой строки в пикселах
ScrollBars Наличие полос прокрутки
VisibleColCount Число видимых в таблице столбцов (без области заголовка)

 

 

TImage

 

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

 

В большинстве случаев содержимое изображения загружается из файла на этапе проектирования. Для этого служит свойство Picture (класс TPicture), описывающее точечное изображение (.ВМР), значок, графический метафайл Windows или другой пользовательский графический ресурс. Класс TPicture (рисунок) не является компо­нентом Delphi 5, он просто входит в состав библиотеки VCLкак вспомогательный, но на его основе могут быть созданы полноценные компоненты.

Текущее содержимое экземпляра класса хранится в одном из свойств: Bitmap (класс TBitmap), Icon (значок, класс TIcon) или Metafile (класс TMetafile, формат графичес­кого метафайла Windows.EMF). Обратиться к любому из этих свойств для отобра­жения графики можно через свойство Graphic. Ширина и высота изображения (в пикселах) задаются в свойствах Width и Height.

После размещения объекта Image на форме появится пунктирная рамка, которая задает (по умолчанию) размеры будущей картинки. Эти размеры желательно зара­нее указать в свойствах Width и Height.

Выбрав в Инспекторе объектов свойство Picture, можно вызвать специальный редак­тор, с помощью которого можно загрузить изображения в форматах.BMP,.ICO, JPGили в одном из форматов графического метафайла Windows.

 

TChart

 

Это очень мощный и богатый возможностями компонент, разработанный Давидом Бернеда (версия, включенная в систему Delphi 5, имеет номер 4.02). Он позволяет строить красивые двух- и трехмерные диаграммы на основе различ­ных данных, является наследником класса TPanel и наследует все свойства панели.

 

Создать диаграмму можно двумя способами: визуально с помощью Мастера (без программирования) и непосредственно средствами Паскаля.

 

Мастер запускается командой File > New > Business > TeeChart Wizard (Файл > Создать > Деловые > Мастер диаграмм), после чего разработчику надо выпол­нить ряд уточнений. Сначала выбирается источник данных. Пусть он не располо­жен в файле, а генерируется программой – переключатель Non Database Chart (He на основе базы данных). Затем выбирается внешний вид диаграммы. Она может быть двумерной или трехмерной что определяется переключателем 2D/3D.

На следующем этапе работы Мастера флажок Show Legend (Отображать легенду) опре­деляет наличие легенды –дополнительной панели, на которой указывается соответ­ствие цветов частей диаграммы указанным значениям. Флажок Show Marks включает небольшие желтые подсказки у каждой из частей диаграммы.

На этом создание диаграммы заканчивается. После щелчка на кнопке Finish (Готово) в Проектировщике форм появится новая форма, на которой будет расположен объект Chart1. Он заполнен неким набором случайно сгенерированных значений.

 

Настройка диаграммы выполняется с помощью редактора, который вызывается двойным щелчком на объекте Chart1.

 

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

 

ü Панель Series (Ряд данных) очень важна. Она позволяет объединять несколько диаграмм на одном графике с помощью кнопки Add (Добавить). При этом над значениями рядов данных можно выполнять различные операции, зада­ваемые на вкладке Functions (Функции): сложение (Add), вычитание (Subtract), умножение (Multiply), деление (Divide), взятие наибольшего (High), наимень­шего (Low) или среднего (Average) значения.

 

ü Панель General (Общие) содержит элементы управления для:

· экспорта изображения в файл – кнопка Export (Экспортировать);

· установки (в процентах) сдвига границ изображения по отношению к границам объекта – поля Margins (Поля);

· масштабирования – панель Zoom (Масштаб);

· прокрутки – панель Allow Scroll (Разрешить прокрутку).

 

ü Средства панели Axis (Оси) отвечают за все, что касается определения коорди­натных осей, их масштаба, заголовков, шага пунктирной сетки и так далее.

ü Панель Titles (Заголовки) содержит средства для оформления заголовка.

ü Панель Legend (Легенда) используется при оформлении внешнего вида и содержимого легенды.

ü Средства панели Panel (Панель) описывают форму и визуальное представление панели-основы, на которой расположена диаграмма.

ü Панель Pages (Страницы) служит для разделения диаграммы на страницы. Увеличивая число точек на странице с помощью поля Points per Page (Точки на страницу), можно подобрать оптимальное соотношение между наглядностью диаграмм и разумным числом страниц.

ü Панель Walls (Границы) позволяет задать цвет и размеры границ диаграммы.

ü Панель 3D описывает пространственное представление трехмерных диа­грамм. С помощью нескольких движков проектируемую диаграмму можно вращать и масштабировать.

На вкладке Series (Ряды данных) в редакторе задаются конкретные параметры оформления каждого ряда данных (каждого графика, добавленного при помощи вкладки Chart). Выбор текущего ряда данных производится с помощью раскрывающегося списка Area (Область).

 

Здесь наиболее важна панель Data Source (Источник данных). С ее помощью можно задать для ряда случайные значения (Random Values), отказаться от генерации значений (No Data) или сформировать значения текущего ряда данных как результат применения некоторой функции (раскрывающийся список Function) к значениям выбранных рядов данных. Выбор рядов данных – занесение в список Selected Series (Выбранные ряды) осуществляется с помощью кнопки >.

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

 

function AddXY (Const AXValue, AYValue: Double; Const AXLabel: String; AColor: TColor): Longint;

 

Обработчик щелчка на кнопке, например, Button1 запишется следующим образом.

 





Поделиться с друзьями:


Дата добавления: 2016-12-05; Мы поможем в написании ваших работ!; просмотров: 547 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Два самых важных дня в твоей жизни: день, когда ты появился на свет, и день, когда понял, зачем. © Марк Твен
==> читать все изречения...

2219 - | 2051 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.032 с.