Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Подробнее об Инспекторе Объектов





 

Ранее мы вкратце рассмотрели Инспектор Объектов (Object Inspector). Основное для понимания Инспектора Объектов состоит в том, что он используется для изменения характеристик любого объекта, брошенного на форму. Кроме того, и для изменения свойств самой формы.

Задание 1.

1.Откройте новый проект, выбрав пункт меню File | New Project. Затем положите на форму объекты TMemo, TButton, и TListBox, как показано на рис.8.

2. Теперь нажмите клавишу <Shift> и щелкните на TMemo и затем на TListBox. Теперь оба объекта имеют по краям маленькие квадратики, показывающие, что объекты выбраны.

 
 

 


Рис.8: Простой объект TForm с компонентами TMemo, TButton, и TListBox.

 

3. Выбрав два или более объектов одновременно, Вы можете выполнить большое число операций над ними. Например, передвигать по форме. Затем попробуйте выбрать пункт меню Edit | Size и установить оба поля Ширину(Width) и Высоту(Height) в Grow to Largest, Теперь оба объекта стали одинакового размера.

4. Затем выберите пункт меню Edit | Align и поставьте в выравнивании по горизонтали значение Center (см. рис.9).

5. Изменить значение свойств формы Color и Font.

6. Сохранить проект. (Пояснения к пунктам 6 и 7 см. ниже.)

 

Рис.9: Диалог Alignment помогает выровнять компоненты на форме.

 

Поскольку Вы выбрали сразу два компонента, то содержимое Инспектора Объектов изменится - он будет показывать только те поля, которые являются общими для объектов. Это означает то, что изменения в свойствах, произведенные Вами повлияют не на один, а на все выбранные объекты.

Рассмотрим изменение свойств объектов на примере свойства Color. Есть три способа изменить его значение в Инспекторе Объектов. Первый - просто напечатать имя цвета (clRed) или номер цвета. Второй путь - нажать на маленькую стрелку справа и выбрать цвет из списка. Третий путь - дважды щелкнуть на поле ввода свойства Color. При этом появится диалог выбора цвета.

Свойство Font работает на манер свойства Color. Чтобы это посмотреть, сначала, выберите свойство Font для объекта TMemo и дважды щелкните мышкой на поле ввода. Появится диалог настройки шрифта, как показано на рис.10. Выберите, например, шрифт New Times Roman и установите какой-нибудь очень большой размер, например 72. Затем измените цвет фонта с помощью ComboBox’а в нижнем правом углу окна диалога. Когда Вы нажмете кнопку OK, Вы увидите, что вид текста в объекте TMemo радикально изменился.

 


Рис.10: Диалог выбора шрифта позволяет Вам задать тип шрифта, размер, и цвет.

 

В завершение краткого экскурса по Инспектору Объектов дважды щелкните на свойство Items объекта ListBox. Появится диалог, в котором Вы можете ввести строки для отображения в ListBox. Напечатайте несколько слов, по одному на каждой строке, и нажмите кнопку OK. Текст отобразится в ListBox’е.

 

Сохранение программы

 

Первый шаг - создать поддиректорию для программы. Лучше всего создать директорию, где будут храниться все Ваши программы и в ней - создать поддиректорию для данной конкретной программы. Например, Вы можете создать директорию MYCODE и внутри нее - вторую директорию TIPS1, которая содержала бы программу, над которой Вы только что работали.

После создания поддиректории для хранения Вашей программы нужно выбрать пункт меню File | Save Project. Сохранить нужно будет два файла. Первый - модуль (unit), над которым Вы работали, второй - главный файл проекта, который "владеет" Вашей программой. Сохраните модуль под именем MAIN.PAS и проект под именем TIPS1.DPR. (Любой файл с расширением PAS и словом “unit” в начале является модулем.)

 

 

2.7 TButton, исходный текст, заголовки и Z- упорядочивание

 

Еще несколько возможностей Инспектора Объектов и Дизайнера Форм.

Задание 2.

1. Создайте новый проект.

