Создание менеджера конфигурации Celestia
Создание
менеджера конфигурации Celestia
ДИПЛОМНАЯ
РАБОТА
СОДЕРЖАНИЕ
Введение
.
Аналитическая часть
.1
Описание предметной области
.2
Анализ подходов и методов решения задачи
.3
Разработка индивидуального (технического) задания
.
Специальная часть
.1
Обоснование и выбор программных средств обеспечения проектирования и разработки
структуры классов
.2
Математические методы и специальные алгоритмы решения
задачи.
Оценка сложности алгоритма решения задачи
.3.
Обоснование и выбор средств разработки, обоснование и выбор платформы
.
Проектная часть
.1
Информационное обеспечение
.1.1
Описание входной, выходной и промежуточной (расчетной) информации
.1.2
Проектирование и обоснование выбора структуры данных
.2
Программное обеспечение
.2.1
Функциональная схема ПО
.2.2
Структурная схема и описание программных модулей. Структура классов
.2.3
Разработка экранного интерфейса программы
.2.4
Схема взаимосвязи (взаимодействия) программных модулей
.2.5
Разработка и отладка программных модулей
.2.6
Тестирование ПО
.
Документация
.1
Описание технических требований к условиям эксплуатации программного продукта
(модуля)
.2
Программа и методика испытаний
.3
Руководство программиста и пользователя
.4
Расчет надежности программного продукта (модуля)
.
Экономическая часть
Основные
результаты
Заключение
Литература
Приложение
1. Текст программы
ВВЕДЕНИЕ
celestia конфигурация программный
алгоритм
Celestia - свободная трёхмерная астрономическая
программа, созданная на языке программирования C++, для платформ Microsoft
Windows, Linux и Mac OS X. Создана Крисом Лорелом и доступна на условиях GNU
General Public License (Универсальная Общественная Лицензия). Программа,
основываясь на Каталоге Гиппарха, позволяет пользователю рассматривать объекты
размерами от искусственных спутников до полных галактик в трёх измерениях,
используя технологию OpenGL. В отличие от большинства других виртуальных
планетариев, пользователь может свободно путешествовать по Вселенной. НАСА и
ЕКА используют Celestia в образовательных программах, а также как интерфейс для
программ анализа траекторий.
Проектируемый программный продукт является
инструментом для широкой конфигурации Celestia, управления особо важными
дополнениями, а также для настройки вспомогательного Lua-интерфейса.
Программный продукт будет разработан в виде программы для ОС Windows и его
использование значительно облегчит русскоязычным пользователям конфигурацию
Celestia, а также обеспечит новые возможности по управлению отображением
космических объектов. Разработанная программа будет распространяться в сети
Интернет для бесплатного скачивания.
Цель работы: разработка Менеджера конфигурации
Celestia, который даст пользователям простой и понятный интерфейс с широкими
возможностями для конфигурации Celestia, Lua-инструментов, а также управления
отображением космических объектов.
Для достижения поставленной цели были поставлены
следующие задачи:
•Изучить синтаксис и назначение
конфигурационного файла Celestia, а также конфигурационных файлов
Lua-инструментов;
Изучить синтаксис файлов описания космических
объектов для Celestia;
•Спроектировать интерфейс будущей программы;
•Выбрать среду разработки;
•Разработать программу «Менеджер конфигурации
Celestia»
•Провести тестирование и отладку программного
обеспечения;
1. АНАЛИТИЧЕСКАЯ ЧАСТЬ
.1 Описание предметной области
Определенные настройки присутствуют в самой
программе Celestia, однако этого недостаточно, поэтому разработчики
предусмотрели специальный конфигурационный файл «celestia.cfg», в котором можно
изменить множество дополнительных параметров. В этом файле указаны пути к
файлам каталогов стандартных объектов (звезды, планеты, спутники, кометы и
астероиды). Также там указаны имена файлов-текстур для звезд разного
спектрального класса, названия сценария, выполняемого при запуске программы,
демонстрационного сценария, названия папок для дополнений, названия шрифтов,
курсор и многие параметры, отвечающие за рендеринг космического пространства.
Все эти параметры пользователи могут настроить под свои нужны.
Для космического симулятора Celestia существует
дополнительный графический интерфейс «Lua Educational Tools», настройки
которого расположены в собственном конфигурационном файле «config.lua». В этом
файле пользователи могут изменить цветовую схему графического интерфейса,
отображение при старте отдельных элементов интерфейса, настроить формат даты,
положение компаса и выполнить некоторые другие настройки.
Синтаксис конфигурационных файлов естественно
англоязычный, все пояснения, которые в них находятся тоже англоязычные. Обычные
пользователи, любители астрономии, испытывают трудности в конфигурировании
Celestia и Lua Edu Tools, поскольку недостаточно хорошо знают английский язык.
Это стало первой причиной рождения идеи моей дипломной работы.
На просторах Сети можно найти множество
дополнений для Celestia. Это могут быть космические аппараты, планеты,
астероиды, звезды, а также модели отдельных явлений. При установке большого
количества дополнений в программу, ее работа может замедлиться, а некоторые
дополнения вообще не всегда могут быть удобны в силу своей специфики.
После обдумывания этих неудобств, было решено
создать некий конфигуратор, с помощью которого пользователи смогут легко менять
настройки Celestia, Lua Edu Tools, а также управлять отображением определенных
дополнений.
.2 Анализ подходов и методов решения задачи
В комплект со многими крупными программами и
играми идут специальные конфигураторы, которые позволяют изменять много
дополнительных параметров.
Конфигураторы могут иметь 3 вида интерфейса:
Командная строка
Графический интерфейс
Графический интерфейс со встроенной командной
строкой
Синтаксис команд, которые необходимо вводить в
командной строке должен быть англоязычным, а это снова возвращает нас к
проблеме понимания иностранного языка простыми пользователями.
Графический интерфейс представляет собой некую
оболочку, которую пользователь видит при запуске конфигуратора. По сути - это
привычное для нас приложение, имеющее окно, в котором могут быть расположены
надписи, поля ввода, картинки, чек-боксы, кнопки и прочие общепринятые элементы
интерфейса. Именно этот интерфейс я взял за основу при разработке своей
дипломной работы.
Менеджер конфигурации Celestia является
конфигуратором с графическим интерфейсом. Представляет собой окно со списком
параметров, размещенных на разных вкладках, в зависимости от их типа и
принадлежности. Навигация в виде вкладок очень удобна и проста как для
пользователей, так и для разработчика, так как используется всего одно окно
приложения. Все параметры и элементы интерфейса в программе расположены
аккуратно и симметрично. Надписи понятные и грамотные.
.3 Разработка индивидуального (технического)
задания
Наименование работы: «Разработка Менеджера
конфигурации Celestia»
Основанием для разработки программы для
конфигурации симулятора Вселенной стало открытие мною проекта «Celestia в
России», который занимается поддержкой и адаптированием Celestia для
русскоязычных пользователей.
Исполнителем разработки программы является
Кузнецов Александр.
Целью работы является создание конфигуратора,
который даст пользователям простой и понятный интерфейс с широкими
возможностями для настройки Celestia, Lua-инструментов, а также управления
отображением космических объектов.
В связи с поставленной целью, готовый
программный продукт должен был обладать следующими возможностями:
Изменение основных параметров Celestia
Изменение основных параметров Lua Edu Tools
Управление отображением в настоящем времени
большинства известных космических аппаратов, прекративших свое существование
Управление отображением сомнительных или спорных
с точки зрения науки дополнений
Импорт, экспорт настроек, а также восстановление
исходных настроек
Возможность самостоятельного перевода приложения
на другие языки (локализация)
Приятный и простой в управлении для пользователя
интерфейс.
Стадии и этапы разработки
Стадия
разработки
|
Этап
и краткое содержание работ
|
Исполнитель
|
Сроки
выполнения
|
Чем
заканчивается этап
|
|
|
|
Начало
|
Окончание
|
|
Начало
|
Изучение
синтаксиса конфигурационных файлов
|
Кузнецов
Александр
|
21/04/2014
|
21/04/2014
|
Создание
списка параметров, которые будет редактировать Менеджер конфигурации
|
Процесс
создания Менеджера конфигурации Celestia
|
Создание
макета (интерфейса) программы
|
Кузнецов
Александр
|
21/04/2014
|
22/04/2014
|
Полностью
готовая к программированию форма приложения
|
|
Реализация
функционала вкладок «Основные» и «Объекты и время»
|
Кузнецов
Александр
|
22/04/2014
|
24/04/2014
|
Готовы
и протестированы все функции перечисленных вкладок программы
|
|
Реализация
функционала вкладок «Lua-инструменты» и «Управление настройками»
|
Кузнецов
Александр
|
25/04/2014
|
27/04/2014
|
Готовы
и протестированы все функции перечисленных вкладок программы
|
|
Разработка
поддержки локализации программы
|
Кузнецов
Александр
|
28/04/2014
|
02/05/2014
|
Программа
переведена на английский язык, тем самым протестирована локализация
|
Итог
|
Публикация
Менеджера конфигурации Celestia на сайте проекта
|
Кузнецов
Александр
|
03/05/2014
|
04/05/2014
|
Включение
программы в комплект новой сборки Celestia EP v3.0
|
Требования к программе и программному
обеспечению
Для работоспособности данной программы нам
потребуется:
•Манипулятор типа мышь
•Процессор Intel Pentium II и выше
•Оперативной памяти не менее 128 Mb
•Любая 32-битная ОС семейства Windows
•Любая установленная версия космического
симулятора Celestia
Технико-экономические показатели
Ориентировочной экономической эффективностью
Менеджера конфигурации Celestia является простой в управлении и восприятии для
пользователя интерфейс, быстрое редактирование и сохранение необходимых
параметров, возможность восстановить исходные настройки в случае ошибок
пользователя.
Данная программа востребована и бесплатна.
Предполагаемой годовой потребностью программы составляет тот процент
пользователей Интернета, который интересуется астрономией и космическими
симуляторами. Экономическими преимуществами разработки выступают дешевизна,
эффективность и быстрота в управлении, доступность любому пользователю сети
интернет.
2. Специальная часть
.1 Обоснование и выбор программных средств
обеспечения проектирования и разработки структуры классов
Для разработки программного продукта - Менеджера
конфигурации Celestia, был использован язык программирования C++.++ -
компилируемый статически типизированный язык программирования общего
назначения. Поддерживает такие парадигмы программирования, как процедурное
программирование, объектно-ориентированное программирование и обобщённое
программирование. C++ обеспечивает модульность, раздельную компиляцию,
обработку исключений, абстракцию данных, объявление типов (классов) объектов,
виртуальные функции. Стандартная библиотека включает, в том числе,
общеупотребительные контейнеры и алгоритмы. C++ сочетает свойства как
высокоуровневых, так и низкоуровневых языков. В сравнении с его
предшественником - языком C, - наибольшее внимание уделено поддержке объектно-ориентированного
и обобщённого программирования.++ широко используется для разработки
программного обеспечения, являясь одним из самых популярных языков
программирования. Область его применения включает создание операционных систем,
разнообразных прикладных программ, драйверов устройств, приложений для
встраиваемых систем, высокопроизводительных серверов, а также развлекательных
приложений (игр).
Существует множество реализаций языка C++, как
бесплатных, так и коммерческих и для различных платформ. Например,
на
платформе
x86 это
GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и
другие.
2.2 Математические методы и специальные
алгоритмы решения задачи. Оценка сложности алгоритма решения задачи
Менеджер Конфигурации предназначен для упрощения
глубокой настройки Celestia ее пользователям, поэтому его работа заключается в
загрузке содержимого конфигурационных файлов, отображения текущих значений
параметров и сохранении изменений, внесенных пользователями в графическом
интерфейсе конфигуратора. Более подробно конфигурационные файлы описаны в
проектной части.
Для реализации данной задачи, создавались
строковые переменные, содержащие имя каждого параметра. При запуске Менеджера
конфигурации, в переменные типа TStringList, предназначенные для массива строк,
по очереди загружается содержимое конфигурационных файлов. Затем происходит
получение значений каждого параметра и их запись в соответствующие поля
графического интерфейса конфигуратора. Получение значений производится при
помощи функции Pos, которая ищет позицию имени определенного параметра в
содержимом файла конфигурации. Далее отбрасывается имя параметра, пробелы,
кавычки, и мы получаем значение параметра. После того, как Менеджер
конфигурации вывел значения всех параметров в поля графического интерфейса,
происходит очистка переменных TSTringList для экономии расхода памяти.
После того, как пользователь сделал изменения в
значениях параметров, он нажимает кнопку «Сохранить» на той вкладке, на которой
делал изменения. Обработчик данной кнопки снова загружает содержимое
конфигурационного файла в переменную, далее аналогично происходит поиск позиций
имен параметров, только теперь программа не выводит значения на экран, а по
очереди записывает новые значения параметров в файл конфигурации. После
успешной записи значений, пользователю выводится сообщение об успешном
сохранении настроек, а переменные очищаются.
При восстановлении исходных настроек, происходит
замена значений в полях графического интерфейса конфигуратора на стандартные
(заложенные для этой функции изначально), затем автоматическое нажатие кнопок
сохранения на всех вкладках с блокировкой сообщений об успешном сохранении
настроек. Вместо него выводится сообщение об успешном восстановлении исходных
настроек.
Подобный метод поиска необходимых значений в
текстовых файлах называется парсингом или разбором содержимого текстовых
файлов. Вся моя дипломная работа построена на этом методе. Однако для
локализации, а также импорта и экспорта настроек я использовал упрощенный
вариант парсинга - ini файлы, поскольку не вижу необходимости изобретать
велосипед. Для ini файлов в C++ Builder XE3 предусмотрен специальный
подключаемый заголовочный файл, включающий в себя все необходимые функции для
создания, чтения и удаления ini файлов. Практически во всех программах ini
файлы используются для хранения каких-либо данных программы.
В моем случае при экспорте настроек создается
.cfg файл (тот же ini, просто выбрано другое расширение) с именами и значениями
параметров, чтобы впоследствии этот файл можно было импортировать и получить
все сохраненные значения.
Локализация построена также на методе ini
файлов, только расширение у них теперь .lng (от слова language). При запуске,
Менеджер конфигурации ищет lng файл текущей локализации, затем читает его и
устанавливает локализованные значения для всех элементов интерфейса программы
(надписи, сообщения и прочее).
2.3 Обоснование и выбор средств разработки,
обоснование и выбор платформы
Платформой для Менеджера конфигурации Celestia
послужили полученные знания языка программирования C++.
Как уже описано выше, существует множество
реализаций языка C++. Для разработки своей дипломной работы, была выбрана среда
разработки Embarcadero C++ Builder XE3, поскольку она имеет множество отличий
от устаревшей Borland C++ Builder 6, которой нас обучают в колледже:
Обновлен интерфейс, стало намного удобнее писать
код, управлять формой, компонентами и их свойствами
Бинарные файлы приложений сохраняются в
подпапке, что исключает засорение корневой папки исходного кода «мусорными»
файлами
Добавлены новые компоненты (сетевые и др.)
Добавлена поддержка Юникода, которая
понадобилась мне при разработке дипломной работы
Добавлена поддержка изображений с прозрачным
фоном *.png
И множество других изменений, которые здесь не
уместятся.
3. Проектная часть
.1 Информационное обеспечение
.1.1 Описание входной, выходной и промежуточной
(расчетной) информации
Приложение запускается единственным исполняемым
файлом Celestia_Config_Manager.exe. Этот файл должен находиться в корневой
директории любой версии космического симулятора Celestia, поскольку управляет
данными в составе Celestia. Используемые в программе входные данные
представляют собой файлы конфигурации Celestia, Lua-инструментов и файлы
описания дополнений. На экран при этом выводятся значения различных параметров
для редактирования.
Данные, находящиеся в файлах конфигурации имеют
следующие типы:- целочисленное значение- значение с плавающей запятой-
строковое значение- логическое значение
Таблица параметров основного конфигурационного
файла Celestia «celestia.cfg»:
Параметр
|
Тип
|
Описание
|
ExtrasDirectories
|
String
|
Указывает
название папок с дополнениями
|
OrbitPathSamplePoints
|
Integer
|
Указывает
кол-во точек, по которым рисуются орбиты объектов
|
RingSystemSections
|
Integer
|
Указывает
кол-во сегментов, по которым рисуются кольца вокруг планет
|
Cursor
|
String
|
Указывает
название курсора, используемого в Celestia
|
ScriptScreenshotDirectory
|
String
|
Указывает
папку для сохранения скриншотов из .celx сценариев
|
ScriptSystemAccessPolicy
|
String
|
Указывает
действие при обнаружении потенциально опасных действий в .celx сценариях
|
InitScript
|
String
|
Стартовый
сценарий
|
DemoScript
|
String
|
Демонстрационный
сценарий
|
RotateAcceleration
|
Float
|
Указывает
скорость вращения камеры наблюдателя
|
MouseRotationSensitivity
|
Float
|
Указывает
чувствительность мыши при вращении
|
Таблица параметров основного конфигурационного
файла Lua Universal Tools «config.lua»:
Параметр
|
Тип
|
Описание
|
show_lua_universal_tools_v2
|
Bool
|
Включать
панель при старте Celestia
|
enable_info
|
Bool
|
Информацию
об объектах
|
enable_coordinates
|
Bool
|
Координаты
объектов
|
enable_magnification
|
Bool
|
Режим
«Увеличение»
|
enable_HR
|
Bool
|
Диаграмма
Герцшпрунга-Рассела
|
enable_Kepler_param
|
Bool
|
Кеплеровы
данные
|
enable_virtual_pad
|
Bool
|
Включать
джойстик
|
enable_compass
|
Bool
|
Включать
компас
|
show_local_time
|
Bool
|
Показывать
местное время
|
center_compass
|
Bool
|
Компас
по центру
|
alt_azimuthal_mode
|
Bool
|
Режим
Альт-Азимут
|
date_format
|
String
|
Формат
даты
|
custom_goto_duration
|
Integer
|
Длительность
перелета к объекту
|
cFrameFill
|
Float
|
Цвет
рамки
|
cDisplFill
|
Float
|
Цвет
текста
|
cPanelFill
|
Float
|
Цвет
фона панелей
|
Все указанные параметры редактируются Менеджером
конфигурации.
Таблица файлов, входящих в проект:
Наименование
|
Обозначение
|
Примечание
|
Celestia_Config_Manager.cbproj
|
Файл
проекта
|
Связывает
все файлы приложения
|
Celestia_Config_Manager.cpp
|
Файл
модуля
|
Текст
программы
|
Celestia_Config_ManagerPCH1.h
|
Файл
модуля
|
Текст
программы
|
Celestia_Config_Manager_Icon.ico
|
Иконка
|
Иконка
программы
|
Celestia_Config_Manager.res
|
Файл
ресурсов
|
Содержит
пиктограммы, версию и т.д.
|
Unit1.cpp
|
Программный
модуль для MainForm
|
Определяет
функциональность формы
|
Unit1.dfm
|
Файл
для MainForm
|
Список
свойств компонентов формы
|
Unit1.h
|
Файл
модуля для MainForm
|
Текст
модулей с MainForm
|
manager\links.ini
|
INI
файл
|
Содержит
обновляемые ссылки
|
manager\language\Russian.lng
|
Языковой
файл
|
Содержит
строки русскоязычного перевода программы
|
manager\language\English.lng
|
Языковой
файл
|
Содержит
строки англоязычного перевода программы
|
manager\help\
Russian.chm
|
Файл
справки
|
Русскоязычная
справка по программе
|
.1.2 Проектирование и обоснование выбора
структуры данных
Менеджер конфигурации Celestia спроектирован для
работы непосредственно с файлами космического симулятора, являющимися для него
источником данных, своего рода базой данных. В связи с этим, при разработке
конфигуратора, было необходимо учитывать синтаксис и структуру этих файлов,
поскольку изменять их нельзя - это вызовет сбой в работе космического
симулятора.
Обсуждать структуру данных в конфигурационных
файлах Celestia и Lua-инструментов я считаю неприемлемым, она задумана
разработчиками и таковой останется, но, на мой взгляд, выбранная разработчиками
Celestia структура обладает следующими достоинствами:
Возможность комментировать строки
Подробное описание каждого параметра
Разделение параметров по категории применения
.2 Программное обеспечение
.2.1 Функциональная схема ПО
На функциональной схеме Менеджера конфигурации
Celestia орошо продемонстрировано взаимодействие всех модулей программы.
.2.2 Структурная схема и описание программных
модулей.
Модуль локализации - получает англоязычный
идентификатор языка системы, на которой запущена программа, затем ищет в папке
manager\language файл с названием, равным этому идентификатору и расширением
.lng. В этом файле содержится перевод всех надписей, строк и сообщений,
используемых в программе на соответствующий язык. Если файла перевода для
данного языка нет, загружается язык по умолчанию - английский.
Модуль обработки параметров - получает версию
Celestia, установленной у пользователя, затем поочередно загружает
конфигурационные файлы, получает значения параметров и выводит на экран. От
версии Celestia зависит расположение определенных конфигурационных файлов или
дополнений.
Модуль сохранения параметров - сохраняет
значения параметров обратно в конфигурационные файлы.
Модуль управления настройками - содержит 3
функции: экспорт, импорт и восстановление исходных настроек. Экспорт настроек
сохраняет текущие значения всех параметров в .cfg файл. Этот cfg файл можно
импортировать на другом ПК или после переустановке ОС, чтобы получить
предпочитаемые настройки. При восстановлении исходных настроек для всех
параметров установятся значения по умолчанию - т.е. те, которые были при первом
запуске космического симулятора.
.2.3 Разработка экранного интерфейса программы
Экранный интерфейс программы во многом
определяет удобство работы пользователя и является одним из важных факторов,
влияющих на эффективность его труда. Программа, выполняющая все возложенные на
нее функции, обладающая высоким быстродействием может быть полностью
непригодной для работы из-за неприемлемого интерфейса с пользователем.
Наиболее практичными и удобными с точки зрения
пользователя можно считать системы, имеющие экранный интерфейс, построенный на
основе системы окон.
Для пользователей Менеджера конфигурации
Celestia разработан простой и удобный интерфейс в виде одного окна,
разделенного на 5 вкладок, в которых расположены элементы редактирования
параметров (поля, выпадающие списки, чек-боксы и радио-кнопки), а также
различные пояснения к ним. Общий стиль оформления приложения соответствуюет
интерфейсу окон Windows, т.е. на разных версиях Windows (XP, 7, 8) стиль
программы будет отличаться.
3.2.4 Схема взаимосвязи (взаимодействия)
программных модулей.
3.2.5 Разработка и отладка программных модулей
Разработка Менеджера конфигурации Celestia
происходила поэтапно: сначала был разработан макет интерфейса, затем был по
очереди реализован функционал каждой вкладки. Естественно работа каждой вкладки
была тщательно протестирована на предмет ошибок. После этого, было принято
решение оптимизировать некоторые программные модули, с целью уменьшения расхода
памяти, ускорения работы программы и сокращения количества строк исходного
кода. Эта идея появилась после тщательного изучения кода своей же программы,
после чего было выявлено, что некоторые операции можно реализовать более просто
и более правильно с точки зрения программирования. И в самом конце была начата
разработка локализации, являющейся достаточно сложной задачей, поскольку
затрагивает абсолютно все программные модули.
Первым модулем, который был оптимизирован, стала
вкладка «Объекты и время». В обработчиках проверки и сохранения настроек для
дополнений и космических аппаратов, находились поочередные проверки наличия
дополнений и проверка параметра Ending у космических аппаратов. Эти проверки
представляют собой следующее:
Проверка наличия папки с дополнением
Выставление чек-боксу галочки в зависимости от
наличия дополнения у пользователя
Вывод ссылки для скачивания некоторых дополнений
при их отсутствии
Загрузка содержимого ssc файла и проверка
параметра Ending (для космических аппаратов)
В коде программы для каждого объекта были
написаны подобные операции. Было решено оптимизировать обработчик, написав
универсальные функции проверки дополнений и проверки космических аппаратов с
входными параметрами: адрес к папке дополнения, адрес к ssc файлу (для
космических аппаратов) и название чек-бокса.
В итоге, получилось 2 небольшие функции, и их
вызов в обработчике для дополнений и космических аппаратов, при этом код
обработчика сократился на ~300 строк. То же самое было проделано и для операций
сохранения параметров дополнений и космических аппаратов.
Далее был изучен модуль «Восстановление исходных
настроек». Его обработчик включал в себя операции, подобные тем, что
выполняются при сохранении настроек каждой вкладки, за исключением того, что
значения параметров устанавливаются на заданные по умолчанию.
Для его оптимизации, была создана логическая
переменная и условие, отключающее сообщение об успешном сохранении настроек
(кнопки «Сохранить») в необходимом случае. Затем был полностью очищен
обработчик восстановления исходных настроек, и написан код, который
устанавливает значения по умолчанию в графическом интерфейсе, затем
устанавливает значение истины для логической переменной и просто по очереди
выполняет программное нажатие кнопок «Сохранить».
В итоге код программы уменьшился еще на ~200
строк, к тому же при добавлении новых объектов или параметров на любые вкладки
в будущем, мне больше не придется писать новые операции для восстановления
исходных настроек - нужно будет лишь добавить одну строчку установки значения
по умолчанию для нового параметра.
Некоторые правки были внесены также в импорт и
экспорт настроек, операции установки значений реализованы аналогично
восстановлению исходных настроек, за исключением источника данных.
В последнюю очередь была реализована локализация
приложения. Для этого планировалось использовать ini файлы и класс для работы с
ними, называемый TIniFile. Однако обнаружилось, что он не поддерживает Юникод,
а значит, невозможно будет сделать корректный вывод иностранных символов. Для
этого был использован класс TMemIniFile, у которого более широкие возможности.
Локализация реализована следующим образом:
Создан файл English.lng, в котором содержатся
языковые строки на английском языке
Реализовано получение англоязычного
идентификатора языка ОС пользователя, например Russian, English и т.д.
Реализована загрузка языковых строк из
соответствующего языку файла локализации и установка всем элементам интерфейса
локализованных надписей.
В случае отсутствия локализованного файла,
загружаются англоязычные надписи.
Создан файл Russian.lng
Справка по программе перенесена в папку
manager\help и именуется аналогично файлам локализации, за исключением
расширения.
Итогом стала возможность локализации приложения
на любой язык всем пользователям, знающим английский. Для локализации
необходимо скопировать файл English.lng, переименовать его под свой язык,
выполнить перевод всех строк на свой родной язык в текстовом редакторе.
.2.6 Тестирование ПО
В процессе тестирования программного продукта,
ставилась цель проверить работоспособность программы на различных версиях
Celestia и Celestia EP, корректную локализацию, отсутствие ошибок и их
возникновения.
Основными операциями при тестировании Менеджера
конфигурации Celestia являлись: изменение и сохранение параметров на каждой
вкладке, запуск Менеджера с включенным и выключенным Интернетом для проверки
функции загрузки ссылок с сервера.
После запуска программы на Celestia 1.6.1, мы
видим:
Как видите, на вкладке «Объекты и время»
недоступны практически все объекты. Причиной является их отсутствие в
стандартном дистрибутиве Celestia 1.6.1.
инструменты также отсутствуют в стандартной
комплектации космического симулятора.
Итак, мы открываем файл celestia.cfg и видим,
например:
Изменяем в Менеджере пару значений:
Видим, что в файле значения также изменились:
Из этого можно сделать вывод, что Менеджер
конфигурации Celestia корректно работает на Celestia 1.6.1. Теперь протестируем
программу на Celestia EP v3.0.
После запуска программы на Celestia 1.6.1, мы
видим:
Как видите, на вкладке «Объекты и время» все
объекты стали доступны, потому что они входят в комплект расширенной сборки
Celestia EP v3.0.
В комплект Celestia EP v3.0 также входит Lua
Universal Tools, поэтому для редактирования стали доступны определенные
параметры.
Итак, мы открываем файл config.lua:
Изменяем в Менеджере, например цветовую схему:
В файле видим изменения:
Таким образом, мы протестировали продукт на двух
разных версиях космического симулятора Celestia, увидели его корректную работу
и отсутствие ошибок.
4. Документация
.1 Описание технических требований к условиям
эксплуатации программного продукта (модуля)
Для работоспособности данной программы нам
потребуется:
•Манипулятор типа мышь
•Процессор Intel Pentium II и выше
•Оперативной памяти не менее 128 Mb
•Любая 32-битная ОС семейства Windows
•Любая установленная версия космического
симулятора Celestia
.2 Программа и методика испытаний
Объектом испытания является, данная дипломная
работа, которая представляет собой конфигуратор для космического симулятора
Celestia. Программа может применяться абсолютно любыми пользователями Celestia.
Программа позволяет редактировать множество дополнительных параметров Celestia,
Lua-инструментов, а также управлять отображением различных объектов, включая
космические аппараты.
Целью испытания стало, как и для любого
программного продукта - корректное выполнение своих функций. Для этого
необходимо осуществить проверку программы. Проверка программы - это проверка
правильности реализации заданного алгоритма путем выполнения программы на
вычислительной технике (ЕСПД).
Требования к программе. Программа должна легко
запускаться. По нажатию кнопок, программа должна выполнять соответствующие
действия. Входные данные программы - это конфигурационные файлы Celestia и
Lua-инструментов, а также ssc файлы дополнений. Выходными данными является
вывод на экран значений необходимых параметров из этих файлов. Если полученные
результаты не имеют отклонений, то программа работает правильно. Проверка
программы представляет собой тестирование. Тест - это последовательность наборов
исходных данных, которые подаются на вход изделия и соответствующие им эталоны
правильных результатов, которые должны быть получены на выходе.
Средства и порядок испытаний. Минимальный набор
технических и программных средств используемых во время испытаний: манипулятор
типа мышь, процессор Intel Pentium II и выше, не менее 128 Mb ОЗУ, любая
32-битная ОС семейства Windows, любая установленная версия космического
симулятора Celestia.
Методы испытаний. Методом проверки корректности
работы программы является тестирование. По результатам проведенного
тестирования можно сказать, что программа работает корректно.
.3 Руководство программиста
Назначение и условия применения программы
В Celestia, как и в любой другой программе
присутствуют настройки, однако их бывает недостаточно, поэтому разработчики
предусмотрели специальный конфигурационный файл «celestia.cfg», в котором можно
изменить множество дополнительных параметров. Все эти параметры пользователи
могут настроить под свои нужны.
Для космического симулятора Celestia существует
дополнительный графический интерфейс «Lua Educational Tools», настройки
которого расположены в собственном конфигурационном файле «config.lua».
Синтаксис конфигурационных файлов естественно
англоязычный, все пояснения, которые в них находятся тоже англоязычные. Обычные
пользователи, любители астрономии, испытывают трудности в конфигурировании
Celestia и Lua Edu Tools, поскольку недостаточно хорошо знают английский язык.
Это стало первой причиной рождения идеи моей дипломной работы.
На просторах Сети можно найти множество
дополнений для Celestia. Это могут быть космические аппараты, планеты,
астероиды, звезды, а также модели отдельных явлений. При установке большого
количества дополнений в программу, ее работа может замедлиться, а некоторые
дополнения вообще не всегда могут быть удобны в силу своей специфики.
Обдумав эти неудобства, было решено создать
некий конфигуратор, с помощью которого пользователи смогут легко менять
настройки Celestia, Lua Edu Tools, а также управлять отображением определенных
дополнений.
.Технические характеристики
.1. Постановка задачи.
Целью работы является создание конфигуратора,
который даст пользователям простой и понятный интерфейс с широкими
возможностями для настройки Celestia, Lua-инструментов, а также управления
отображением космических объектов.
В связи с поставленной целью, готовый
программный продукт должен был обладать следующими возможностями:
Изменение основных параметров Celestia
Изменение основных параметров Lua Edu Tools
Управление отображением в настоящем времени
большинства известных космических аппаратов, прекративших свое существование
Управление отображением сомнительных или спорных
с точки зрения науки дополнений
Импорт, экспорт настроек, а также восстановление
исходных настроек
Возможность самостоятельного перевода приложения
на другие языки (локализация)
Приятный и простой в управлении для пользователя
интерфейс.
.2. Описание алгоритма.
Общий алгоритм выполнения программы, можно
представить в виде структурной схемы изображенной на рис. 1.
Словесно эту схему можно описать как следующую
последовательность действий:
Основные настройки
Папки дополнений
Сценарии
Курсор и др. параметры
Сохранение настроек
Настройки объектов и времени
Отображение отдельных объектов
Отображение космических аппаратов
Сохранение настроек
Настройки Lua-инструментов
Автоматический показ элементов Lua Edu Tools
Цветовая схема и др. параметры
Сохранение настроек
Управление настройками
Импорт настроек
Экспорт настроек
Восстановление исходных настроек
. Общие сведения
Менеджер конфигурации Celestia является
конфигуратором с графическим интерфейсом. Представляет собой окно со списком
параметров, размещенных на разных вкладках, в зависимости от их типа и
принадлежности. Навигация в виде вкладок очень удобна и проста как для пользователей,
так и для разработчика, так как используется всего одно окно приложения. Все
параметры и элементы интерфейса в программе расположены аккуратно и
симметрично. Надписи понятные и грамотные.
Функциональное назначение.
Менеджер конфигурации Celestia предназначен для
простой, но в то же время глубокой настройки космического симулятора Celestia,
его дополнений и дополнительного инструмента Lua Edu Tools (Lua Universal
Tools).
Исходный код.
Поскольку космический симулятор Celestia
является бесплатной программой с открытым исходным кодом, по окончанию
разработки данного программного продукта, исходный код данной дипломной работы
стал открытым для всех пользователей сети Интернет.
Исходный код Менеджера конфигурации
находится в репозитории по адресу: <https://bitbucket.org/Alexell/celestia-config-manager>
Используемые технические средства.
Для работоспособности данной
программы нам потребуется:
•Манипулятор типа мышь
•Процессор Intel Pentium II и выше
•Оперативной памяти не менее 128 Mb
•Любая 32-битная ОС семейства
Windows
•Лбая установленная версия
космического симулятора Celestia
Вызов и загрузка.
Приложение запускается единственным
исполняемым файлом Celestia_Config_Manager.exe. Этот файл должен находиться в
корневой директории любой версии космического симулятора Celestia, поскольку
управляет данными в составе Celestia.
Входные данные.
Используемые в программе входные
данные представляют собой файлы конфигурации Celestia, Lua-инструментов и файлы
описания дополнений. На экран при этом выводятся значения различных параметров
для редактирования.
.1 Организация входных и выходных
данных
В моей дипломной работе ввод данных
реализован с помощью визуальных компонентов (VCL), добавленных на форму. Это
поля ввода (Edit), выпадающие списки (ComboBox), радио-кнопки (RadioButton) и
чек-боксы (CheckBox).
Вывод данных происходит в те же
компоненты графического интерфейса, поскольку приложение является
конфигуратором.
. Удаление программы
Необходимость удалить Менеджер
конфигурации Celestia может возникнуть всего по трем причинам: либо
пользователь больше в нем не нуждается, либо хочет обновить его, либо хочет
переустановить Celestia.
Все программы удаляются одинаково:
заходим в меню Пуск->Все программы и ищем папку с названием нужной нам
программы или разработчика, раскрываем ее и внутри всегда есть пункт «Удаление
программы». Он может называться по-разному, в зависимости от языка программы и
от производителя. Удаление происходит с помощью деинсталлятора, который удаляет
все файлы программы, очищает записи реестра, связанные с ней. Любую программу
можно так же удалить через меню «Установка и удаление программ», иногда это
бывает гораздо удобнее.
А чтобы обновить Менеджер, совсем
необязательно его удалять: достаточно просто скачать с нашего сайта архив с
программой и распаковать в корневую папку Celestia. При распаковке, все
необходимые файлы будут заменены на новые.
Руководство пользователя
Назначение программы
В Celestia, как и в любой другой
программе присутствуют настройки, однако их бывает недостаточно, поэтому
разработчики предусмотрели специальный конфигурационный файл «celestia.cfg», в
котором можно изменить множество дополнительных параметров. Все эти параметры
пользователи могут настроить под свои нужны.
Для космического симулятора Celestia
существует дополнительный графический интерфейс «Lua Educational Tools»,
настройки которого расположены в собственном конфигурационном файле
«config.lua».
Синтаксис конфигурационных файлов
естественно англоязычный, все пояснения, которые в них находятся тоже
англоязычные. Обычные пользователи, любители астрономии, испытывают трудности в
конфигурировании Celestia и Lua Edu Tools, поскольку недостаточно хорошо знают
английский язык. Это стало первой причиной рождения идеи моей дипломной работы.
На просторах Сети можно найти
множество дополнений для Celestia. Это могут быть космические аппараты,
планеты, астероиды, звезды, а также модели отдельных явлений. При установке
большого количества дополнений в программу, ее работа может замедлиться, а
некоторые дополнения вообще не всегда могут быть удобны в силу своей специфики.
Обдумав эти неудобства, было решено
создать некий конфигуратор, с помощью которого пользователи смогут легко менять
настройки Celestia, Lua Edu Tools, а также управлять отображением определенных
дополнений.
.Технические характеристики
Для работоспособности данной
программы, требуется:
•Манипулятор типа мышь
•Процессор Intel Pentium II и выше
•Оперативной памяти не менее 128 Mb
•Любая 32-битная ОС семейства
Windows
•Любая установленная версия
космического симулятора Celestia
. Общие сведения
Менеджер конфигурации Celestia
является конфигуратором с графическим интерфейсом. Представляет собой окно со
списком параметров, размещенных на разных вкладках, в зависимости от их типа и
принадлежности. Навигация в виде вкладок очень удобна и проста как для
пользователей, так и для разработчика, так как используется всего одно окно
приложения. Все параметры и элементы интерфейса в программе расположены
аккуратно и симметрично. Надписи понятные и грамотные.
Функциональное назначение.
Менеджер конфигурации Celestia
предназначен для простой, но в то же время глубокой настройки космического
симулятора Celestia, его дополнений и дополнительного инструмента Lua Edu Tools
(Lua Universal Tools).
.4 Расчет надежности программного продукта
(модуля)
Имя модуля: Локализация;
Имя вызывающего модуля: главный
модуль;
Входные параметры: языковые lng
файлы;
Выполняемые функции: обработка
языковых файлов, отображение локализованных надписей и сообщений программы;
Выходные данные: локализованные
надписи, ссылки и сообщения;
Особенности: отображение
локализованной программы для языка пользователя.
Имя модуля: Основные настройки;
Имя вызывающего модуля: главный
модуль;
Входные параметры: конфигурационный
файл celestia.cfg;
Выполняемые функции: отображение и
изменение параметров основного файла celestia.cfg.
Выходные данные: измененный файл
celestia.cfg;
Особенности: выводит на экран
текущие значения параметров; сохраняет измененные параметры в конфигурационный
файл.
Имя модуля: Настройки объектов и
времени;
Имя вызывающего модуля: главный
модуль;
Входные параметры: ssc файлы
описания объектов;
Выполняемые функции: отображение
состояния объектов и его изменение по запросу пользователя;
Выходные данные: измененные ssc
файлы описания объектов;
Особенности: выводит на экран
текущее состояние объектов; сохраняет измененное состояние для каждого объекта
в соответствующий ssc файл.
Имя модуля: Lua-инструменты;
Имя вызывающего модуля: главный
модуль;
Входные параметры: файл конфигурации
config.lua;
Выполняемые функции: отображение и
изменение параметров конфигурационного файла config.lua;
Выходные данные: измененный файл
конфигурации config.lua;
Особенности: выводит на экран
текущие значения параметров; сохраняет измененные параметры в конфигурационный
файл.
Имя модуля: Управление настройками;
Имя вызывающего модуля: главный
модуль;
Входные параметры: все
конфигурационные и ssc файлы, используемые другими модулями;
Выполняемые функции: импорт, экспорт
и восстановление исходных настроек;
Выходные данные: все измененные
конфигурационные и ssc файлы, используемые другими модулями; обновленные
значения параметров на экране программы;
Особенности: выполняет импорт
настроек из конфигурационного файла, экспорт или восстановление исходных
настроек по запросу пользователя.
5. Экономическая часть
Основные результаты
Затраты на создание программного
продукта складываются из расходов по оплате труда разработчика программы и
расходов по оплате машинного времени при отладке программы:
ЗСПП= ЗЗПСПП+ ЗМЕСПП+ ЗОБЩ,
где
ЗСПП - затраты на создание
программного продукта;
ЗЗПСПП - затраты на оплату труда
разработчика программы;
ЗМЕСПП - затраты на оплату машинного
времени;
ЗОБЩ - общие затраты.
Таким образом, получим:
ЗСПП=389,8 +7191,6+2062,5+14292=23
935,9 руб.
Расходы на оплату труда разработчика
программы.
Расходы на оплату труда разработчика
программы определяются путем умножения трудоёмкости создания программного
продукта на среднюю часовую оплату программиста (с учётом коэффициента
отчислений на социальные нужды):
ЗЗПСПП = t*Тчас.
Таким образом, получим:
ЗЗПСПП = 38,98*10=389,8 руб.
Расчёт трудоёмкости создания
программного продукта.
Трудоёмкость разработки программного
продукта можно определить следующим образом:
= tИ+ tА+ tБ+ tП+ tД+ tОТ
гдеИ - затраты труда на подготовку
описания задачи;А - затраты труда на разработку алгоритма решения задачи;Б -
затраты труда на разработку структурной схемы алгоритма решения задачи;П -
затраты труда на составление программы по готовой структурной схеме;Д - затраты
труда на подготовку документации задачи;ОТ - затраты труда на отладку программы
на ЭВМ при комплексной отладке задачи;
Составляющие затрат, в свою очередь
можно вычислить через условное число операторов Q. Например, в нашем случае
число операторов в отлаженной программе Q = 2030.
Таким образом, получим:
=
40,6+10,15+10,15+10,15+8,87+38=117,92 чел/час.
Расчёт затрат труда на подготовку
описания.
Оценить затраты труда на подготовку
описания задачи не возможно, т.к. это связано с творческим характером работы,
вместо этого оценим затраты труда на изучение описания задачи с учётом
уточнения описания и квалификации программиста определяются:
И = Q*B / (250…350*K),АОТ - затраты
труда на отладку программы на ЭВМ при автономной отладке одной задачи;-
коэффициент увеличения затрат труда вследствие недостаточного описания задачи,
уточнений и некоторой не доработки, 1, 2...5;- коэффициент квалификации
разработчика, для работающих до 2 лет, K = 0, 8;
В связи с тем, что при изучении
описания данной задачи потребовалось много уточнений и доработок в описании
коэффициент B принимаем равным 4.
Таким образом, получим:
И = 2030*4/(250*0,8)=40,6 чел/час.
Расчёт затрат труда на разработку
алгоритма.
Затраты труда на разработку
алгоритма решения задачи:
А = 2030/(250*0,8)=10,15 чел/час.
Расчёт затрат труда на разработку
структурной схемы.
Затраты труда на разработку
структурной схемы алгоритма решения задачи вычислим следующим образом:
Б =2030/(250*0,8)= 10,15 чел/час.
Расчёт затрат труда на составление
программы.
Затраты труда на составление
программы по готовой структурной схеме:
П = 2030/(250*0,8)= 10,15 чел/час.
Расчёт затрат труда на отладку
программы.
Затраты труда на отладку программы
на ЭВМ при комплексной отладке задачи:
АОТ = 2030/(100*0,8)=25,37 чел/час.
Отсюда
ОТ = 1,5*36,84 = 1,5*25,37= 38
чел/час.
Расчёт затрат труда на подготовку
документации.
Затраты труда на подготовку
документации по задаче определяются:
Д = tДP+ tДO,
гдеДP - затраты труда на подготовку
материалов в рукописи;ДО - затраты на редактирование, печать и оформление
документации.
Таким образом, получим:
Д = 5,07+3,8=8,87 чел/час.ДР = 2030/
(500*0,8) =5,07 чел/час;ДО = 0,75*5,07= 3,8 чел/час.
Итак, общую трудоёмкость
программного продукта можем рассчитать:
=
40,6+10,15+10,15+10,15+8,87+38=117,92 чел/час.
Расчёт средней зарплаты
программиста.
Средняя зарплата программиста в
современных рыночных условиях может варьироваться в широком диапазоне. Для
примера расчёта возьмём среднюю часовую оплату труда, которая Tчас = составляет
10 руб. /час, что составляет 1660 руб. /мес. при 8-ми часовом рабочем дне и
5-ти дневной рабочей неделе. Затраты на оплату труда программиста состоят из
зарплаты программиста и отчислений на социальные нужды. Отчисления на
социальные нужды включают в себя: пенсионный фонд, медстрах, соцстрах, фонд
занятости, сбор на образование.
Итого отчисления на социальные нужды
составляют 34%. Отсюда затраты на оплату труда программиста составляют:
ЗЗПСПП = 117,92*10*1,34 = 1580,128
руб.
Затраты на оплату машинного времени.
Затраты на оплату машинного времени
при отладке программы определяются путём умножения фактического времени отладки
программы на цену машино-часа арендного времени:
ЗМЕСПП = Счас * tЭВМ.
Таким образом, получим:
ЗМЕСПП = 182,9*39,32=7191,6 руб.
Расчёт фактического времени отладки.
Фактическое время отладки вычислим
по формуле:
ЭВМ = tП+ tДО+ tОТ ;
Таким образом, получим:ЭВМ =
10,15+3,8+25,37=39,32 часа.
Расчёт цены машино-часа.
Цену машино-часа найдём по формуле:
Счас = ЗЭВМ / ТЭВМ
Таким образом, получим:
Счас = 326 445,71/1784=182,9 руб.
Расчёт годового фонда времени работы
ПЭВМ IBM PC AT.
Общее количество дней в году - 365.
Число праздничных и выходных дней -
116.
Рабочих недель - 52.
Время простоя в профилактических
работах определяется как еженедельная профилактика по 4 часа.
Итого годовой фонд рабочего времени
ПЭВМ составляет:
ЭВМ = 8*(365-116)-52*4 = 1784 часа.
Расчёт полных затрат на эксплуатацию
ЭВМ.
Полные затраты на эксплуатацию ЭВМ
можно определить по формуле:
ЗЭВМ = (ЗЗП+ ЗАМ+ ЗЭП+ ЗЕМ+ ЗТР+ ЗПР),
где
ЗЗП - годовые издержки на заработную
плату обслуживающего персонала, руб./год;
ЗАМ - годовые издержки на
амортизацию, руб./год;
ЗЭП - годовые издержки на
электроэнергию, потребляемую ЭВМ, руб./год;
ЗЕМ - годовые издержки на
вспомогательные материалы, руб./год;
ЗТР - затраты на текущий ремонт
компьютера, руб./год;
ЗПР - годовые издержки на прочие и
накладные расходы, руб./год.
Таким образом, получим:
ЗЭВМ
=321600+2062,5+1381,212+165+825+412,50=326 445,71 руб.
Амортизационные отчисления.
Сумма годовых амортизационных
отчислений определяется по формуле:
ЗАМ=СБАЛ*НАМ
где
СБАЛ - балансовая стоимость
компьютера,
НАМ - норма амортизации.
Таким образом, получим:
ЗАМ=16500*0,125=2062,5 руб.
Согласно постановления совета
министров СССР от 22 октября 1990 года № 1072 «О единых нормах амортизационных
отчислений на полное восстановление основных фондов народного хозяйства СССР»
НАМ =12,5%. Балансовая стоимость ПЭВМ включает отпускную цену, расходы на
транспортировку, монтаж оборудования и его наладку:
СБАЛ = СРЫН+ЗУСТ,
где
СРЫН - рыночная стоимость
компьютера, руб./шт.,
ЗУСТ - затраты на доставку и
установку компьютера, руб./шт.
Таким образом, получим:
СБАЛ = 15000+1500=16500 руб/шт.
Компьютер, на котором велась работа,
был приобретен по цене СРЫН= 15000, затраты на установку и наладку составили
примерно 10% от стоимости компьютера:
ЗУСТ = 10%*СРЫН
Таким образом, получим:
ЗУСТ = 0,1*15000=1500 руб.
СБАЛ = 15000+1500=16500 руб/шт.
ЗАМ = 16500*0,125=2062,5 руб/год.
Расчёт затрат на электроэнергию.
Стоимость электроэнергии,
потребляемой за год, определяется по формуле:
ЗЭЛ = РЭВМ*ТЭВМ*СЭЛ*А,
где
Рэвм - суммарная мощность ЭВМ,
Сэл - стоимость 1кВт*ч
электроэнергии,
А - коэффициент интенсивного
использования мощности машины.
Согласно техническому паспорту ЭВМ
Рэвм = 0,45 кВт, стоимость 1кВт/ч. электроэнергии для предприятий Сэл = 3,48
руб., интенсивность использования машины А=0,98.
Тогда расчётное значение затрат на
электроэнергию:
ЗЭЛ = 0,45*900*3,48*0,98=1381,212
руб.
Расчёт затрат на текущий ремонт.
Затраты на текущий и
профилактический ремонт принимаются равными 5% от стоимости ЭВМ:
ЗТР=0,05*СБАЛ
Таким образом, получим:
ЗТР=0,05*16500=825 руб.
Расчёт затрат на вспомогательные
материалы.
Затраты на материалы, необходимые
для обеспечения нормальной работы ПЭВМ составляют около 1% от стоимости ЭВМ:
ЗЕМ= 0,01*16500 = 165 руб.
Прочие затраты по эксплуатации ПЭВМ.
Прочие косвенные затраты, связанные
с эксплуатацией ПЭВМ, состоят из амортизационных отчислений на здания,
стоимости услуг сторонних организаций и составляют 5% от стоимости ЭВМ:
ЗПР= 0,05*16500 = 825 руб.
Годовые издержки на заработную плату
обслуживающего персонала.
Издержки на заработную плату
обслуживающего персонала складываются из основной заработной платы,
дополнительной и отчислений на заработную плату:
Ззп = ЗОСНЗП+ЗДОПЗП+ЗОТЧЗП
Таким образом, получим:
Ззп = 150000+90000+81600=321600 руб.
Сумма основной заработной платы
определяется исходя из общей численности работающих в штате:
ЗОСНЗП = 12*∑ЗiОКЛ
где
ЗiОКЛ - тарифная ставка i-го
работника в мес. руб.;
В штат обслуживающего персонала
должны входить инженер-электронщик с месячным окладом 15000 руб. и
электрослесарь с окладом 10000 руб.
Тогда, учитывая, что данный персонал
обслуживает 2 машин, имеет издержки на основную заработную плату обслуживающего
персонала, составят:
ЗОСНЗП = 12*(15000+10000)=300000
руб.
Сумма дополнительной заработной
платы составляет 60% от основной заработной платы:
ЗДОПЗП = 0,6*300000 = 180000 руб.
Сумма отчислений на социальные нужды
составляет 34% от суммы дополнительной и основной заработных плат:
ЗОТЧЗП = 0,34*(300000+180000) =
163200 руб.
Тогда годовые издержки на заработную
плату обслуживающего персонала составят:
ЗЗП = 300000+180000+163200=643200
руб.
Полные затраты на эксплуатацию ЭВМ в
течение года составят:
ЗЭВМ = 643200
+2062,5+1381,212+165+825+825 = 648 457,712 руб.
Тогда цена машино-часа арендуемого
времени составит:
СЧАС = 648 451,712 /1784 = 363,48.
А затраты на оплату машинного
времени составят:
ЗМЕСПП = 363,48*39,32= 14292 руб.
Расчёт общих расходов.
Общие расходы это расходы на
освещение, отопление, коммунальные услуги и т.п.
Общие затраты на создание
программного продукта составят:
ЗСПП= 389,8 +7191,6+2062,5+14292=23
935,9 руб.
Можно сделать следующие выводы:
В результате расчета, затраты на
создание данного программного продукта составили 23 935,9 руб. Снизить затраты
на создание можно, например, используя следующие методы: повысить эффективность
работы программиста, путем использования более современных ЭВМ; при этом, а
также при бережном и аккуратном отношении к компьютерной технике автоматически
уменьшатся затраты на ремонт, а значит и необходимость привлечения
дополнительного обслуживающего персонала будет гораздо реже. Можно сократить
количество компьютерной техники, для работы программиста. В связи с тем, что
три четверти расходов идут на оплату труда программиста, возможно, уменьшить
его заработную плату, или уменьшить необходимое количество программистов,
создающих программу. Можно сократить оклад инженера-электронщика и
электрослесаря или объединить их обязанности в должности одного работника.
Заключение
В процессе дипломного проектирования
было разработано программное обеспечение конфигурирующее космический симулятор
Celestia, и ее дополнения. Данное ПО описано в проектной части и приложении
данной работы.
Рассчитанные показатели
экономической эффективности данной разработки говорят о целесообразности
вложения денежных средств в ее реализацию и внедрение.
Внедрение данной программы призвано
облегчить работу астрономов-любителей и обычных пользователей Celestia, а их
количество во всем мире очень большое. Для реализации программной части
информационной системы выбран язык программирования С++.
Итогом выполнения дипломной работы
послужила разработка бксплатного программного продукта с открытым исходным
кодом, позволяющего редактировать множество дополнительных параметров Celestia,
Lua-инструментов, а также управлять отображением различных объектов, включая
космические аппараты.
Для удобства также реализован импорт
и экспорт всех параметров в специальный конфигурационный файл.
Список использованной литературы
1.
Виснадул, Б.Д. Гагарина, Л. Г. Кокорева, Е.В. Технология разработки программных
продуктов - 2008.
.
Рудаков, А.В. Технология разработки программных продуктов - 2006.
.
ГОСТ 19.202-78 - Требования к содержанию и оформлению - 1980.
.
ГОСТ 19.402-78 - Описание программы - 1980.
Приложение 1
Текст программы
Unit1.h
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Buttons.hpp>
#include <ExtCtrls.hpp>
#include <jpeg.hpp>
#include <CheckLst.hpp>
#include <Vcl.Dialogs.hpp>
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdHTTP.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
#include
<Vcl.Imaging.pngimage.hpp>
#include <Vcl.Menus.hpp>
//---------------------------------------------------------------------------TMainForm
: public TForm
{
__published:// IDE-managed
Components
TPageControl *PageControl1;
TTabSheet *MainTab;
TTabSheet *ObjectTab;
TTabSheet *LuaTab;
TTabSheet *AboutTab;
TGroupBox *GroupBox1;
TEdit *EditDir1;
TEdit *Edit3;
TBitBtn *BitBtn1;
TBitBtn *BitBtn2;
TGroupBox *GroupBox2;
TCheckBox *CheckBox1;
TCheckBox *CheckBox2;
TCheckBox *CheckBox4;
TGroupBox *GroupBox3;
TCheckBox *CheckBox5;
TCheckBox *CheckBox6;
TCheckBox *CheckBox7;
TCheckBox *CheckBox8;
TBitBtn *BitBtn3;
TEdit *Edit2;
TLabel *LabelCelestia;
TLabel *LabelLink2;
TLabel *LabelDirComment;
TLabel *Label5;
TLabel *Label6;
TLabel *LabelAbout;
TLabel *Label1;
TLabel *Label2;
TGroupBox *GroupBox4;
TImage *Image2;
TImage *Image3;
TImage *Image4;
TRadioButton *RadioButton1;
TRadioButton *RadioButton2;
TRadioButton *RadioButton3;
TEdit *EditDir2;
TEdit *EditDir3;
TTabSheet *SettingTab;
TGroupBox *GroupBox5;
TButton *ButtonDir1;
TButton *ButtonDir2;
TButton *ButtonDir3;
TLabel *LabelDir1;
TLabel *LabelDir2;
TLabel *LabelDir3;
TLabel *Label3;
TLabel *Label4;
TLabel *Label10;
TCheckBox *CheckBox10;
TLabel *Label11;
TLabel *Label12;
TLabel *Label14;
TLabel *Label16;
TLabel *Label19;
TEdit *Edit5;
TGroupBox *GroupBox7;
TButton *Button1;
TEdit *EditScreenDir;
TComboBox *ComboBox1;
TEdit *EditStartScript;
TLabel *Label22;
TEdit *EditDemoScript;
TLabel *Label23;
TLabel *Label21;
TLabel *Label20;
TLabel *Label24;
TLabel *Label25;
TCheckBox *CheckBox11;
TCheckBox *CheckBox12;
TCheckBox *CheckBox13;
TScrollBar *ScrollBar1;
TScrollBar *ScrollBar2;
TEdit *Edit1;
TLabel *Label26;
TLabel *Label27;
TGroupBox *GroupBox8;
TCheckBox *CheckBox14;
TLabel *Label28;
TEdit *Edit4;
TLabel *Label29;
TComboBox *ComboBox2;
TCheckBox *CheckBox15;
TCheckBox *CheckBox16;
TCheckBox *CheckBox17;
TRadioGroup *RadioGroup1;
TCheckBox *CheckBox18;
TCheckBox
*CheckBox19;*GroupBox6;*CheckBox21;*PlayerEdit;*Button2;*GroupBox9;*GroupBox10;*GroupBox11;*Label9;*BitBtn4;*Label17;*Button3;*Button4;*Label18;*PlayerDialog;*Page1;*Page2;*CheckBox9;*CheckBox3;*CheckBox22;*PageControl2;*CheckBox20;*CheckBox23;*CheckBox24;*CheckBox25;*CheckBox26;*CheckBox27;*CheckBox28;*CheckBox29;*CheckBox30;*CheckBox31;*CheckBox32;*Label30;*CheckBox33;*CheckBox34;*CheckBox35;*CheckBox36;*CheckBox37;*CheckBox38;*CheckBox39;*CheckBox40;*CheckBox41;*CheckBox42;*CheckBox43;*CheckBox44;*CheckBox45;*CheckBox46;*CheckBox47;*CheckBox48;*CheckBox49;*CheckBox50;*CheckBox51;*CheckBox52;*CheckBox53;*CheckBox54;*CheckBox55;*CheckBox56;*Label31;*CheckBox57;*CheckBox58;*CheckBox59;*CheckBox60;*CheckBox61;*ImportDialog;*Label32;*ExportDialog;*Label8;*Label13;*GroupBox12;*Link1;*Link2;*Link3;*Link4;*Web;*Image5;*Image6;*Image7;*Image8;*Label15;*Label33;*CheckBox62;*GroupBox13;*CheckBox63;*PopMenu;*Hlp;
void __fastcall
LabelLink2Click(TObject *Sender);
void __fastcall
LabelLink2MouseLeave(TObject *Sender);
void __fastcall BitBtn1Click(TObject
*Sender);
void __fastcall BitBtn3Click(TObject
*Sender);
void __fastcall BitBtn2Click(TObject
*Sender);
void __fastcall
Edit2KeyPress(TObject *Sender, char &Key);
void __fastcall
Edit3KeyPress(TObject *Sender, char &Key);
void __fastcall Edit2Click(TObject
*Sender);
void __fastcall Edit3Click(TObject
*Sender);
void __fastcall BitBtn4Click(TObject
*Sender);
void __fastcall FormShow(TObject
*Sender);
void __fastcall
RadioButton1Click(TObject *Sender);
void __fastcall
RadioButton2Click(TObject *Sender);
void __fastcall
RadioButton3Click(TObject *Sender);
void __fastcall Edit2Change(TObject
*Sender);
void __fastcall Edit3Change(TObject
*Sender);
void __fastcall
ButtonDir1Click(TObject *Sender);
void __fastcall
ButtonDir2Click(TObject *Sender);
void __fastcall
ButtonDir3Click(TObject *Sender);
void __fastcall Image2Click(TObject
*Sender);
void __fastcall Image3Click(TObject
*Sender);
void __fastcall Image4Click(TObject
*Sender);
void __fastcall
Label10MouseLeave(TObject *Sender);
void __fastcall Label10Click(TObject
*Sender);
void __fastcall
Label14MouseLeave(TObject *Sender);
void __fastcall Label14Click(TObject
*Sender);__fastcall Label16MouseLeave(TObject *Sender);__fastcall
Label16Click(TObject *Sender);
void __fastcall Button1Click(TObject
*Sender);
void __fastcall Edit5Change(TObject
*Sender);
void __fastcall Edit5Click(TObject
*Sender);
void __fastcall
Edit5KeyPress(TObject *Sender, char &Key);
void __fastcall
ScrollBar1Change(TObject *Sender);
void __fastcall
ScrollBar2Change(TObject *Sender);
void __fastcall Edit1Change(TObject
*Sender);
void __fastcall Edit1Click(TObject
*Sender);
void __fastcall Edit4Change(TObject
*Sender);
void __fastcall Edit4Click(TObject
*Sender);
void __fastcall
Edit4KeyPress(TObject *Sender, char &Key);
void __fastcall
CheckBox16Click(TObject *Sender);__fastcall Button2Click(TObject
*Sender);__fastcall CheckBox22Click(TObject *Sender);__fastcall
Button3Click(TObject *Sender);__fastcall Label32MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y);__fastcall Label32MouseLeave(TObject
*Sender);__fastcall Label32Click(TObject *Sender);__fastcall
Label16MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall
Label14MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall
LabelLink2MouseMove(TObject *Sender, TShiftState Shift, int X, int
Y);__fastcall Label10MouseMove(TObject *Sender, TShiftState Shift, int X, int
Y);__fastcall Button4Click(TObject *Sender);__fastcall Label8MouseLeave(TObject
*Sender);__fastcall Label8MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y);__fastcall Label8Click(TObject *Sender);__fastcall
Label13MouseLeave(TObject *Sender);__fastcall Label13MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y);__fastcall Label13Click(TObject
*Sender);__fastcall Link1MouseLeave(TObject *Sender);__fastcall
Link1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall
Link1Click(TObject *Sender);__fastcall Link2MouseLeave(TObject
*Sender);__fastcall Link2MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y);__fastcall Link2Click(TObject *Sender);__fastcall
Link3MouseLeave(TObject *Sender);__fastcall Link3MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y);__fastcall Link3Click(TObject
*Sender);__fastcall Link4MouseLeave(TObject *Sender);__fastcall
Link4MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall
Link4Click(TObject *Sender);__fastcall Label15MouseLeave(TObject
*Sender);__fastcall Label15MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y);__fastcall Label15Click(TObject *Sender);__fastcall Label33MouseLeave(TObject
*Sender);__fastcall Label33MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y);__fastcall Label33Click(TObject *Sender);__fastcall HlpClick(TObject
*Sender);:// User declarations:// User declarations
__fastcall TMainForm(TComponent*
Owner);__fastcall GetVer(String FileName);ObjectProv(String PodFolder, String
Folder, String SSC, TCheckBox *Check);ObjectSave(String PodFolder, String
Folder, TCheckBox *Check);ObjectVos(String PodFolder, String Folder, String
SSC, TCheckBox *Check, bool extras);EndingProv(String Dir, String Folder,
String SSC, TCheckBox *Check);EndingSave(String Dir, String Folder, String SSC,
TCheckBox *Check);EndingVos(String Dir, String Folder, String SSC, TCheckBox
*Check);CheckAll(bool checked);HSatRingsProv(String Path, TCheckBox
*Check);HSatRingsSave(String Path, TCheckBox *Check);
};
//---------------------------------------------------------------------------PACKAGE
TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "FileCtrl.hpp"
#include "IniFiles.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*
EP;* Settings;* Links;* Lang;startfolder,AutoSave;S[7],
sl;LuaAdr;Link[4];CelestiaVersion;Language,LanguageFile;LinkLocale[15];StringsLocale[15];MessegesLocale[15];
TMainForm *MainForm;
//---------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
// ПРОВЕРКИ ПРИ СТАРТЕ //
////////////////////////////////////////////////////////////////////////////////
__fastcall
TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
//ЗАГРУЗКА
ЛОКАЛИЗАЦИИ_t
charlang[255];lc =
GetSystemDefaultLCID();(lc,LOCALE_SENGLANGUAGE,charlang,sizeof(charlang));=
charlang;=ExtractFilePath(Application->ExeName)+"manager\\language\\"+Language+".lng";=
new
TMemIniFile(LanguageFile);>Title=Lang->ReadString("Strings","AppName","Celestia
Config Manager")+"
v"+GetVer(Application->ExeName);>Caption=Application->Title;
//Вкладка
"Основные"->Caption=Lang->ReadString("Main","Label19","You
are using:")+"
";->Caption=Lang->ReadString("Main","Label32","Download
new
version");[1]=Lang->ReadString("Links","Link1","http://sourceforge.net/projects/celestia/files/Celestia-win32-bin/");>Filter=Lang->ReadString("Strings","EIDialogFilter","Configuration
files")+"|*.cfg";>Filter=Lang->ReadString("Strings","EIDialogFilter","Configuration
files")+"|*.cfg";>Filter=Lang->ReadString("Strings","PlayerDialogFilter","Executable
files")+"|*.exe";>Caption=Lang->ReadString("Main","MainTab","Main");->Caption=Lang->ReadString("Main","GroupBox1","Extras
directories");->Caption=Lang->ReadString("Main","LabelDir1","Standard
addons directory (default)");->Caption=Lang->ReadString("Main","LabelDir2","Addons
directory
(default)");->Caption=Lang->ReadString("Main","LabelDir3","Personal
addons directory
(optional)");>Caption=Lang->ReadString("Main","LabelDirComment","There
are addons folders for the program. You can add or change folders which
Celestia will look for installed
addons.");->Caption=Lang->ReadString("Main","Label5","How
many sample points use to render orbit
paths:");->Caption=Lang->ReadString("Main","Label1","Allowed
values: from 80 to
400");->Caption=Lang->ReadString("Main","Label6","Number
of segments in which ring systems are rendered:");->Caption=Lang->ReadString("Main","Label2","Allowed
values: from 100 to
2000");->Caption=Lang->ReadString("Main","GroupBox4","Cursor
in Celestia");->Caption=Lang->ReadString("Main","RadioButton1","Crosshair");->Caption=Lang->ReadString("Main","RadioButton2","Inverted
crosshair");->Caption=Lang->ReadString("Main","RadioButton3","Arrow");->Caption=Lang->ReadString("Main","GroupBox7","Scripts");->Caption=Lang->ReadString("Main","Label20","Script
screenshot
directory");->Caption=Lang->ReadString("Main","Label21","Script
system access
policy");->Items->Add(Lang->ReadString("Strings","ComboBox1Item1","Ask"));->Items->Add(Lang->ReadString("Strings","ComboBox1Item2","Allow"));->Items->Add(Lang->ReadString("Strings","ComboBox1Item3","Deny"));->Caption=Lang->ReadString("Main","Label22","Init
script");->Caption=Lang->ReadString("Main","Label23","Demonstration
script");->Caption=Lang->ReadString("Main","Label24","Speed
of rotation of observer's camera, when holding keyboard arrows <- or
->");->Caption=Lang->ReadString("Main","Label26","Note:
This parameter affects the camera rotation speed in 'Planetarium' mode, being
near planet
surface.");->Caption=Lang->ReadString("Main","Label25","Mouse
rotation sensitivity:");->Caption=Lang->ReadString("Main","Label27","Note:
The value 0.0 disables this
function.");->Caption=Lang->ReadString("Main","GroupBox6","Incidental
music Celestia EP
v2.0");->Caption=Lang->ReadString("Main","CheckBox21","Enabled");>EditLabel->Caption=Lang->ReadString("Main","PlayerEdit","Path
to your media player (required):");>Caption=Lang->ReadString("Main","Help","Help");->Caption=Lang->ReadString("Strings","SaveButton","Save");
//Вкладка
"Объекты
и
время">Caption=Lang->ReadString("ObjectsTime","ObjectTab","Objects
and
time");->Caption=Lang->ReadString("ObjectsTime","GroupBox2","Show");->Caption=Lang->ReadString("ObjectsTime","CheckBox1","Sun
flares");->Caption=Lang->ReadString("ObjectsTime","CheckBox2","Jupiter
rings");->Caption=Lang->ReadString("ObjectsTime","CheckBox10","Mars
Features (pack by Leserg)");[2]=Lang->ReadString("Links","Link2","http://en.celestiaproject.ru/?p=82");->Caption=Lang->ReadString("Strings","Download","Download");->Caption=Lang->ReadString("ObjectsTime","CheckBox17","Kuiper
Belt");[3]=Lang->ReadString("Links","Link3","http://en.celestiaproject.ru/?p=76");->Caption=Lang->ReadString("Strings","Download","Download");->Caption=Lang->ReadString("ObjectsTime","CheckBox18","Dynamic
clouds of Jupiter");[4]=Lang->ReadString("Links","Link4","http://en.celestiaproject.ru/?p=53");->Caption=Lang->ReadString("Strings","Download","Download");->Caption=Lang->ReadString("ObjectsTime","CheckBox19","Io
3D
volcanoes");->Caption=Lang->ReadString("ObjectsTime","CheckBox20","Space
lift");[5]=Lang->ReadString("Links","Link5","http://en.celestiaproject.ru/?p=89");->Caption=Lang->ReadString("Strings","Download","Download");->Caption=Lang->ReadString("ObjectsTime","CheckBox61","Oort
Cloud");[6]=Lang->ReadString("Links","Link6","http://en.celestiaproject.ru/?p=85");->Caption=Lang->ReadString("Strings","Download","Download");->Caption=Lang->ReadString("ObjectsTime","CheckBox62","Highlight
the particles of Saturn rings (only Celestia EP v3.0)");
//Космические
аппараты->Caption=Lang->ReadString("ObjectsTime","GroupBox5","Spacecrafts,
which doesn't exists anymore");->Caption=Lang->ReadString("ObjectsTime","Page1","Page
1");->Caption=Lang->ReadString("ObjectsTime","Page2","Page
2");->Caption=Lang->ReadString("Spacecrafts","CheckBox9","Mir");->Caption=Lang->ReadString("Spacecrafts","CheckBox3","Galileo");->Caption=Lang->ReadString("Spacecrafts","CheckBox23","Cassini-Huygens");->Caption=Lang->ReadString("Spacecrafts","CheckBox24","Satellite
1");->Caption=Lang->ReadString("Spacecrafts","CheckBox25","Satellite
2");->Caption=Lang->ReadString("Spacecrafts","CheckBox26","Satellite
3");->Caption=Lang->ReadString("Spacecrafts","CheckBox27","Salyut
7");->Caption=Lang->ReadString("Spacecrafts","CheckBox28","Mariner");->Caption=Lang->ReadString("Spacecrafts","CheckBox29","Venus
Express");->Caption=Lang->ReadString("Spacecrafts","CheckBox30","Chandra
X-Ray
Observatory");->Caption=Lang->ReadString("Spacecrafts","CheckBox31","Corot");->Caption=Lang->ReadString("Spacecrafts","CheckBox32","Herschel");->Caption=Lang->ReadString("Spacecrafts","CheckBox33","Voyager
1 and 2");->Caption=Lang->ReadString("Spacecrafts","CheckBox34","New
Horizons");->Caption=Lang->ReadString("Spacecrafts","CheckBox35","Spitzer");->Caption=Lang->ReadString("Spacecrafts","CheckBox36","ISO");->Caption=Lang->ReadString("Spacecrafts","CheckBox37","Envisat");->Caption=Lang->ReadString("Spacecrafts","CheckBox38","AMSAT-OSCAR
7");->Caption=Lang->ReadString("Spacecrafts","CheckBox39","Apollo
10 and 11");->Caption=Lang->ReadString("Spacecrafts","CheckBox40","Dawn");->Caption=Lang->ReadString("Spacecrafts","CheckBox41","Deep
Impact");->Caption=Lang->ReadString("Spacecrafts","CheckBox42","Giotto");->Caption=Lang->ReadString("Spacecrafts","CheckBox43","Helios
1 and 2");->Caption=Lang->ReadString("Spacecrafts","CheckBox44","ICE");->Caption=Lang->ReadString("Spacecrafts","CheckBox45","Luna
and
Lunokhod");->Caption=Lang->ReadString("Spacecrafts","CheckBox46","LRO");->Caption=Lang->ReadString("Spacecrafts","CheckBox47","Magellan");->Caption=Lang->ReadString("Spacecrafts","CheckBox48","Mars
Express");->Caption=Lang->ReadString("Spacecrafts","CheckBox49","MGS");->Caption=Lang->ReadString("Spacecrafts","CheckBox50","MRO");->Caption=Lang->ReadString("Spacecrafts","CheckBox51","Messenger");->Caption=Lang->ReadString("Spacecrafts","CheckBox52","Nozomi");->Caption=Lang->ReadString("Spacecrafts","CheckBox53","Phoenix
Lander");->Caption=Lang->ReadString("Spacecrafts","CheckBox54","Pioneers");->Caption=Lang->ReadString("Spacecrafts","CheckBox55","Planck");->Caption=Lang->ReadString("Spacecrafts","CheckBox56","Rosetta");->Caption=Lang->ReadString("Spacecrafts","CheckBox57","Ulysses");->Caption=Lang->ReadString("Spacecrafts","CheckBox58","Venera");->Caption=Lang->ReadString("Spacecrafts","CheckBox59","Viking");->Caption=Lang->ReadString("Spacecrafts","CheckBox60","Zond
3");->Caption=Lang->ReadString("Spacecrafts","CheckBox22","Select
all");->Caption=Lang->ReadString("Strings","SaveButton","Save");
//Вкладка
"Lua-инструменты"->Caption=Lang->ReadString("LuaTools","CheckBox4","Show
at Celestia
startup");->Caption=Lang->ReadString("LuaTools","GroupBox3","Show
automatically");->Caption=Lang->ReadString("LuaTools","CheckBox5","Information
about
objects");->Caption=Lang->ReadString("LuaTools","CheckBox6","Coordinates");->Caption=Lang->ReadString("LuaTools","CheckBox11","Magnification
mode");->Caption=Lang->ReadString("LuaTools","CheckBox12","H-R
Diagram");->Caption=Lang->ReadString("LuaTools","CheckBox7","Keplerian
params");->Caption=Lang->ReadString("LuaTools","CheckBox13","Virtual
pad");->Caption=Lang->ReadString("LuaTools","CheckBox8","Compass");->Caption=Lang->ReadString("LuaTools","GroupBox13","Objects
from the addons
catalog");->Caption=Lang->ReadString("LuaTools","CheckBox63","Asteroid
Belt");->Caption=Lang->ReadString("LuaTools","GroupBox8","Advanced
settings");->Caption=Lang->ReadString("LuaTools","CheckBox14","Show
local
time");->Caption=Lang->ReadString("LuaTools","CheckBox15","Center
compass");->Caption=Lang->ReadString("LuaTools","CheckBox16","Alt-azimuth
mode disabled");->Caption=Lang->ReadString("LuaTools","Label29","Date
format:");->Items->Add(Lang->ReadString("Strings","ComboBox2Item1","Country
default"));->Items->Add(Lang->ReadString("Strings","ComboBox2Item2","dd/mm/yyyy"));->Items->Add(Lang->ReadString("Strings","ComboBox2Item3","mm/dd/yyyy"));->Items->Add(Lang->ReadString("Strings","ComboBox2Item4","yyyy/mm/dd"));->Caption=Lang->ReadString("LuaTools","Label28","Custom
goto
duration");->Caption=Lang->ReadString("LuaTools","RadioGroup1","Color
scheme");->Items->Add(Lang->ReadString("Strings","RadioGroup1Item1","Colorless
transparent"));->Items->Add(Lang->ReadString("Strings","RadioGroup1Item2","Translucent
blue"));->Items->Add(Lang->ReadString("Strings","RadioGroup1Item3","Green
translucent"));->Items->Add(Lang->ReadString("Strings","RadioGroup1Item4","Purple
translucent"));->Caption=" "+Lang->ReadString("LuaTools","Label11","Lua
Tools not
found!");->Caption=Lang->ReadString("Strings","Download","Download")+":";->Caption=Lang->ReadString("Links","Link7","http://en.celestiaproject.ru/?cat=29");[7]=Lang->ReadString("Links","Link7","http://en.celestiaproject.ru/?cat=29");->Caption=Lang->ReadString("Strings","SaveButton","Save");
//Вкладка
"Управление
настройками">Caption=Lang->ReadString("ManageSettings","SettingsTab","Manage
settings");->Caption=Lang->ReadString("ManageSettings","GroupBox9","Import
settings");->Caption=Lang->ReadString("ManageSettings","Label17","It
is possible to import a file with settings, which was exported earlier. You'll
get the exact configuration, which was exported.");->Caption=Lang->ReadString("ManageSettings","Button3","Select
file to
import");->Caption=Lang->ReadString("ManageSettings","GroupBox10","Export
settings");->Caption=Lang->ReadString("ManageSettings","Label18","It
is possible to export settings to a file. It's convenient, if you'd have to
reinstall Celestia or the entire operating system, and the default settings are
not for
you.");->Caption=Lang->ReadString("ManageSettings","Button4","Export
settings to
file");->Caption=Lang->ReadString("ManageSettings","GroupBox11","Restore
default settings");->Caption=Lang->ReadString("ManageSettings","Label9","When
restoring an original settings, default values are applied to all Celestia
parameters, Lua-tools and
addons.");->Caption=Lang->ReadString("ManageSettings","BitBtn4","Perform
recovery");
//Вкладка
"О
программе">Caption=Lang->ReadString("About","AboutTab","About");->Caption=Lang->ReadString("About","Label7","Configuration
manager was developed for Celestia 1.6.1, Celestia Educational and Celestia
Extended Pack. It's designed to make Celestia configuration precise, and for
managing its addons. It supports most of the spacecrafts, and following
Lua-tools: Lua Edu Tools v1.2 beta 8, Lua Edu Tools v1.2 beta 9, Lua Universal
Tools v1.0 and Lua Universal Tools
v2.0.");->Caption=Lang->ReadString("About","Label3","Thanks
to: Sergey Leonov a.k.a Leserg for testing of the first version and useful
tips; Artyom Volgin a.k.a Zemlyanin for ideas on functionality and testing of
all
versions.");>Caption=Lang->ReadString("About","LabelCelestia","Celestia
in Russia")+":";->Caption=Lang->ReadString("About","Label4","Discussion")+":";->Caption=Lang->ReadString("About","Label10","on
shatters.net/forum");[8]=Lang->ReadString("Links","Link8","#");
//ссылка
на
тему
англоязычного
форума
(форум
недоступен)->Caption=Lang->ReadString("About","GroupBox12","Recommended
downloads")+":";
//Оставшиеся
строки[1]=Lang->ReadString("Strings","Unknown","unknown");[2]="
"+Lang->ReadString("Strings","Outdated","(outdated)");[3]=Lang->ReadString("Strings","Version","Version");[4]=Lang->ReadString("Strings","NoNetwork","No
Internet connection");[5]="
"+Lang->ReadString("Strings","LUT2Notice","In
Lua Universal Tools v2.0 some parameters are not
used.");[6]=Lang->ReadString("Strings","LuaTools","Lua
Tools");[7]=Lang->ReadString("Strings","ExtrasDir","Choose
folder with the addons for
Celestia")+":";[8]=Lang->ReadString("Strings","ScreenDir","Choose
folder to save
screenshots")+":";[9]=Lang->ReadString("Strings","AltAzimuthOn","Alt-azimuth
mode
enabled");[10]=Lang->ReadString("Strings","AltAzimuthOff","Alt-azimuth
mode
disabled");[11]=Lang->ReadString("Strings","NoLocalizedHelp","Help
file in your language not found. Open Help in English?");
//Сообщения[1]=Lang->ReadString("Messages","Message1","To
run the utility, place it in the root directory of Celestia.");[2]=Lang->ReadString("Messages","Message2","Invalid
value!");[3]=Lang->ReadString("Messages","Message3","Invalid
addons folder! The first field must be
specified.");[4]=Lang->ReadString("Messages","Message4","The
'Init script' must be specified!");[5]=Lang->ReadString("Messages","Message5","The
'Demo script' must be
specified!");[6]=Lang->ReadString("Messages","Message6","Settings
were saved successfully!");[7]=Lang->ReadString("Messages","Message7","Do
you really want to restore default settings?");[8]=Lang->ReadString("Messages","Message8","Default
settings were restored
successfully!");[9]=Lang->ReadString("Messages","Message9","Settings
were imported successfully!");[10]=Lang->ReadString("Messages","Message10","Settings
were successfully exported to a file");
//ПРОВЕРКА
РАСПОЛОЖЕНИЯ
ПРОГРАММЫ(FileExists(ExtractFilePath(Application->ExeName)+"celestia.cfg")
&&
FileExists(ExtractFilePath(Application->ExeName)+"celestia.exe")
||
FileExists(ExtractFilePath(Application->ExeName)+"celestia161-ED.exe")
|| FileExists(ExtractFilePath(Application->ExeName)+"Celestia
EP.exe"))
{=
true;(ExtractFilePath(Application->ExeName)+
"temp");->Caption="|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|";->Caption="|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|";
}
{(Application->MessageBox(MessegesLocale[1].c_str(),
Application->Title.c_str(), MB_OK | MB_ICONEXCLAMATION)==MB_OK)
{= false;
}
}
}
//---------------------------------------------------------------------------
//Функция
получения
версии
exe файла__fastcall
TMainForm::GetVer(String FileName)
{
String Version;
DWORD h;
DWORD Size =
GetFileVersionInfoSize(FileName.c_str(), &h);
if (Size == 0)
{= StringsLocale[1].c_str();
return Version;
}
TCHAR *buf;
buf = (TCHAR
*)GlobalAlloc(GMEM_FIXED, Size);
if (GetFileVersionInfo(FileName.c_str(),
h, Size, buf) != 0)
{ValueBuf;
UINT Len;
if (VerQueryValue(buf,
L"\\", &(void *)ValueBuf, &Len) != 0)=
String().sprintf(L"%d.%d.%d",
HIWORD(ValueBuf->dwFileVersionMS),(ValueBuf->dwFileVersionMS),
HIWORD(ValueBuf->dwFileVersionLS),(ValueBuf->dwFileVersionLS));
}
GlobalFree(buf);Version;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::FormShow(TObject *Sender)
{(!startfolder)>Terminate();
{
//Включаем видимость формы>AlphaBlend=false;
//Считывание
версии
Celestia(FileExists(ExtractFilePath(Application->ExeName)+"celestia161-ED.exe"))="Celestia
1.6.1 Educational";
{(FileExists(ExtractFilePath(Application->ExeName)+"\\documents\\"+"Информация
о
Celestia EP v3.0.pdf"))
{="Celestia Extended Pack
v3.0";->Enabled=true;
}(FileExists(ExtractFilePath(Application->ExeName)+"\\documents\\"+"Информация
о
Celestia EP v2.0.pdf"))
{="Celestia Extended Pack
v2.0";->Visible=true;
}(FileExists(ExtractFilePath(Application->ExeName)+"Информация
о
Celestia EP v1.1.txt"))="Celestia Extended Pack
v1.1";(FileExists(ExtractFilePath(Application->ExeName)+"Информация
о
Celestia EP.txt"))="Celestia Extended Pack v1.0";
}(CelestiaVersion!="")->Caption=Label19->Caption+CelestiaVersion;
{
//Проверка
версии
Celestia->Caption=Label19->Caption+"Celestia
"+GetVer(ExtractFilePath(Application->ExeName)+"celestia.exe");(GetVer(ExtractFilePath(Application->ExeName)+"celestia.exe")!="1.6.1")
{->Caption=Label19->Caption+StringsLocale[2];->Visible=true;
}
}
//Авторская
защита>Caption="©
Alexell\n"+StringsLocale[3]+":
"+GetVer(Application->ExeName)+"
(28.04.2014)";->Caption="www.celestiaproject.ru";
//Установка прокси для режима Debug
#ifdef _DEBUG
Web->ProxyParams->BasicAuthentication=true;>ProxyParams->ProxyServer="192.168.200.110";>ProxyParams->ProxyPort=3128;>ProxyParams->ProxyUsername="sunduk";>ProxyParams->ProxyPassword="gbplf";
#endif
//Блок
ссылок
"Рекомендуем
скачать"*TMP
= new TStringList;
{(Language=="Russian")>Text=Web->Get("http://files.celestiaproject.ru/config_manager/links_ru.ini");>Text=Web->Get("http://files.celestiaproject.ru/config_manager/links_en.ini");>SaveToFile(ExtractFilePath(Application->ExeName)+"manager\\"+"links.ini");
}(...){}TMP;= new
TIniFile(ExtractFilePath(Application->ExeName)+"manager\\"+"links.ini");->Caption=Links->ReadString("Link1","Caption",StringsLocale[4]);->Caption=Links->ReadString("Link2","Caption",StringsLocale[4]);->Caption=Links->ReadString("Link3","Caption",StringsLocale[4]);->Caption=Links->ReadString("Link4","Caption",StringsLocale[4]);[1]=Links->ReadString("Link1","URL",StringsLocale[4]);[2]=Links->ReadString("Link2","URL",StringsLocale[4]);[3]=Links->ReadString("Link3","URL",StringsLocale[4]);[4]=Links->ReadString("Link4","URL",StringsLocale[4]);
delete Links;
//ПРОВЕРКА ВКЛАДКИ "ОСНОВНЫЕ"
TStringList *MainProv=new
TStringList;*DirList=new TStringList;OrbitP="OrbitPathSamplePoints
";RingsP="RingSystemSections
";op;rp;OrbitDigit="";RingDigit="";>LoadFromFile(ExtractFilePath(Application->ExeName)
+ "celestia.cfg");
//Считывание
папок
с
дополнениями[3]=ExtractFilePath(Application->ExeName);>LoadFromFile(S[3]+"celestia.cfg");(int
i=0;i<DirList->Count;i++)((DirList->Strings[i].Pos("ExtrasDirectories")>0)
&& (DirList->Strings[i][1] != '#'))
{[0]="";
S[1]=""; S[2]="";cr, kaw=0
;=DirList->Strings[i];((cr=sl.Pos("["))>0)(;cr<=sl.Length();cr++)
{(sl[cr]=='"') kaw++;
else(kaw%2==1) S[3&(kaw/2)] += sl[cr] ;(sl[cr]==']') break ;
}->Text = S[0];->Text = S[1];
EditDir3->Text = S[2];
}
//Считывание точек орбит
for (int
i=0;i<MainProv->Count;i++)((op=MainProv->Strings[i].Pos(OrbitP))>0)(int
k=op;k<=MainProv->Strings[i].Length();k++)(isdigit(MainProv->Strings[i][k]))+=MainProv->Strings[i][k];
Edit2->Text=OrbitDigit;
//Считывание сегментов колец
for (int
i=0;i<MainProv->Count;i++)((rp=MainProv->Strings[i].Pos(RingsP))>0)(int
k=rp;k<=MainProv->Strings[i].Length();k++)(isdigit(MainProv->Strings[i][k]))+=MainProv->Strings[i][k];->Text=RingDigit;
//Считывание
курсора(int
i=0;i<MainProv->Count;i++)
{(MainProv->Strings[i].Pos("
Cursor \""))
{(MainProv->Strings[i]=="
Cursor \"crosshair\"")
{->Checked=true;->Checked=false;->Checked=false;
}(MainProv->Strings[i]=="
Cursor \"inverting crosshair\"")
{->Checked=false;->Checked=true;->Checked=false;
}(MainProv->Strings[i]=="
Cursor \"arrow\"")
{->Checked=false;->Checked=false;->Checked=true;
}
}
}
//Проверка
папки
скриншотов[3]=ExtractFilePath(Application->ExeName);>LoadFromFile(S[3]+"celestia.cfg");(int
i=0;i<DirList->Count;i++)((DirList->Strings[i].Pos("ScriptScreenshotDirectory")>0)
&& (DirList->Strings[i][1] != '#'))
{[4]="";(DirList->Strings[i]=="
ScriptScreenshotDirectory \"\"")[4]="";
{cr;=DirList->Strings[i];((cr=sl.Pos("\""))>0)(;cr<=sl.Length();cr++)
{(sl[cr]=='"')[4] += sl[cr+1];
{(sl[cr+1]=='"') break ;S[4] +=
sl[cr+1];
}
}
}>Text = S[4];
}
//Проверка
параметра
ScriptSystemAccessPolicy(int i=0;i<MainProv->Count;i++)
{(MainProv->Strings[i].Pos("
ScriptSystemAccessPolicy"))
{(MainProv->Strings[i]=="
ScriptSystemAccessPolicy
\"ask\"")->ItemIndex=0;(MainProv->Strings[i]=="
ScriptSystemAccessPolicy
\"allow\"")->ItemIndex=1;(MainProv->Strings[i]=="
ScriptSystemAccessPolicy \"deny\"")->ItemIndex=2;
}
}
//Проверка
стартового
скрипта[3]=ExtractFilePath(Application->ExeName);[5]="";>LoadFromFile(S[3]+"celestia.cfg");(int
i=0;i<DirList->Count;i++)((DirList->Strings[i].Pos("InitScript")>0)
&& (DirList->Strings[i][1] != '#'))
{cr;=DirList->Strings[i];((cr=sl.Pos("\""))>0)(;cr<=sl.Length();cr++)
{(sl[cr]=='"')[5] += sl[cr+1];
{(sl[cr+1]=='"') break ;S[5] +=
sl[cr+1];
}
}>Text = S[5];
}
//Проверка
Demo сценария[3]=ExtractFilePath(Application->ExeName);[6]="";>LoadFromFile(S[3]+"celestia.cfg");(int
i=0;i<DirList->Count;i++)((DirList->Strings[i].Pos("DemoScript")>0)
&& (DirList->Strings[i][1] != '#'))
{cr;=DirList->Strings[i];((cr=sl.Pos("\""))>0)(;cr<=sl.Length();cr++)
{(sl[cr]=='"')[6] += sl[cr+1];
{(sl[cr+1]=='"') break ;S[6] +=
sl[cr+1];
}
}>Text = S[6];
}
//Считывание
скорости
вращенияRotateP="
RotateAcceleration ";RotateDigit="";(int
i=0;i<MainProv->Count;i++)(op=MainProv->Strings[i].Pos(RotateP)>0)(int
k=22;k<=MainProv->Strings[i].Length();k++)(MainProv->Strings[i][k]=='.');+=MainProv->Strings[i][k];->Text=RotateDigit;->Position=StrToInt(Edit5->Text);
//Считывание
чувствительности
мышиMouseRotP="
MouseRotationSensitivity
";MouseDigit="";pos,postemp;.DecimalSeparator='.';(int
i=0;i<MainProv->Count;i++)
{(MainProv->Strings[i].Pos(MouseRotP)>0)
{(int
k=27;k<=MainProv->Strings[i].Length();k++)+=MainProv->Strings[i][k];
}
}->Text=MouseDigit;=StrToFloat(MouseDigit);=postemp*10;->Position=pos;.DecimalSeparator=',';
//Проверка музыкального проигрывателя для Celestia
EP v2.0
if(GroupBox6->Visible==true)
{= new
TIniFile(ExtractFilePath(Application->ExeName)+"celestia_ep.ini");(EP->ReadString("Settings","Music","")=="true")->Checked=true;->Checked=false;>Text=EP->ReadString("Settings","Player","");EP;
}MainProv;DirList;
//-------------------------
//ПРОВЕРКА ВКЛАДКИ "ОБЪЕКТЫ И ВРЕМЯ"
//Проверка
Солнечных
вспышек(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\solar-system\\sun\\","sun_flares","sun
flares.ssc",CheckBox1);("extras\\","sun_flares","sun
flares.ssc",CheckBox1);
//Проверка
колец
Юпитера(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
ObjectProv("data\\solar-system\\planets-&-moons\\jupiter-&-moons\\","Jupiter
Rings","Jupiter.ssc",CheckBox2);("extras\\","Jupiter
Rings","Jupiter.ssc",CheckBox2);
//Проверка
Достопримечательностей
Марса(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
ObjectProv("data\\solar-system\\planets-&-moons\\mars\\","Mars
Surface Features","Mars
Features.ssc",CheckBox10);("extras\\Solar
System\\Planet\\Mars\\","Mars Surface Features","Mars
Features.ssc",CheckBox10);
//Проверка
Пояса
Койпера(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\solar-system\\","kuiper-belt","Kuiper_Belt.ssc",CheckBox17);
ObjectProv("extras\\","Kuiper_Belt","Kuiper_Belt.ssc",CheckBox17);
//Проверка
Динамической
атмосферы
Юпитера(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
ObjectProv("data\\solar-system\\planets-&-moons\\jupiter-&-moons\\","JupClouds","JupClouds.ssc",CheckBox18);("extras\\","Jupiter_Clouds","JupClouds.ssc",CheckBox18);
//Проверка
вулканов
Ио(Label19->Caption.Pos("Celestia
Extended Pack v1.0")) //недочет
в
самой
сборке("extras\\","iovolcanoes\\iovolcanoes","volcanoes.ssc",CheckBox19);
{(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
ObjectProv("data\\solar-system\\planets-&-moons\\jupiter-&-moons\\","iovolcanoes","volcanoes.ssc",CheckBox19);("extras\\","iovolcanoes","volcanoes.ssc",CheckBox19);
}
//Космический
лифт(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\fiction-objects\\","space-lift","Space
Lift.ssc",CheckBox20);("extras\\","Space
Lift","Space Lift.ssc",CheckBox20);
//Облако
Оорта(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\solar-system\\","oort-cloud","OC.dsc",CheckBox61);("extras\\","Oort_Cloud","OC.dsc",CheckBox61);
//Подсветка
частиц
колец
Сатурна("data\\solar-system\\planets-&-moons\\saturn\\saturn-rings-model\\models\\saturn-ring-element.cmod",
CheckBox62);
//Проверка
Ending у
космических
аппаратов(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"mir", "mir.ssc",
CheckBox9);("extras-standard\\", "mir", "mir.ssc",
CheckBox9);
//if(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
//EndingProv("data\\spacecrafts\\jupiter-missions\\",
"galileo", "galileo.ssc", CheckBox3);
//else
//EndingProv("extras-standard\\",
"galileo", "galileo.ssc", CheckBox3);
//if(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
//EndingProv("data\\spacecrafts\\saturn-missions\\",
"cassini", "cassini.ssc", CheckBox23);
//else
//EndingProv("extras\\",
"Cassini-Huygens", "cassini_huygens.ssc",
CheckBox23);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"Sputnik 1", "sputnik-1.ssc",
CheckBox24);("extras\\", "Sputnik 1",
"sputnik-1.ssc", CheckBox24);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"Spoutnik 2", "Spoutnik.ssc",
CheckBox25);("extras\\", "Spoutnik 2",
"Spoutnik.ssc", CheckBox25);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"Sputnik 3", "Spoutnik3.ssc", CheckBox26);
EndingProv("extras\\",
"Sputnik 3", "Spoutnik3.ssc",
CheckBox26);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"Salyut7", "JACKsalyut7.ssc", CheckBox27);("extras\\",
"", "JACKsalyut7.ssc", CheckBox27);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\venus-missions\\",
"Mariner2", "JACKmariner2-xyz.ssc",
CheckBox28);("extras\\", "Mariner2",
"JACKmariner2-xyz.ssc", CheckBox28);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\mars-missions\\",
"Mariner9", "mariner 9.ssc",
CheckBox28);("extras\\", "Mariner9", "mariner
9.ssc", CheckBox28);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\venus-missions\\",
"venus_express", "venus_express.ssc", CheckBox29);("extras\\",
"venus_express", "venus_express.ssc", CheckBox29);
//EndingProv("extras\\",
"Chandra X-Ray Observatory", "chandra.ssc", CheckBox30); нет
информации
об
Ending'е
//EndingProv("extras\\",
"Corot", "Corot.ssc", CheckBox31); нет
информации
об
Ending'е
//if(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
//EndingProv("data\\spacecrafts\\space-observatories\\",
"herschel", "herschel.ssc", CheckBox32);
//else
//EndingProv("extras\\",
"herschel", "herschel.ssc", CheckBox32);
//EndingProv("extras\\",
"Voyager", "voyager.ssc", CheckBox33); нет
информации
об
Ending'е(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\kuiper-belt-missions\\",
"new_horizons_jpg_v2_small", "new_horizons.ssc",
CheckBox34);("extras\\", "new_horizons_jpg_v2_small",
"new_horizons.ssc",
CheckBox34);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"Spitzer", "JACKspitzer-xyz.ssc", CheckBox35);("extras\\",
"Spitzer", "JACKspitzer-xyz.ssc", CheckBox35);(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\space-observatories\\",
"ISO", "JACKiso.ssc", CheckBox36);("extras\\",
"ISO", "JACKiso.ssc", CheckBox36);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"envisat", "envisat.ssc",
CheckBox37);("extras\\", "envisat",
"envisat.ssc", CheckBox37);
//EndingProv("extras\\",
"ao7", "AO7.ssc", CheckBox38); нет
информации
об
Ending'е
//if(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
//EndingProv("data\\spacecrafts\\moon-missions\\",
"apollo10", "apollo10.ssc", CheckBox39);
//else
//EndingProv("extras\\",
"apollo10", "apollo10.ssc", CheckBox39);
//
//if(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
//EndingProv("data\\spacecrafts\\moon-missions\\",
"Apollo_11", "apollo.ssc", CheckBox39);
//else
//EndingProv("extras\\",
"Apollo_11", "apollo.ssc",
CheckBox39);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\main-belt-missions\\",
"Dawn", "dawn.ssc", CheckBox40);("extras\\",
"Dawn", "dawn.ssc",
CheckBox40);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\cometary-missions\\",
"DeepImpact", "DeepImpact.ssc", CheckBox41);("extras\\",
"DeepImpact", "DeepImpact.ssc", CheckBox41);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\cometary-missions\\",
"Giotto", "JACKgiottoflyby-xyz-ssc.ssc",
CheckBox42);("extras\\", "Giotto",
"JACKgiottoflyby-xyz-ssc.ssc",
CheckBox42);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\sun-missions\\",
"Helios", "JACKheliosSolarProbe-xyz.ssc",
CheckBox43);("extras\\", "Helios",
"JACKheliosSolarProbe-xyz.ssc", CheckBox43);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\cometary-missions\\",
"ice", "ice-xyz.ssc", CheckBox44);("extras\\",
"ice", "ice-xyz.ssc", CheckBox44);
//EndingProv("extras\\",
"lunarlanders", "lunarlandingsites.ssc", CheckBox45); нет
информации
об
Ending'е
//if(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
//EndingProv("data\\spacecrafts\\moon-missions\\",
"lro", "lro.ssc", CheckBox46);
//else
//EndingProv("extras\\",
"lro", "lro.ssc",
CheckBox46);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\venus-missions\\",
"Magellan-full", "JACKmagellan_venus.ssc",
CheckBox47);("extras\\", "Magellan-full",
"JACKmagellan_venus.ssc",
CheckBox47);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\mars-missions\\", "Mars
Express", "mars express.ssc", CheckBox48);("extras\\",
"Mars Express", "mars express.ssc", CheckBox48);
//EndingProv("extras\\",
"EC_MGSf", "MGS.ssc", CheckBox49); нет
информации
об
Ending'е
//EndingProv("extras\\",
"Mars Reconaissance Orbiter", "MRO.ssc", CheckBox50); нет
информации
об
Ending'е
//EndingProv("extras\\",
"messenger", "messenger.ssc", CheckBox51); нет
информации
об
Ending'е(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\mars-missions\\",
"Nozomi", "JACKplanet-bfull-xyz.ssc",
CheckBox52);("extras\\", "Nozomi", "JACKplanet-bfull-xyz.ssc",
CheckBox52);
//EndingProv("extras\\",
"phoenix_lander", "phoenix_lander.ssc", CheckBox53); нет
информации
об
Ending'е(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\interplanetary-missions\\",
"Pioneers", "JACKearly_pioneers-xyz.ssc",
CheckBox54);("extras\\", "Pioneers",
"JACKearly_pioneers-xyz.ssc",
CheckBox54);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\space-observatories\\", "planck",
"planck.ssc", CheckBox55);("extras\\", "planck",
"planck.ssc", CheckBox55);(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\space-observatories\\",
"planck", "planck_fov.ssc",
CheckBox55);("extras\\", "planck", "planck_fov.ssc",
CheckBox55);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\cometary-missions\\",
"rosetta_brianj", "rosetta.ssc",
CheckBox56);("extras\\", "rosetta_brianj",
"rosetta.ssc", CheckBox56);(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\space-observatories\\", "Ulysses-full",
"JACKulysses-xyz.ssc", CheckBox57);("extras\\",
"Ulysses-full", "JACKulysses-xyz.ssc",
CheckBox57);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\venus-missions\\",
"Venera", "JACKveneraUSSR-xyz.ssc", CheckBox58);("extras\\",
"Venera", "JACKveneraUSSR-xyz.ssc",
CheckBox58);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\mars-missions\\",
"Viking-full", "viking.ssc", CheckBox59);("extras\\",
"Viking-full", "viking.ssc", CheckBox59);(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\interplanetary-missions\\",
"Zond 3", "JACKzondUSSR-xyz.ssc",
CheckBox60);("extras\\", "Zond 3",
"JACKzondUSSR-xyz.ssc", CheckBox60);
//ПРОВЕРКА LUA-ИНСТРУМЕНТОВShowP="";
String ShowInf="enable_info =
";ShowCoord="enable_coordinates =
";ShowKep="enable_Kepler_param = ";ShowComp="enable_compass
= ";SelectCockpit="cockpitTexture =
";Zoom="enable_magnification = ";HR="enable_HR = ";Navi="enable_virtual_pad
= ";LP="";LocalTime="show_local_time = ";CompasCenter="center_compass
= ";AltAzim="alt_azimuthal_mode =
";CustomDuration="custom_goto_duration = ";
String DigitDur="";
//Проверка версии Lua-инструментов
if(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
{="\lua-applications\\lua_universal_tools_v2\\";>Caption="Lua
Universal Tools v2.0";="show_lua_universal_tools_v2 =
";->Height=281;->Visible=true;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Caption="
"+StringsLocale[5];->Visible=true;
}
{(FileExists(ExtractFilePath(Application->ExeName)+"\extras\\lua_universal_tools_v2\\"+"config.lua"))
{="\extras\\lua_universal_tools_v2\\";>Caption="Lua
Universal Tools v2.0";="show_lua_universal_tools_v2 = ";->Height=281;->Visible=true;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Caption="
"+StringsLocale[5];->Visible=true;
}(FileExists(ExtractFilePath(Application->ExeName)+"\extras\\lua_universal_tools\\"+"config.lua"))
{="\extras\\lua_universal_tools\\";>Caption="Lua
Universal Tools v1.0";="show_lua_universal_tools =
";->Height=281;->Visible=true;
}
{(FileExists(ExtractFilePath(Application->ExeName)+"\extras\\lua_edu_tools\\"+"config.lua"))
{="\extras\\lua_edu_tools\\";>Caption="Lua
Edu Tools v1.2 beta 8";="show_lua_edu_tools = ";
}(FileExists(ExtractFilePath(Application->ExeName)+"\extras\\lua_edu_tools-b9\\"+"config.lua"))
{="\extras\\lua_edu_tools-b9\\";>Caption="Lua
Edu Tools v1.2 beta 9";="show_lua_edu_tools = ";
}
}(LuaAdr=="")
{="none";>Caption=StringsLocale[6];
//Перечисляем все компоненты страницы для
деактивации
CheckBox4->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Visible=true;->Visible=true;->Visible=true;;
}
}*Lua=new
TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+LuaAdr+"config.lua");
//Отображение
панели(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(ShowP))=Lua->Strings[i];(LP.Pos(ShowP+"true"))->Checked=true;->Checked=false;
}
//Отображение информации(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(ShowInf))=Lua->Strings[i];(LP=="enable_info
= true" || LP==" enable_info =
true")->Checked=true;->Checked=false;
}
//Отображение
координат(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(ShowCoord))=Lua->Strings[i];(LP=="enable_coordinates
= true" || LP==" enable_coordinates =
true")->Checked=true;->Checked=false;
}
//Режим
"Увеличение"(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Zoom))=Lua->Strings[i];(LP=="enable_magnification
= true" || LP==" enable_magnification =
true")->Checked=true;->Checked=false;
}
//Диаграмма
Г-Р(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(HR))=Lua->Strings[i];(LP=="enable_HR
= true" || LP==" enable_HR =
true")->Checked=true;->Checked=false;
}
//Отображение Кеплеровых параметров(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(ShowKep))=Lua->Strings[i];(LP=="enable_Kepler_param
= true" || LP==" enable_Kepler_param =
true")->Checked=true;->Checked=false;
}
//Джойстик(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Navi))=Lua->Strings[i];(LP=="enable_virtual_pad
= true" || LP==" enable_virtual_pad =
true")->Checked=true;->Checked=false;
}
//Отображение
компаса(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(ShowComp))=Lua->Strings[i];(LP=="enable_compass
= true" || LP==" enable_compass = true")->Checked=true;->Checked=false;
}
//Пояс
астероидов*Addon
= new
TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+LuaAdr+"\\adds\\Asteroid_Belt\\"+"Asteroid_Belt.ssc");(Addon->Text.Pos("Visible
true"))->Checked=true;->Checked=false;Addon;
//Показывать
местное
время(int
i=0;i<Lua->Count;i++)
}
//Компас
по
центру(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(CompasCenter))=Lua->Strings[i];(LP=="center_compass
= true" || LP==" center_compass =
true")->Checked=true;->Checked=false;
}
//Режим
Альт-Азимут(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(AltAzim))=Lua->Strings[i];(LP=="alt_azimuthal_mode
= true" || LP==" alt_azimuthal_mode = true")
{->Checked=true;->Caption=StringsLocale[9];
}
{->Checked=false;->Caption=StringsLocale[10];
}
}
//Формат
даты(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos("date_format
= "))=Lua->Strings[i];(LP=="date_format =
\"country_default\"" || LP==" date_format =
\"country_default\"")->ItemIndex=0;(LP=="date_format =
\"day/month/year\"" || LP==" date_format =
\"day/month/year\"")->ItemIndex=1;(LP=="date_format =
\"month/day/year\"" || LP==" date_format = \"month/day/year\"")->ItemIndex=2;(LP=="date_format
= \"year/month/day\"" || LP==" date_format =
\"year/month/day\"")
ComboBox2->ItemIndex=3;
}
//Скорость перелета к объекту
for (int
i=0;i<Lua->Count;i++)((op=Lua->Strings[i].Pos(CustomDuration))>0)(int
k=op;k<=Lua->Strings[i].Length();k++)(isdigit(Lua->Strings[i][k]))+=Lua->Strings[i][k];->Text=DigitDur;
//Цветовые
схемы(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos("
cFrameFill = "))(Lua->Strings[i]==" cFrameFill = {0, 0 , 0,
0}")->ItemIndex=0;(Lua->Strings[i]==" cFrameFill = {0, 0 , 0.5,
0.4}")->ItemIndex=1;(Lua->Strings[i]==" cFrameFill = {0.2, 0.4
, 0.3, 0.4}")->ItemIndex=2;(Lua->Strings[i]==" cFrameFill =
{0.4, 0.3, 0.6, 0.4}")->ItemIndex=3;
}Lua;
}
}
//---------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
// СОХРАНЕНИЕ
НАСТРОЕК
//
////////////////////////////////////////////////////////////////////////////////
//ОСНОВНЫЕ__fastcall
TMainForm::BitBtn1Click(TObject *Sender)
{*Main=new TStringList;Orbit="
OrbitPathSamplePoints ";Rings=" RingSystemSections
";>LoadFromFile(ExtractFilePath(Application->ExeName) +
"celestia.cfg");
//Точки орбит и кольца
планет(Edit2->Text!="" &&
StrToInt(Edit2->Text)>=80 && StrToInt(Edit2->Text)<=400)
{(Edit3->Text!=""
&& StrToInt(Edit3->Text)>=100 &&
StrToInt(Edit3->Text)<=2000)
{(int i=0;i<Main->Count;i++)
{(Main->Strings[i].Pos(Orbit))>Strings[i]="
OrbitPathSamplePoints
"+Edit2->Text;(Main->Strings[i].Pos(Rings))>Strings[i]="
RingSystemSections "+Edit3->Text;
}
}
{>MessageBox(MessegesLocale[2].c_str(),
Application->Title.c_str(), MB_OK |
MB_ICONERROR);->Color=clRed;->Font->Color=clWhite;;
}
}
{>MessageBox(MessegesLocale[2].c_str(),
Application->Title.c_str(), MB_OK |
MB_ICONERROR);->Color=clRed;->Font->Color=clWhite;;
}
//Папки
с
дополнениями(int
i=0;i<Main->Count;i++)((Main->Strings[i].Pos("ExtrasDirectories")>0)
&& (Main->Strings[i][1] != '#'))
{[0]="";
S[1]=""; S[2]="";= Main->Strings[i]; // "
"n,k, dl ;(EditDir1->Text.Length()
>0)[0]=StringReplace(EditDir1->Text,"\\","/",TReplaceFlags()<<
rfReplaceAll);(EditDir2->Text.Length()
>0)[1]=StringReplace(EditDir2->Text,"\\","/",TReplaceFlags()<<
rfReplaceAll);(EditDir3->Text.Length()
>0)[2]=StringReplace(EditDir3->Text,"\\","/",TReplaceFlags()<<
rfReplaceAll);((n=Main->Strings[i].Pos("["))>0)
{=sl.SubString(1,n) ;(S[0].Length())
sl=sl+ " \""+S[0] ;(S[1].Length()) sl=sl+"\"
\""+S[1] ;(S[2].Length()) sl=sl+"\" \""+S[2]
;=sl+"\" ]";>Strings[i]=sl;;
}
}(EditDir1->Text=="")>MessageBox(MessegesLocale[3].c_str(),
Application->Title.c_str(), MB_OK | MB_ICONERROR);
//Курсор(RadioButton1->Checked)
{(int i=0;i<Main->Count;i++)
{(Main->Strings[i].Pos("
Cursor \""))>Strings[i]=" Cursor
\"crosshair\"";
}
}(RadioButton2->Checked)
{(int i=0;i<Main->Count;i++)
{(Main->Strings[i].Pos("
Cursor \""))>Strings[i]=" Cursor \"inverting
crosshair\"";
}
}(RadioButton3->Checked)
{(int i=0;i<Main->Count;i++)
{(Main->Strings[i].Pos("
Cursor \""))>Strings[i]=" Cursor \"arrow\"";
}
}
//Директория
скриншотовn;(int
i=0;i<Main->Count;i++)((Main->Strings[i].Pos("ScriptScreenshotDirectory")>0)
&& (Main->Strings[i][1] != '#'))
{[4]="";=
Main->Strings[i]; // " "(EditScreenDir->Text.Length()
>0)[4]=StringReplace(EditScreenDir->Text,"\\","/",TReplaceFlags()<<
rfReplaceAll);((n=Main->Strings[i].Pos("\""))>0)
{=sl.SubString(1,n) ;(S[4].Length())
sl=sl+S[4] ;=sl+"\"";>Strings[i]=sl;;
}
}
//Параметр
ScriptSystemAccessPolicy(int i=0;i<Main->Count;i++)
{(Main->Strings[i].Pos("
ScriptSystemAccessPolicy"))
{(ComboBox1->ItemIndex==0)>Strings[i]="
ScriptSystemAccessPolicy
\"ask\"";(ComboBox1->ItemIndex==1)>Strings[i]="
ScriptSystemAccessPolicy
\"allow\"";(ComboBox1->ItemIndex==2)>Strings[i]="
ScriptSystemAccessPolicy \"deny\"";
}
}
//Стартовый
сценарий(int
i=0;i<Main->Count;i++)((Main->Strings[i].Pos("InitScript")>0)
&& (Main->Strings[i][1] != '#'))
{[5]="";=
Main->Strings[i]; // " "(EditStartScript->Text.Length()
>0)[5]=StringReplace(EditStartScript->Text,"\\","/",TReplaceFlags()<<
rfReplaceAll);
{>MessageBox(MessegesLocale[4].c_str(),
Application->Title.c_str(), MB_OK | MB_ICONERROR);;
}((n=Main->Strings[i].Pos("\""))>0)
{=sl.SubString(1,n) ;(S[5].Length())
sl=sl+S[5] ;=sl+"\"";>Strings[i]=sl;;
}
}
//Demo сценарий(int
i=0;i<Main->Count;i++)((Main->Strings[i].Pos("DemoScript")>0)
&& (Main->Strings[i][1] != '#'))
{[6]="";=
Main->Strings[i]; // " "(EditDemoScript->Text.Length()
>0)[6]=StringReplace(EditDemoScript->Text,"\\","/",TReplaceFlags()<<
rfReplaceAll);
{>MessageBox(MessegesLocale[5].c_str(),
Application->Title.c_str(), MB_OK | MB_ICONERROR);;
}((n=Main->Strings[i].Pos("\""))>0)
{=sl.SubString(1,n) ;(S[6].Length())
sl=sl+S[6] ;=sl+"\"";>Strings[i]=sl;;
}
}
//Скорость
вращения(Edit5->Text!=""
&& StrToInt(Edit5->Text)>=5 && StrToInt(Edit5->Text)<=400)
{(int i=0;i<Main->Count;i++)
{(Main->Strings[i].Pos("
RotateAcceleration "))>Strings[i]=" RotateAcceleration
"+Edit5->Text+".0";
}
}
{>MessageBox(MessegesLocale[2].c_str(),
Application->Title.c_str(), MB_OK |
MB_ICONERROR);->Color=clRed;->Font->Color=clWhite;;
}
//Чувствительность
мыши.DecimalSeparator='.';(int
i=0;i<Main->Count;i++)
{(Main->Strings[i].Pos("
MouseRotationSensitivity "))>Strings[i]=" MouseRotationSensitivity
"+Edit1->Text;
}.DecimalSeparator=',';>SaveToFile(ExtractFilePath(Application->ExeName)+"celestia.cfg");
delete Main;
//Музыкальный проигрыватель для Celestia EP v2.0
if(GroupBox6->Visible==true)
{= new
TIniFile(ExtractFilePath(Application->ExeName)+"celestia_ep.ini");(CheckBox21->Checked==true)>WriteString("Settings","Music","true");>WriteString("Settings","Music","false");>WriteString("Settings","Player",PlayerEdit->Text);EP;
}(AutoSave==false)>MessageBox(MessegesLocale[6].c_str(),
Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);
}
//ОБЪЕКТЫ
И
ВРЕМЯ__fastcall
TMainForm::BitBtn2Click(TObject *Sender)
{
//Солнечные
вспышки(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\solar-system\\sun\\","sun_flares",CheckBox1);("extras\\","sun_flares",CheckBox1);
//Кольца
Юпитера(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\solar-system\\planets-&-moons\\jupiter-&-moons\\","Jupiter
Rings",CheckBox2);("extras\\","Jupiter
Rings",CheckBox2);
//Достопримечательности
Марса(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\solar-system\\planets-&-moons\\mars\\","Mars
Surface Features",CheckBox10);("extras\\Solar
System\\Planet\\Mars\\","Mars Surface Features",CheckBox10);
//Пояс
Койпера(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\solar-system\\","kuiper-belt",CheckBox17);("extras\\","Kuiper_Belt",CheckBox17);
//Динамическая
атмосфера
Юпитера(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\solar-system\\planets-&-moons\\jupiter-&-moons\\","JupClouds",CheckBox18);("extras\\","Jupiter_Clouds",CheckBox18);
//Вулканы
Ио(Label19->Caption.Pos("Celestia
Extended Pack v1.0")) //недочет
в
самой
сборке("extras\\","iovolcanoes\\iovolcanoes",CheckBox19);
{(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\solar-system\\planets-&-moons\\jupiter-&-moons\\","iovolcanoes",CheckBox19);("extras\\","iovolcanoes",CheckBox19);
}
//Космический
лифт(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\fiction-objects\\","space-lift",CheckBox20);("extras\\","Space
Lift",CheckBox20);
//Облако
Оорта(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\solar-system\\","oort-cloud",CheckBox61);("extras\\","Oort_Cloud",CheckBox61);
//Подсветка
частиц
колец
Сатурна("data\\solar-system\\planets-&-moons\\saturn\\saturn-rings-model\\models\\saturn-ring-element.cmod",
CheckBox62);
//Космические
аппараты...(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"mir", "mir.ssc",
CheckBox9);("extras-standard\\", "mir",
"mir.ssc", CheckBox9);
//if(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
//EndingSave("data\\spacecrafts\\jupiter-missions\\",
"galileo", "galileo.ssc", CheckBox3);
//else
//EndingSave("extras-standard\\",
"galileo", "galileo.ssc",
CheckBox3);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\saturn-missions\\",
"cassini", "cassini.ssc",
CheckBox23);("extras\\", "Cassini-Huygens",
"cassini_huygens.ssc", CheckBox23);(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\near-earth-missions\\", "Sputnik
1", "sputnik-1.ssc", CheckBox24);("extras\\",
"Sputnik 1", "sputnik-1.ssc",
CheckBox24);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"Spoutnik 2", "Spoutnik.ssc",
CheckBox25);("extras\\", "Spoutnik 2",
"Spoutnik.ssc", CheckBox25);(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"Sputnik 3", "Spoutnik3.ssc",
CheckBox26);("extras\\", "Sputnik 3",
"Spoutnik3.ssc", CheckBox26);(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"Salyut7", "JACKsalyut7.ssc",
CheckBox27);("extras\\", "", "JACKsalyut7.ssc",
CheckBox27);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\venus-missions\\", "Mariner2",
"JACKmariner2-xyz.ssc", CheckBox28);("extras\\",
"Mariner2", "JACKmariner2-xyz.ssc",
CheckBox28);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\mars-missions\\",
"Mariner9", "mariner 9.ssc",
CheckBox28);("extras\\", "Mariner9", "mariner
9.ssc", CheckBox28);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\venus-missions\\",
"venus_express", "venus_express.ssc",
CheckBox29);("extras\\", "venus_express",
"venus_express.ssc", CheckBox29);
//EndingSave("extras\\",
"Chandra X-Ray Observatory", "chandra.ssc", CheckBox30); нет
информации
об
Ending'е
//EndingSave("extras\\",
"Corot", "Corot.ssc", CheckBox31); нет
информации
об
Ending'е
//if(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
//EndingSave("data\\spacecrafts\\space-observatories\\",
"herschel", "herschel.ssc", CheckBox32);
//else
//EndingSave("extras\\",
"herschel", "herschel.ssc", CheckBox32);
//EndingSave("extras\\",
"Voyager", "voyager.ssc", CheckBox33); нет
информации
об
Ending'е(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\kuiper-belt-missions\\",
"new_horizons_jpg_v2_small", "new_horizons.ssc",
CheckBox34);("extras\\", "new_horizons_jpg_v2_small",
"new_horizons.ssc",
CheckBox34);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"Spitzer", "JACKspitzer-xyz.ssc",
CheckBox35);("extras\\", "Spitzer",
"JACKspitzer-xyz.ssc", CheckBox35);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\space-observatories\\",
"ISO", "JACKiso.ssc", CheckBox36);("extras\\",
"ISO", "JACKiso.ssc",
CheckBox36);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\near-earth-missions\\",
"envisat", "envisat.ssc",
CheckBox37);("extras\\", "envisat", "envisat.ssc",
CheckBox37);
//EndingSave("extras\\",
"ao7", "AO7.ssc", CheckBox38); нет
информации
об
Ending'е
//if(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
//EndingSave("data\\spacecrafts\\moon-missions\\",
"apollo10", "apollo10.ssc", CheckBox39);
//else
//EndingSave("extras\\",
"apollo10", "apollo10.ssc", CheckBox39);
//
//if(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
//EndingSave("data\\spacecrafts\\moon-missions\\",
"Apollo_11", "apollo.ssc", CheckBox39);
//else
//EndingSave("extras\\",
"Apollo_11", "apollo.ssc",
CheckBox39);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\main-belt-missions\\",
"Dawn", "dawn.ssc", CheckBox40);("extras\\",
"Dawn", "dawn.ssc",
CheckBox40);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\cometary-missions\\",
"DeepImpact", "DeepImpact.ssc",
CheckBox41);("extras\\", "DeepImpact",
"DeepImpact.ssc", CheckBox41);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\cometary-missions\\",
"Giotto", "JACKgiottoflyby-xyz-ssc.ssc",
CheckBox42);("extras\\", "Giotto",
"JACKgiottoflyby-xyz-ssc.ssc",
CheckBox42);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\sun-missions\\", "Helios",
"JACKheliosSolarProbe-xyz.ssc", CheckBox43);("extras\\",
"Helios", "JACKheliosSolarProbe-xyz.ssc",
CheckBox43);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\cometary-missions\\",
"ice", "ice-xyz.ssc", CheckBox44);("extras\\",
"ice", "ice-xyz.ssc", CheckBox44);
//EndingSave("extras\\",
"lunarlanders", "lunarlandingsites.ssc", CheckBox45); нет
информации
об
Ending'е(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\moon-missions\\",
"lro", "lro.ssc", CheckBox46);("extras\\",
"lro", "lro.ssc", CheckBox46);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\venus-missions\\",
"Magellan-full", "JACKmagellan_venus.ssc",
CheckBox47);("extras\\", "Magellan-full", "JACKmagellan_venus.ssc",
CheckBox47);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\mars-missions\\", "Mars
Express", "mars express.ssc", CheckBox48);("extras\\",
"Mars Express", "mars express.ssc", CheckBox48);
//EndingSave("extras\\",
"EC_MGSf", "MGS.ssc", CheckBox49); нет
информации
об
Ending'е
//EndingSave("extras\\",
"Mars Reconaissance Orbiter", "MRO.ssc", CheckBox50); нет
информации
об
Ending'е
//EndingSave("extras\\",
"messenger", "messenger.ssc", CheckBox51); нет
информации
об
Ending'е(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\mars-missions\\",
"Nozomi", "JACKplanet-bfull-xyz.ssc",
CheckBox52);("extras\\", "Nozomi",
"JACKplanet-bfull-xyz.ssc", CheckBox52);
//EndingSave("extras\\",
"phoenix_lander", "phoenix_lander.ssc", CheckBox53); нет
информации
об
Ending'е(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))("data\\spacecrafts\\interplanetary-missions\\",
"Pioneers", "JACKearly_pioneers-xyz.ssc",
CheckBox54);("extras\\", "Pioneers", "JACKearly_pioneers-xyz.ssc",
CheckBox54);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\space-observatories\\",
"planck", "planck.ssc", CheckBox55);("extras\\",
"planck", "planck.ssc",
CheckBox55);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\space-observatories\\", "planck",
"planck_fov.ssc", CheckBox55);("extras\\",
"planck", "planck_fov.ssc",
CheckBox55);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\cometary-missions\\", "rosetta_brianj",
"rosetta.ssc", CheckBox56);("extras\\",
"rosetta_brianj", "rosetta.ssc",
CheckBox56);(Label19->Caption.Pos("Celestia Extended Pack
v3.0"))("data\\spacecrafts\\space-observatories\\",
"Ulysses-full", "JACKulysses-xyz.ssc",
CheckBox57);("extras\\", "Ulysses-full",
"JACKulysses-xyz.ssc", CheckBox57);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\venus-missions\\",
"Venera", "JACKveneraUSSR-xyz.ssc",
CheckBox58);("extras\\", "Venera",
"JACKveneraUSSR-xyz.ssc", CheckBox58);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\mars-missions\\",
"Viking-full", "viking.ssc",
CheckBox59);("extras\\", "Viking-full",
"viking.ssc", CheckBox59);(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))("data\\spacecrafts\\interplanetary-missions\\",
"Zond 3", "JACKzondUSSR-xyz.ssc", CheckBox60);("extras\\",
"Zond 3", "JACKzondUSSR-xyz.ssc",
CheckBox60);(AutoSave==false)>MessageBox(MessegesLocale[6].c_str(),
Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);
}
//LUA-ИНСТРУМЕНТЫ__fastcall
TMainForm::BitBtn3Click(TObject *Sender)
{Show;(LuaTab->Caption.Pos("Lua
Universal Tools v1.0"))="show_lua_universal_tools = ";
{(LuaTab->Caption.Pos("Lua
Universal Tools v2.0"))="show_lua_universal_tools_v2 =
";="show_lua_edu_tools = ";
}Info="enable_info =
";Coordinates="enable_coordinates = ";Kepler="enable_Kepler_param
= ";Compass="enable_compass = ";Cockpit="cockpitTexture =
";Zoom="enable_magnification = ";HR="enable_HR =
";Navi="enable_virtual_pad = ";LocalTime="show_local_time =
";CenterCompass="center_compass =
";AltAzim="alt_azimuthal_mode =
";CustomDuration="custom_goto_duration =
";DigitDur="";*Lua=new
TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+LuaAdr+"config.lua");
//Показывать
панель(CheckBox4->Checked)
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Show))>Strings[i]=Show+"true";
}
}
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Show))>Strings[i]=Show+"false";
}
}
//Инфо
об
обьекте(CheckBox5->Checked)
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Info))>Strings[i]="enable_info
= true";
}
}
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Info))>Strings[i]="enable_info
= false";
}
}
//Координаты(CheckBox6->Checked)
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Coordinates))>Strings[i]="enable_coordinates
= true";
}
}
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Coordinates))>Strings[i]="enable_coordinates
= false";
}
}
//Режим
"Увеличение"(CheckBox11->Checked)
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Zoom))>Strings[i]="enable_magnification
= true";
}
}
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Zoom))>Strings[i]="enable_magnification
= false";
}
}
//Диаграмма
Г-Р(CheckBox12->Checked)
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(HR))>Strings[i]="enable_HR
= true";
}
}
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(HR))>Strings[i]="enable_HR
= false";
}
}
//Кеплеровы
параметры(CheckBox7->Checked)
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Kepler))>Strings[i]="enable_Kepler_param
= true";
}
}
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Kepler))>Strings[i]="enable_Kepler_param
= false";
}
}
//Джойстик(CheckBox13->Checked)
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Navi))>Strings[i]="enable_virtual_pad
= true";
}
}
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Navi))>Strings[i]="enable_virtual_pad
= false";
}
}
//Компас(CheckBox8->Checked)
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Compass))>Strings[i]="enable_compass
= true";
}
}
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(Compass))>Strings[i]="enable_compass
= false";
}
}
//Пояс
астероидов*Addon
= new
TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+LuaAdr+"\\adds\\Asteroid_Belt\\"+"Asteroid_Belt.ssc");(CheckBox63->Checked==true)>Text=StringReplace(Addon->Text,"Visible
false","Visible true",TReplaceFlags()<<
rfReplaceAll);>Text=StringReplace(Addon->Text,"Visible
true","Visible false",TReplaceFlags()<<
rfReplaceAll);>SaveToFile(ExtractFilePath(Application->ExeName)+LuaAdr+"\\adds\\Asteroid_Belt\\"+"Asteroid_Belt.ssc");Addon;
//Показывать
местное
время(CheckBox14->Checked)
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(LocalTime))>Strings[i]="show_local_time
= true";
}
}
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(LocalTime))>Strings[i]="show_local_time
= false";
}
}
//Компасс
по
центру(CheckBox15->Checked)
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(CenterCompass))>Strings[i]="center_compass
= true";
}
}
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(CenterCompass))>Strings[i]="center_compass
= false";
}
}
//Режим
Альт-Азимут(CheckBox16->Checked)
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(AltAzim))>Strings[i]="alt_azimuthal_mode
= true";
}
}
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(AltAzim))>Strings[i]="alt_azimuthal_mode
= false";
}
}
//Формат
даты(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos("date_format
= "))
{(ComboBox2->ItemIndex==0)>Strings[i]="date_format
=
\"country_default\"";(ComboBox2->ItemIndex==1)>Strings[i]="date_format
= \"day/month/year\"";(ComboBox2->ItemIndex==2)>Strings[i]="date_format
=
\"month/day/year\"";(ComboBox2->ItemIndex==3)>Strings[i]="date_format
= \"year/month/day\"";
}
}
//Длительность перелета к
объекту(Edit4->Text!="" &&
StrToInt(Edit4->Text)>=0 && StrToInt(Edit4->Text)<=20)
{(int i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos(CustomDuration))>Strings[i]="custom_goto_duration
= "+Edit4->Text;
}
}
{>MessageBox(MessegesLocale[2].c_str(),
Application->Title.c_str(), MB_OK |
MB_ICONERROR);->Color=clRed;->Font->Color=clWhite;;
}
//Цветовая
схема(int
i=0;i<Lua->Count;i++)
{(Lua->Strings[i].Pos("
cFrameFill = "))
{(RadioGroup1->ItemIndex==0)
{>Strings[i]=" cFrameFill =
{0, 0 , 0, 0}";>Strings[i+1]=" cDisplFill = {0, 0 , 0,
0}";>Strings[i+2]="";
}(RadioGroup1->ItemIndex==1)
{>Strings[i]=" cFrameFill =
{0, 0 , 0.5, 0.4}";>Strings[i+1]=" cDisplFill = {0, 0.5, 0.5,
0.4}";>Strings[i+2]=" cPanelFill = {0.05, 0.1 , 0.1, 0.9}";
}(RadioGroup1->ItemIndex==2)
{>Strings[i]=" cFrameFill =
{0.2, 0.4 , 0.3, 0.4}";>Strings[i+1]=" cDisplFill = {0, 0.3, 0.7,
0.4}";>Strings[i+2]="";
}(RadioGroup1->ItemIndex==3)
{>Strings[i]=" cFrameFill =
{0.4, 0.3, 0.6, 0.4}";>Strings[i+1]=" cDisplFill = {0, 0.5, 0.5,
0.4}";>Strings[i+2]="";
}
}
}>SaveToFile(ExtractFilePath(Application->ExeName)+LuaAdr+"config.lua");
delete
Lua;(AutoSave==false)>MessageBox(MessegesLocale[6].c_str(),
Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);
}
//О
ПРОГРАММЕ__fastcall
TMainForm::LabelLink2Click(TObject *Sender)
{(Handle, NULL,
L"http://www.celestiaproject.ru", NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------__fastcall
TMainForm::LabelLink2MouseLeave(TObject *Sender)
{->Font->Style = TFontStyles()
>> fsUnderline;
}__fastcall
TMainForm::LabelLink2MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{->Font->Style = TFontStyles()
<< fsUnderline;
}
//---------------------------------------------------------------------------
__fastcall
TMainForm::Edit2KeyPress(TObject *Sender, char &Key)
{(Key >='0' && Key
<='9' || Key==VK_BACK);=0;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit3KeyPress(TObject *Sender, char &Key)
{(Key >='0' && Key
<='9' || Key==VK_BACK);=0;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit2Click(TObject *Sender)
{->Color=clWindow;->Font->Color=clWindowText;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit3Click(TObject *Sender)
{->Color=clWindow;->Font->Color=clWindowText;
}
//---------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
// ВОССТАНОВЛЕНИЕ
ЗНАЧЕНИЙ
ПО
УМОЛЧАНИЮ
//
////////////////////////////////////////////////////////////////////////////////__fastcall
TMainForm::BitBtn4Click(TObject *Sender)
{(Application->MessageBox(MessegesLocale[7].c_str(),
Application->Title.c_str(), MB_YESNO | MB_ICONQUESTION)==IDYES)
{
//Для того, чтобы при выполнении кнопок
"Сохранить" не выскакивало сообщение
AutoSave=true;
//Основные(Label19->Caption.Pos("Celestia
Extended Pack v3.0"))
{->Text="data";->Text="lua-applications";->Text="extras";
}
{->Text="extras-standard";->Text="extras";->Text="";
}->Text="100";->Text="100";->Checked=true;>Text="";->ItemIndex=0;(Label19->Caption.Pos("Celestia
Extended Pack
v3.0"))>Text="start.celx";>Text="start.cel";>Text="demo.cel";->Text="120";->Position=120;->Text="1.0";->Position=10;->Click();
//Объекты
и
время->State=0;->State=1;->State=1;->State=0;->State=1;->State=0;->State=0;->State=0;->State=0;
//Космические
аппараты->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->Click();
//LUA-инструменты(Label11->Visible==false)
//если
Lua-инструменты
установлены
{->State=1;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=1;->State=0;->State=0;->ItemIndex=0;->Text="15";(LuaTab->Caption.Pos("Lua
Universal Tools"))->ItemIndex=1;->Click();
}=false;>MessageBox(MessegesLocale[8].c_str(),
Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);
}
}
//---------------------------------------------------------------------------__fastcall
TMainForm::RadioButton1Click(TObject *Sender)
{->Checked=false;->Checked=false;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::RadioButton2Click(TObject *Sender)
{->Checked=false;->Checked=false;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::RadioButton3Click(TObject *Sender)
{->Checked=false;->Checked=false;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit2Change(TObject *Sender)
{->Color=clWindow;->Font->Color=clWindowText;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit3Change(TObject *Sender)
{->Color=clWindow;->Font->Color=clWindowText;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::ButtonDir1Click(TObject *Sender)
{[0] =
S[3];(SelectDirectory(StringsLocale[7].c_str(), L"", S[0]))->Text
= S[0] ;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::ButtonDir2Click(TObject *Sender)
{[1] =
S[3];(SelectDirectory(StringsLocale[7].c_str(), L"", S[1]))->Text
= S[1] ;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::ButtonDir3Click(TObject *Sender)
{[2] = S[3];(SelectDirectory(StringsLocale[7].c_str(),
"", S[2]))
EditDir3->Text = S[2] ;
}
//---------------------------------------------------------------------------
//Обработка клика по картинкам курсоров
void __fastcall
TMainForm::Image2Click(TObject *Sender)
{->Checked=true;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Image3Click(TObject *Sender)
{->Checked=true;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Image4Click(TObject *Sender)
{->Checked=true;
}
//---------------------------------------------------------------------------
//Запрет редактирования полей папок
void __fastcall
TMainForm::Label10MouseLeave(TObject *Sender)
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label10MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{->Font->Style = TFontStyles()
<< fsUnderline;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label10Click(TObject *Sender)
{(Handle, NULL,
LinkLocale[8].c_str(), NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label14MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{->Font->Style = TFontStyles()
<< fsUnderline;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label14MouseLeave(TObject *Sender)
{->Font->Style = TFontStyles()
>> fsUnderline;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label14Click(TObject *Sender)
{(Handle, NULL,
LinkLocale[7].c_str(), NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label16MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{->Font->Style = TFontStyles()
<< fsUnderline;
}
//---------------------------------------------------------------------------
__fastcall
TMainForm::Label16MouseLeave(TObject *Sender)
{->Font->Style = TFontStyles()
>> fsUnderline;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label16Click(TObject *Sender)
{(Handle, NULL,
LinkLocale[2].c_str(), NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Button1Click(TObject *Sender)
{(SelectDirectory(StringsLocale[8].c_str(),
"", S[4]))>Text = S[4] ;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit5Change(TObject *Sender)
{->Color=clWindow;->Font->Color=clWindowText;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit5Click(TObject *Sender)
{->Color=clWindow;->Font->Color=clWindowText;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit5KeyPress(TObject *Sender, char &Key)
{(Key >='0' && Key
<='9' || Key==VK_BACK);=0;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::ScrollBar1Change(TObject *Sender)
{->Text=ScrollBar1->Position;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::ScrollBar2Change(TObject *Sender)
{pos,
tmpp;st;.DecimalSeparator='.';=ScrollBar2->Position;=pos/10;=FloatToStrF(tmpp,ffFixed,2,1);->Text=st;.DecimalSeparator=',';
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit1Change(TObject *Sender)
{->Color=clWindow;->Font->Color=clWindowText;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit1Click(TObject *Sender)
{->Color=clWindow;->Font->Color=clWindowText;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit4Change(TObject *Sender)
{->Color=clWindow;->Font->Color=clWindowText;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit4Click(TObject *Sender)
{->Color=clWindow;->Font->Color=clWindowText;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Edit4KeyPress(TObject *Sender, char &Key)
{(Key >='0' && Key
<='9' || Key==VK_BACK);=0;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::CheckBox16Click(TObject *Sender)
{(CheckBox16->Checked)->Caption=StringsLocale[9];->Caption=StringsLocale[10];
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Button2Click(TObject *Sender)
{(PlayerDialog->Execute())
{
PlayerEdit->Text=PlayerDialog->FileName;
}
}
//---------------------------------------------------------------------------__fastcall
TMainForm::CheckBox22Click(TObject *Sender)
{(CheckBox22->Checked==true)(true);(false);
}
//---------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
// НОВЫЕ
ФУНКЦИИ
//
////////////////////////////////////////////////////////////////////////////////
//Проверка
вкладки
Объекты
и
времяTMainForm::ObjectProv(String
PodFolder, String Folder, String SSC, TCheckBox *Check)
{(FileExists(ExtractFilePath(Application->ExeName)+PodFolder+Folder+"\\"+SSC)
|| FileExists(ExtractFilePath(Application->ExeName)+"temp\\"+Folder+"\\"+SSC))
{>Enabled=true;(FileExists(ExtractFilePath(Application->ExeName)+PodFolder+Folder+"\\"+SSC))>Checked=true;>Checked=false;
}
{>Checked=false;>Enabled=false;
//Добавляем ссылки на
скачивание(Check==CheckBox10) //Достопримечательности Марса
Label16->Visible=true;(Check==CheckBox17)
//Пояс
Койпера->Visible=true;(Check==CheckBox18)
//Динамическая
модель
атмосферы
Юпитера->Visible=true;(Check==CheckBox61)
//Облако
Оорта->Visible=true;(Check==CheckBox20)
//Космический
Лифт
Label15->Visible=true;
}
}
//Сохранение настроек вкладки Объекты и время
void TMainForm::ObjectSave(String
PodFolder, String Folder, TCheckBox *Check)
{path1,path2;(Check->Checked==true)
{=ExtractFilePath(Application->ExeName)+"temp\\"+Folder;=ExtractFilePath(Application->ExeName)+PodFolder+Folder;(path1.w_str(),
path2.w_str(), MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING);
}
{=ExtractFilePath(Application->ExeName)+PodFolder+Folder;=ExtractFilePath(Application->ExeName)+"temp\\"+Folder;(path1.w_str(),
path2.w_str(), MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING);
}= NULL;= NULL;
}
//Проверка космических аппаратов
void TMainForm::EndingProv(String
Dir, String Folder, String SSC, TCheckBox *Check)
{(FileExists(ExtractFilePath(Application->ExeName)+Dir+Folder+"\\"+SSC))
{*Ending=new
TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+Dir+Folder+"\\"+SSC);(Ending->Text.Pos("#Ending"))>Checked=true;>Checked=false;Ending;
}>Enabled=false;
}
//Сохранение
параметров
космических
аппаратовTMainForm::EndingSave(String
Dir, String Folder, String SSC, TCheckBox *Check)
{(Check->Enabled==true)
{*Ending=new
TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+Dir+Folder+"\\"+SSC);(Check->Checked==true)
{>Text=StringReplace(Ending->Text,"#Ending","Ending",TReplaceFlags()<<
rfReplaceAll);>Text=StringReplace(Ending->Text,"Ending","#Ending",TReplaceFlags()<<
rfReplaceAll);
}>Text=StringReplace(Ending->Text,"#Ending","Ending",TReplaceFlags()<<
rfReplaceAll);>SaveToFile(ExtractFilePath(Application->ExeName)+Dir+Folder+"\\"+SSC);
delete Ending;
}
}
//Выбрать все чекбоксы космических кораблей
void TMainForm::CheckAll(bool
checked)
{->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;
//CheckBox30->Checked=checked; нет
информации
об
Ending'е
//CheckBox31->Checked=checked; нет
информации
об
Ending'е->Checked=checked;
//CheckBox33->Checked=checked; нет
информации
об
Ending'е->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;
//CheckBox38->Checked=checked;м->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;
//CheckBox45->Checked=checked; нет
информации
об
Ending'е->Checked=checked;->Checked=checked;->Checked=checked;
//CheckBox49->Checked=checked; нет
информации
об
Ending'е
//CheckBox50->Checked=checked; нет
информации
об
Ending'е
//CheckBox51->Checked=checked; нет
информации
об
Ending'е->Checked=checked;
//CheckBox53->Checked=checked; нет
информации
об
Ending'е->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;
}__fastcall
TMainForm::Button3Click(TObject *Sender)
{(ImportDialog->Execute())
{
//Для того, чтобы при выполнении кнопок
"Сохранить" не выскакивало сообщение
AutoSave=true;
//Основные=
new
TIniFile(ImportDialog->FileName);->Text=Settings->ReadString("Main","ExtrasDir1","");->Text=Settings->ReadString("Main","ExtrasDir2","");->Text=Settings->ReadString("Main","ExtrasDir3","");->Text=Settings->ReadString("Main","OrbitPathSamplePoints","");->Text=Settings->ReadString("Main","RingSystemSections","");Temp=Settings->ReadString("Main","Cursor","");(Temp=="crosshair")->Checked=true;(Temp=="inverting_crosshair")->Checked=true;(Temp=="arrow")->Checked=true;>Text=Settings->ReadString("Main","ScriptScreenshotDirectory","");->ItemIndex=Settings->ReadInteger("Main","ScriptSystemAccessPolicy",0);>Text=Settings->ReadString("Main","InitScript","");>Text=Settings->ReadString("Main","DemoScript","");->Text=Settings->ReadString("Main","RotateAcceleration","");->Text=Settings->ReadString("Main","MouseRotationSensitivity","");->Click();
//Объекты
и
время->State=Settings->ReadBool("ObjectsTime","SunFlares",0);->State=Settings->ReadBool("ObjectsTime","JupiterRings",0);->State=Settings->ReadBool("ObjectsTime","MarsSurfaceFeatures",0);->State=Settings->ReadBool("ObjectsTime","KuiperBelt",0);->State=Settings->ReadBool("ObjectsTime","JupiterClouds",0);->State=Settings->ReadBool("ObjectsTime","IoVolcanoes",0);->State=Settings->ReadBool("ObjectsTime","SpaceLift",0);->State=Settings->ReadBool("ObjectsTime","OortCloud",0);->State=Settings->ReadBool("ObjectsTime","HighlightSaturnRings",0);
//Космические
аппараты->State=Settings->ReadBool("Spacecrafts","Mir",0);->State=Settings->ReadBool("Spacecrafts","Galileo",0);->State=Settings->ReadBool("Spacecrafts","CassiniHuygens",0);->State=Settings->ReadBool("Spacecrafts","Sputnik1",0);->State=Settings->ReadBool("Spacecrafts","Sputnik2",0);->State=Settings->ReadBool("Spacecrafts","Sputnik3",0);->State=Settings->ReadBool("Spacecrafts","Salyut7",0);->State=Settings->ReadBool("Spacecrafts","Mariner",0);->State=Settings->ReadBool("Spacecrafts","VenusExpress",0);->State=Settings->ReadBool("Spacecrafts","Herschel",0);->State=Settings->ReadBool("Spacecrafts","NewHorizons",0);->State=Settings->ReadBool("Spacecrafts","Spitzer",0);->State=Settings->ReadBool("Spacecrafts","ISO",0);->State=Settings->ReadBool("Spacecrafts","Envisat",0);->State=Settings->ReadBool("Spacecrafts","Apollo",0);->State=Settings->ReadBool("Spacecrafts","Dawn",0);->State=Settings->ReadBool("Spacecrafts","DeepImpact",0);->State=Settings->ReadBool("Spacecrafts","Giotto",0);->State=Settings->ReadBool("Spacecrafts","Helios",0);->State=Settings->ReadBool("Spacecrafts","ICE",0);->State=Settings->ReadBool("Spacecrafts","LRO",0);->State=Settings->ReadBool("Spacecrafts","Magellan",0);->State=Settings->ReadBool("Spacecrafts","MarsExpress",0);->State=Settings->ReadBool("Spacecrafts","Nozomi",0);->State=Settings->ReadBool("Spacecrafts","Pioneers",0);->State=Settings->ReadBool("Spacecrafts","Planck",0);->State=Settings->ReadBool("Spacecrafts","Rosetta",0);->State=Settings->ReadBool("Spacecrafts","Ulysses",0);->State=Settings->ReadBool("Spacecrafts","Venera",0);->State=Settings->ReadBool("Spacecrafts","Viking",0);->State=Settings->ReadBool("Spacecrafts","Zond3",0);->Click();
//LUA-инструменты(Label11->Visible==false)
//если
Lua-инструменты
установлены
{->State=Settings->ReadBool("LuaTools","ShowTools",0);->State=Settings->ReadBool("LuaTools","Info",0);->State=Settings->ReadBool("LuaTools","Coordinates",0);->State=Settings->ReadBool("LuaTools","Magnification",0);->State=Settings->ReadBool("LuaTools","HR",0);->State=Settings->ReadBool("LuaTools","KeplerParam",0);->State=Settings->ReadBool("LuaTools","VirtualPad",0);->State=Settings->ReadBool("LuaTools","Compass",0);->State=Settings->ReadBool("LuaTools","AsteroidBelt",0);->State=Settings->ReadBool("LuaTools","LocalTime",0);->State=Settings->ReadBool("LuaTools","CenterCompass",0);->State=Settings->ReadBool("LuaTools","AltAzimuthal",0);->ItemIndex=Settings->ReadInteger("LuaTools","DateFormat",0);->Text=Settings->ReadString("LuaTools","GotoDuration","");(LuaTab->Caption.Pos("Lua
Universal Tools"))->ItemIndex=Settings->ReadInteger("LuaTools","ColorScheme",0);->Click();
}=false;>MessageBox(MessegesLocale[9].c_str(),
Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);
}
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label32MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{->Font->Style = TFontStyles()
<< fsUnderline << fsBold;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label32MouseLeave(TObject *Sender)
{->Font->Style = TFontStyles()
>> fsUnderline << fsBold;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label32Click(TObject *Sender)
{(Handle, NULL,
LinkLocale[1].c_str(), NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Button4Click(TObject *Sender)
{(ExportDialog->Execute())
{
//Основные=
new
TIniFile(ExportDialog->FileName);>WriteString("Main","ExtrasDir1",EditDir1->Text);>WriteString("Main","ExtrasDir2",EditDir2->Text);>WriteString("Main","ExtrasDir3",EditDir3->Text);>WriteString("Main","OrbitPathSamplePoints",Edit2->Text);>WriteString("Main","RingSystemSections",Edit3->Text);Temp;(RadioButton1->Checked==true)="crosshair";(RadioButton2->Checked==true)="inverting_crosshair";(RadioButton3->Checked==true)="arrow";>WriteString("Main","Cursor",Temp);>WriteString("Main","ScriptScreenshotDirectory",EditScreenDir->Text);>WriteInteger("Main","ScriptSystemAccessPolicy",ComboBox1->ItemIndex);>WriteString("Main","InitScript",EditStartScript->Text);>WriteString("Main","DemoScript",EditDemoScript->Text);>WriteString("Main","RotateAcceleration",Edit5->Text);>WriteString("Main","MouseRotationSensitivity",Edit1->Text);
//Объекты
и
время>WriteBool("ObjectsTime","SunFlares",CheckBox1->State);>WriteBool("ObjectsTime","JupiterRings",CheckBox2->State);>WriteBool("ObjectsTime","MarsSurfaceFeatures",CheckBox10->State);>WriteBool("ObjectsTime","KuiperBelt",CheckBox17->State);>WriteBool("ObjectsTime","JupiterClouds",CheckBox18->State);>WriteBool("ObjectsTime","IoVolcanoes",CheckBox19->State);>WriteBool("ObjectsTime","SpaceLift",CheckBox20->State);>WriteBool("ObjectsTime","OortCloud",CheckBox61->State);>WriteBool("ObjectsTime","HighlightSaturnRings",CheckBox62->State);
//Космические
аппараты>WriteBool("Spacecrafts","Mir",CheckBox9->State);>WriteBool("Spacecrafts","Galileo",CheckBox3->State);>WriteBool("Spacecrafts","CassiniHuygens",CheckBox23->State);>WriteBool("Spacecrafts","Sputnik1",CheckBox24->State);>WriteBool("Spacecrafts","Sputnik2",CheckBox25->State);>WriteBool("Spacecrafts","Sputnik3",CheckBox26->State);>WriteBool("Spacecrafts","Salyut7",CheckBox27->State);>WriteBool("Spacecrafts","Mariner",CheckBox28->State);>WriteBool("Spacecrafts","VenusExpress",CheckBox29->State);>WriteBool("Spacecrafts","Herschel",CheckBox32->State);>WriteBool("Spacecrafts","NewHorizons",CheckBox34->State);>WriteBool("Spacecrafts","Spitzer",CheckBox35->State);>WriteBool("Spacecrafts","ISO",CheckBox36->State);>WriteBool("Spacecrafts","Envisat",CheckBox37->State);>WriteBool("Spacecrafts","Apollo",CheckBox39->State);>WriteBool("Spacecrafts","Dawn",CheckBox40->State);>WriteBool("Spacecrafts","DeepImpact",CheckBox41->State);>WriteBool("Spacecrafts","Giotto",CheckBox42->State);>WriteBool("Spacecrafts","Helios",CheckBox43->State);>WriteBool("Spacecrafts","ICE",CheckBox44->State);>WriteBool("Spacecrafts","LRO",CheckBox46->State);>WriteBool("Spacecrafts","Magellan",CheckBox47->State);>WriteBool("Spacecrafts","MarsExpress",CheckBox48->State);>WriteBool("Spacecrafts","Nozomi",CheckBox52->State);>WriteBool("Spacecrafts","Pioneers",CheckBox54->State);>WriteBool("Spacecrafts","Planck",CheckBox55->State);>WriteBool("Spacecrafts","Rosetta",CheckBox56->State);>WriteBool("Spacecrafts","Ulysses",CheckBox57->State);>WriteBool("Spacecrafts","Venera",CheckBox58->State);>WriteBool("Spacecrafts","Viking",CheckBox59->State);>WriteBool("Spacecrafts","Zond3",CheckBox60->State);
//LUA-инструменты(Label11->Visible==false)
//если не установлены
{>WriteBool("LuaTools","ShowTools",CheckBox4->State);>WriteBool("LuaTools","Info",CheckBox5->State);>WriteBool("LuaTools","Coordinates",CheckBox6->State);>WriteBool("LuaTools","Magnification",CheckBox11->State);>WriteBool("LuaTools","HR",CheckBox12->State);>WriteBool("LuaTools","KeplerParam",CheckBox7->State);>WriteBool("LuaTools","VirtualPad",CheckBox13->State);>WriteBool("LuaTools","Compass",CheckBox8->State);>WriteBool("LuaTools","AsteroidBelt",CheckBox63->State);>WriteBool("LuaTools","LocalTime",CheckBox14->State);>WriteBool("LuaTools","CenterCompass",CheckBox15->State);>WriteBool("LuaTools","AltAzimuthal",CheckBox16->State);>WriteInteger("LuaTools","DateFormat",ComboBox2->ItemIndex);>WriteString("LuaTools","GotoDuration",Edit4->Text);(LuaTab->Caption.Pos("Lua
Universal
Tools"))>WriteInteger("LuaTools","ColorScheme",RadioGroup1->ItemIndex);
}=MessegesLocale[10]+"
"+ExportDialog->FileName;>MessageBox(Temp.c_str(),
Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);
}
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label8MouseLeave(TObject *Sender)
{->Font->Style = TFontStyles()
>> fsUnderline;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label8MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{->Font->Style = TFontStyles()
<< fsUnderline;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label8Click(TObject *Sender)
{(Handle, NULL, LinkLocale[6].c_str(),
NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label13MouseLeave(TObject *Sender)
{->Font->Style = TFontStyles()
>> fsUnderline;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label13MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{->Font->Style = TFontStyles()
<< fsUnderline;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label13Click(TObject *Sender)
{(Handle, NULL,
LinkLocale[3].c_str(), NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------
__fastcall
TMainForm::Link1MouseLeave(TObject *Sender)
{->Font->Style = TFontStyles()
>> fsUnderline << fsBold;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Link1MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{->Font->Style = TFontStyles()
<< fsUnderline << fsBold;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Link1Click(TObject *Sender)
{(Handle, NULL, Link[1].c_str(),
NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Link2MouseLeave(TObject *Sender)
{->Font->Style = TFontStyles()
>> fsUnderline << fsBold;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Link2MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{->Font->Style = TFontStyles()
<< fsUnderline << fsBold;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Link2Click(TObject *Sender)
{(Handle, NULL, Link[2].c_str(),
NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Link3MouseLeave(TObject *Sender)
{->Font->Style = TFontStyles()
>> fsUnderline << fsBold;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Link3MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{->Font->Style = TFontStyles()
<< fsUnderline << fsBold;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Link3Click(TObject *Sender)
{(Handle, NULL, Link[3].c_str(),
NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Link4MouseLeave(TObject *Sender)
{->Font->Style = TFontStyles()
>> fsUnderline << fsBold;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Link4MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{->Font->Style = TFontStyles()
<< fsUnderline << fsBold;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Link4Click(TObject *Sender)
{(Handle, NULL, Link[4].c_str(),
NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label15MouseLeave(TObject *Sender)
{->Font->Style = TFontStyles()
>> fsUnderline;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label15MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{->Font->Style = TFontStyles()
<< fsUnderline;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label15Click(TObject *Sender)
{(Handle, NULL,
LinkLocale[5].c_str(), NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label33MouseLeave(TObject *Sender)
{->Font->Style = TFontStyles()
>> fsUnderline;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label33MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{->Font->Style = TFontStyles()
<< fsUnderline;
}
//---------------------------------------------------------------------------__fastcall
TMainForm::Label33Click(TObject *Sender)
{(Handle, NULL,
LinkLocale[4].c_str(), NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------TMainForm::HSatRingsProv(String
Path, TCheckBox *Check)
{(FileExists(ExtractFilePath(Application->ExeName)+Path))
{*List = new
TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+Path);(List->Strings[10]
== "diffuse 0.46 0.46 0.42" && List->Strings[11] ==
"opacity 0.008")>Checked=false;>Checked=true;List;
}
{>Checked=false;>Enabled=false;
}
}TMainForm::HSatRingsSave(String
Path, TCheckBox *Check)
{(FileExists(ExtractFilePath(Application->ExeName)+Path))
{*List = new TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+Path);(Check->Checked==true)
{>Strings[10] = "diffuse 1 0
0";>Strings[11] = "opacity 0.125";
}
{>Strings[10] = "diffuse
0.46 0.46 0.42";>Strings[11] = "opacity 0.008";
}>SaveToFile(ExtractFilePath(Application->ExeName)+Path);List;
}
}__fastcall
TMainForm::HlpClick(TObject *Sender)
{HelpFile =
ExtractFilePath(Application->ExeName)+"manager\\help\\"+Language+".chm";(FileExists(HelpFile))(Handle,
NULL, HelpFile.c_str(), NULL, NULL, SW_SHOWNORMAL);
{(Application->MessageBox(StringsLocale[11].c_str(),
Application->Title.c_str(), MB_YESNO | MB_ICONQUESTION)==IDYES)
{=
ExtractFilePath(Application->ExeName)+"manager\\help\\English.chm";(Handle,
NULL, HelpFile.c_str(), NULL, NULL, SW_SHOWNORMAL);
}
}
}
//---------------------------------------------------------------------------