2. Поместите на форму объект TMemo, а затем TEdit так, чтобы он наполовину перекрывал TMemo, как показано на рис.11.

3. Теперь выберите пункт меню Edit | Send to Back, что приведет к перемещению TEdit вглубь формы, за объект TMemo. Это называется изменением Z- порядка компонент. Буква Z используется потому, что обычно математики обозначают третье измерение буквой Z. Так, X и Y используются для обозначения ширины и высоты, и Z используется для обозначения глубины.

 

Рис.11: Объект TEdit перекрывается наполовину объектом TMemo.

Если Вы “потеряли” на форме какой-то объект, то найти его можно в списке Combobox’а, который находится в верхней части Инспектора Объектов.

4. Поместите кнопку TButton в нижнюю часть формы. Теперь растяните Инспектор Объектов так, чтобы свойства Name и Caption были видны одновременно на экране. Теперь измените имя кнопки на Terminate. Заметьте, что заголовок (Caption) поменялся в тот же момент. Такое двойное изменение наблюдается только, если ранее не изменялось свойство Caption.

Текст, который Вы видите на поверхности кнопки - это содержимое свойства Caption, свойство Name служит для внутренних ссылок, Вы будете использовать его при написании кода программы. Если Вы откроете сейчас окно Редактора, то увидите следующий фрагмент кода:

 

TForm1 = class(TForm)

Edit1: TEdit;

Memo1: TMemo;

Terminate: TButton;

private

{ Private declarations }

public

{ Public declarations }

end;

 

В этом фрагменте кнопка TButton называется Terminate из-за того, что Вы присвоили это название свойству Name. Заметьте, что TMemo имеет имя, которое присваивается по умолчанию.

5. Перейдите на форму и дважды щелкните мышкой на объект TButton. Вы сразу попадете в окно Редактора, в котором увидите фрагмент кода вроде этого:

 

procedure TForm1.TerminateClick(Sender: TObject);

begin

 

end;

 

Данный код был создан автоматически, и будет выполняться всякий раз, когда во время работы программы пользователь нажмет кнопку Terminate. Определение класса в начале файла теперь включает ссылку на метод TerminateClick:

 

TForm1 = class(TForm)

Edit1: TEdit;

Memo1: TMemo;

Terminate: TButton;

procedure TerminateClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

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

6. Напишите строчку кода для закрытия главной формы, а значит и всего приложения. Это очень простой код, состоящий из одного слова Close:

 

procedure TForm1.TerminateClick(Sender: TObject);

begin

Close;

end;

7. Для проверки кода запустите программу и нажмите кнопку Terminate. Если все сделано правильно, программа закроется, и Вы вернетесь в режим дизайна.

8. Перейдите в Инспектор Объектов и измените значение свойства Name для кнопки на любое другое, например OK. Нажмите Enter для внесения изменений. Посмотрите в Редактор, Вы увидите, что код, написанный Вами изменился:

 

procedure TForm1.OkClick(Sender: TObject);

begin

Close;

end;

 

Заметьте, что аналогичные изменения произошли и в определении класса:

 

TForm1 = class(TForm)

Edit1: TEdit;

Memo1: TMemo;

Ok: TButton;

procedure OkClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

 

Управление проектом

 

Проект Delphi

 

Любой проект имеет, по-крайней мере, шесть файлов, связанных с ним. Три из них относятся к управлению проектом из среды и напрямую программистом не меняются. Вот эти файлы:

· Главный файл проекта, изначально называется PROJECT1.DPR.

· Первый модуль программы /unit/, который автоматически появляется в начале работы. Файл называется UNIT1.PAS по умолчанию, но его можно назвать любым другим именем, вроде MAIN.PAS.

· Файл главной формы, который по умолчанию называется UNIT1.DFM, используется для сохранения информации о внешнем виде главной формы.

· Файл PROJECT1.RES содержит иконку для проекта, создается автоматически.

· Файл, который называется PROJECT1.OPT по умолчанию, является текстовым файлом для сохранения установок, связанных с данным проектом. Например, установленные Вами директивы компилятора сохраняются здесь.

· Файл PROJECT1.DSK содержит информацию о состоянии рабочего пространства.

Разумеется, если сохранить проект под другим именем, то изменят название и файлы с расширением RES, OPT и DSK.

После компиляции программы получаются файлы:

DCU - скомпилированные модули

EXE - исполняемый файл

DSM - служебный файл для запуска программы в среде, очень большой, рекомендуется стирать его при окончании работы.

~PA, ~DP - backup файлы Редактора.

 

 

3.2 Пункт меню “File”

 

Для сохранения проекта, выберите пункт главного меню “File” (с помощью мышки или по клавише Alt+F), включающий шесть секций:

· Первая секция дает возможность управления проектом в целом.

· Вторая секция дает контроль над формами, модулями и компонентами проекта.

· Третья позволяет добавлять и удалять файлы из проекта.

· Четвертая управляет печатью.

· Пятая секция - выход из Delphi

· Шестая секция предоставляет список ранее редактировавшихся проектов; Вы можете быстро открыть нужный.

Большинство операций из пункта меню “File” можно выполнить с помощью Менеджера Проекта (Project Manager), который вызывается из пункта меню View. Некоторые операции доступны и через SpeedBar.

Каждая строка пункта меню “File” объяснена в Справочнике. Выберите меню “File” и нажмите F1, появится экран справочника.

Большинство из пунктов первой секции очевидны. “New Project” начинает новый проект, “Open Project” открывает существующий проект и т.д.

Первые два пункта второй секции позволяют Вам создать новую форму или новый модуль. Выбирая “New Form”, Вы создаете новую форму и модуль, связанный с ней; выбирая “New Unit”, Вы создаете один модуль.

“New Component” вызывает диалог для построения заготовки нового визуального компонента. В результате создается модуль, который можно скомпилировать и включить в Палитру Компонент.

“Open File” открывает при необходимости любой модуль или просто текстовый файл. Если модуль описывает форму, то эта форма тоже появится на экране.

При создании нового модуля Delphi дает ему имя по умолчанию. Вы можете изменить это имя на что-нибудь более осмысленное (например, MAIN.PAS) с помощью пункта “Save File As“.

“Save File” сохраняет только редактируемый файл, но не весь проект.

“Close File” удаляет файл из окна Редактора.

Нужно обратить внимание: Вы должны регулярно сохранять проект через File | Save Project либо через нажатие Ctrl+S.

 

Управление проектом

 

Теперь перейдем к Менеджеру Проектов, который помогает управлять проектом. Менеджер Проектов, рис.2, разделен на две части. Верхняя - панель с управляющими кнопками. Нижняя - список модулей, входящих в проект.

 
 

 

 


Рис. 1: Кнопки с панели SpeedBar

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

Краткое описание других кнопок:

· Третья слева кнопка - просмотр текста модуля, на котором стоит курсор.

· Четвертая - просмотр формы, если есть таковая для данного модуля

·

 
 

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

· Последняя - сохранение изменений на диске.

 

 

Рис.2: Кнопки сверху используются для удаления и добавления модулей в проект.

 

Обзор других пунктов меню

 

Пункт меню “File” обсуждался ранее. Далее рассматриваются другие важные пункты - “Edit”, “Search”, “View” и “Compile”, но менее подробно. Далее, снова подробно, рассказывается о “Options”.

 

3.4.1 Пункт меню “Edit”

“Edit” содержит команды “Undo” и “Redo”, которые могут быть очень полезны при работе в редакторе для устранения последствий при неправильных действиях, например, если случайно удален нужный фрагмент текста.

Справочник (on-line help) объясняет, как нужно использовать пункт меню Options | Environment для настройки команды “Undo”. Возможность ограничить возможное количество команд “Undo” может пригодиться, если Вы работаете на машине с ограниченными ресурсами.

Команды “Cut”, “Copy”, “Paste” и “Delete” - как во всех остальных приложениях Windows, но их можно применять не только к тексту, но и к визуальным компонентам.

 

3.4.2 Пункт меню “Menu”

 

В “Search” есть команда “Find Error” (поиск ошибки), которая поможет отследить ошибку периода выполнения программы. Когда в сообщении об ошибке указан ее адрес, Вы можете выбрать пункт меню Search | Find Error и ввести этот адрес. Если это представится возможным, то среда переместит Вас в то место программы, где произошла ошибка.

 

 

3.4.3 Пункт меню “View”

 

Составляющие пункта меню “View”:

· Project Manager (Менеджер Проекта).

· Project Source - загружает главный файл проекта (DPR) в Редактор

· Установка, показывать или нет Object Inspector на экране.

· Установка, показывать или нет Alignment Palette. То же самое доступно из пункта меню Edit | Align.

· Browser - вызов средства для просмотра иерархии объектов программы, поиска идентификатора в исходных текстах и т.п.

· Watch, Breakpoint и Call Stack - связаны с процедурой отладки программы и будут обсуждаться позднее.

· Component List - список компонент, альтернатива Палитре Компонент. Используется для поиска компонента по имени или при отсутствии мыши.

· Window List - список окон, открытых в среде Delphi.

· Toggle Form/Unit, Units, Forms - переключение между формой и соответствующим модулем, выбор модуля или формы из списка.

· New Edit Window - открывает дополнительное окно Редактора. Полезно, если нужно, например, просмотреть две разных версии одного файла.

· SpeedBar и Component Palette - установки, нужно ли их отображать.

 

3.4.4 Пункт меню “Compile”

 

В пункте меню “Compile” проект можно скомпилировать (compile) или перестроить (build). Если выбрать Compile или Run, то Delphi перекомпилирует только те модули, которые изменились со времени последней компиляции. Build all, с другой стороны, перекомпилирует все модули, исходные тексты которых доступны. Команда Syntax Check только проверяет правильность кода программы, но не обновляет DCU файлы.

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

 

Обзор Палитры Компонент

 

Набор и порядок компонент на каждой странице являются конфигурируемыми. Так, Вы можете добавить к имеющимся компонентам новые, изменить их количество и порядок. Это можно сделать, вызвав всплывающее меню (нажать правую кнопку мыши, когда указатель над Палитрой).

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

Стандартные компоненты Delphi перечислены выше (см. стр.8) с некоторыми комментариями по их применению.

 

Страница Additional

На странице Standard представлены управляющие элементы, появившиеся в Windows 3.0 (рис.1.). На странице Additional размещены объекты, позволяющие создать более красивый пользовательский интерфейс программы.

 
 

Рис. 1:Список компонент

TBitBtn -кнопка вроде TButton, однако на ней можно разместить картинку (glyph). TBitBtn имеет несколько предопределенных типов (bkClose, bkOK и др.), при выборе которых кнопка принимает соответствующий вид. Кроме того, нажатие кнопки на модальном окне (Form2.ShowModal) приводит к закрытию окна с соответствующим модальным результатом (Form2.ModalResult).

TSpeedButton -кнопка для создания панели быстрого доступа к командам (SpeedBar). Пример - SpeedBar слева от Палитры Компонент в среде Delphi. Обычно на данную кнопку помещается только картинка (glyph).

TTabSet - горизонтальные закладки. Обычно используется вместе с TNoteBook для создания многостраничных окон. Название страниц можно задать в свойстве Tabs. Но проще это сделать в программе при создании формы (OnCreate):

TabSet1.Tabs:= Notebook1.Pages;

А для того, чтобы при выборе закладки страницы перелистывались нужно в обработчике события OnClick для TTabSet написать:

Notebook1.PageIndex:= TabSet1.TabIndex;

TNoteBook - используется для создания многостраничного диалога, на каждой странице располагается свой набор объектов. Используется совместно с TTabSet.

TTabbedNotebook - многостраничный диалог со встроенными закладками, в данном случае - закладки сверху.

TMaskEdit -аналог TEdit, но с возможностью форматированного ввода. Формат определяется в свойстве EditMask. В редакторе свойств для EditMask есть заготовки некоторых форматов: даты, валюты и т.п. Спец. символы для маски можно посмотреть в Справочнике.

TOutline - используется для представления иерархических отношений связанных данных. Например - дерево директорий.

TStringGrid -служит для представления текстовых данных в виде таблицы. Доступ к каждому элементу таблицы происходит через свойство Cell.

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

TImage -отображает графическое изображение на форме. Воспринимает форматы BMP, ICO, WMF. Если картинку подключить во время дизайна программы, то она прикомпилируется к EXE файлу.

TShape -служит для отображения простейших графических объектов на форме: окружность, квадрат и т.п.

TBevel - элемент для рельефного оформления интерфейса.

THeader - элемент оформления для создания заголовков с изменяемыми размерами для таблиц.

TScrollBox - позволяет создать на форме прокручиваемую область с размерами большими, нежели экран. На этой области можно разместить свои объекты.

Страница Dialogs

 
 

Рис. 1: Палитра компонент

На странице Dialogs представлены компоненты для вызова стандартных диалогов Windows. Внешний вид диалогов зависит от используемой версии Windows. Объекты, представленные на данной странице невидимы во время выполнения и вызов диалогов происходит программно, например:

if OpenDialog1.Execute then

Image1.Picture.LoadFromFile(OpenDialog1.FileName);

Диалоги Windows в порядке появления на странице Dialogs: - OpenDialog; выбрать файл - SaveDialog; сохранить файл - FontDialog; настроить шрифт -ColorDialog; выбор цвета - PrintDialog; печать - PrinterSetupDialog; настройка принтера - FindDialog; поиск строки - ReplaceDialog; поиск с заменой

 

Страница System

 

Страница представляет набор компонент для доступа к некоторым системным сервисам типа таймер, DDE, OLE и т.п.

TTimer -таймер, событие OnTimer периодически вызывается через промежуток времени, указанный в свойстве Interval. Период времени может составлять от 1 до 65535 мс.

TPaintBox -место для рисования. В обработчики событий, связанных с мышкой передаются относительные координаты мышки в TPaintBox, а не абсолютные в форме.

TFileListBox -специализированный ListBox, в котором отображаются файлы из указанной директории (св-во Directory). На названия файлов можно наложить маску, для этого служит свойство Mask. Кроме того, в свойстве FileEdit можно указать объект TEdit для редактирования маски.

TDirectoryListBox -специализированный ListBox, в котором отображается структура директорий текущего диска. В свойстве FileList можно указать TFileListBox, который будет автоматически отслеживать переход в другую директорию.

TDriveComboBox -специализированный ComboBox для выбора текущего диска. Имеет свойство DirList, в котором можно указатьTDirectoryListBox, который будет отслеживать переход на другой диск.

TFilterComboBox - специализированный ComboBox для выбора маски имени файлов. Список масок определяется в свойстве Filter. В свойстве FileList указывается TFileListBox, на который устанавливается маска.

!!!! С помощью последних четырех компонент (TFileListBox, TDirectoryListBox, TDriveComboBox, TFilterComboBox) можно построить свой собственный диалог выбора файла, причем для этого не потребуется написать ни одной строчки кода.

TMediaPlayer -служит для управления мултимедйными устройствами (типа CD-ROM, MIDI и т.п.), выполнен в виде панели управления с кнопками Play, Stop, Record и др. Для воспроизведения может понадобиться как соответствующее оборудование, так и программное обеспечение. Подключение устройств и установка ПО производится в среде Windows. Например, для воспроизведения видео, записанного в формате AVI, в потребуется установить ПО MicroSoft Video (в Windows 3.0, 3.1, WFW 3.11).

TOLEContainer - контейнер, содержащий OLE объекты. Поддерживается OLE 2.02 Подробнее об этом - в последующих уроках.

TDDEClientConv,TDDEClientItem, TDDEServerConv, TDDEServerItem -4 объекта для организации DDE. С помощью этих объектов можно построить такое приложение, как DDE-сервер, и как DDE-клиент.

 

Страница VBX

Поскольку формат объектов из MicroSoft Visual Basic (VBX) является своего рода стандартом и существует большое количество библиотек таких объектов, то в Delphi была предусмотрена совместимость с этим форматом. VBX версии 1.0 можно включить в Палитру Компонент Delphi и использовать их как “родные” компоненты (в том числе, выбирать их в качестве предков и наследовать свойства и методы).

Задание 3.

1. Создайте новый проект, а в нем форму, где разместите основное меню с произвольным содержанием пунктов.

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

3. Используйте событие, обрабатываемое данным компонентом. Задайте значние свойства Interval=1000, что соответствует 1 секунде.

Procedure TForm1.Timer1Timer(Sender:TObject);

Var DateTime:TDateTime;

Begin

DateTime:=Time;

Label1.Caption:=TimeToStr(DateTime);

End;

4.Сохраните проект, запустите программу и проверьте ее работу.

 

Свойства в Delphi

 

Каждый компонент, который Вы помещаете на форму, имеет свое отражение в окне Инспектора Объектов (Object Inspector). Создание программы в Delphi сводится к “нанесению” компонент на форму (которая, кстати, также является компонентом) и настройке взаимодействия между ними путем:

· изменения значения свойств этих компонент

· написания адекватных реакций на события.

Свойство является важным атрибутом компонента. Для пользователя (программиста) свойство выглядит как простое поле какой-либо структуры, содержащее некоторое значение. Однако, в отличие от “просто” поля, любое изменение значения некоторого свойства любого компонента сразу же приводит к изменению визуального представления этого компонента, поскольку свойство инкапсулирует в себе методы (действия), связанные с чтением и записью этого поля (которые, в свою очередь, включают в себя необходимую перерисовку). Свойства служат двум главным целям. Во-первых, они определяют внешний вид формы или компонента. А во-вторых, свойства определяют поведение формы или компонента.

Существует несколько типов свойств, в зависимости от их “природы”, т.е. внутреннего устройства.

· значения которых являются числами или строками. Например, свойства Left и Top принимают целые значения, определяющие положение левого верхнего угла компонента или формы. Свойства Caption и Name представляют собой строки и определяют заголовок и имя компонента или формы.

· свойства, которые могут принимать значения из предопределенного набора (списка). Простейший пример - это свойство типа Boolean, которое может принимать значения True или False.

· свойства, которые поддерживают вложенные значения (или объекты). Object Inspector изображает знак “+” слева от названия таких свойств. Имеется два вида таких свойств: множества и комбинированные значения. Object Inspector изображает множества в квадратных скобках. Если множество пусто, оно отображается как []. Установки для вложенных свойств вида “множество” обычно имеют значения типа Boolean. Наиболее распространенным примером такого свойства является свойство Style с вложенным множеством булевых значений. Комбинированные значения отображаются в Инспекторе Объектов как коллекция некоторых величин, каждый со своим типом данных. Некоторые свойства, например, Font, для изменения своих значений имеют возможность вызвать диалоговое окно. Для этого достаточно щелкнуть маленькую кнопку с тремя точками в правой части строки Инспектора Объектов, показывающей данное свойство.

Delphi позволяет легко манипулировать свойствами компонент как в режиме проектирования (design time), так и в режиме выполнения программы (run time).

Рис. 1: Изменение размеров с помощью Дизайнера Форм

В режиме проектирования манипулирование свойствами осуществляется с помощью Дизайнера Форм (Forms Designer) или, как Вы уже видели, на страничке “Properties” Инспектора Объектов. Например, для того чтобы изменить свойства Height (высоту) и Width (ширину) кнопки, достаточно “зацепить” мышкой за любой ее угол и раздвинуть до нужного представления. Того же результата можно добиться, просто подставив новые значения свойств Height и Width в окне Object Inspector.

С другой стороны, в режиме выполнения пользователь (программист) имеет возможность не только манипулировать всеми свойствами, отображаемыми в Инспекторе Объектов, но и управлять более обширным их списком. В следующем разделе мы рассмотрим, как это делается.

 

 







Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычис­лить, когда этот...

Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом...

Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все...

Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.