Автоматизированное проектирование натяжных потолков
Применение натяжных потолков берёт начало ещё в далёких античных временах. Современный натяжной потолок представляет собой конструкцию из полотна, закреплённого на алюминиевом или пластиковом профиле под основным потолком. Ранние потолки чаще всего использовались в квартирах и офисных помещениях, где качественный ремонт настоящего потолка практически неосуществим. Позднее, следуя тенденциям… Читать ещё >
Автоматизированное проектирование натяжных потолков (реферат, курсовая, диплом, контрольная)
Автоматизированное проектирование натяжных потолков
- Введение
- Автоматизированное проектирование натяжных потолков
- Текст программы
- Описание программы
- Входными данными являются:
- Описание применения
- Руководство программиста
- Заключение
- Приложения
Со времён суммирующей машины Блеза Паскаля до появления первых ЭВМ компьютеры совершили огромный скачок вперёд — как по части сложности, так с точки зрения вычислительной мощности. И вместе с ростом мощностей росла и полезность применения компьютеров в тех или иных областях жизни человека. Так компьютер проник в сферу производства. Безусловно, первые компьютеры могли позволить себе далеко не все предприятия, и их цена ставила вопрос о целесообразности для конкретной организации введения в работу такого технического новшества. Но постепенно, с ростом количества компьютеров и повышением их мощностей, а также постепенным снижением их стоимости, компьютеры получали всё большее и большее распространение и внедрялись в новые сферы деятельности.
Сегодняшний компьютер — это универсальный оптимизатор рабочего времени, без которого трудно представить работу многих специалистов в самых различных областях. В том числе компьютеры используются и при проектировании натяжных потолков.
Применение натяжных потолков берёт начало ещё в далёких античных временах. Современный натяжной потолок представляет собой конструкцию из полотна, закреплённого на алюминиевом или пластиковом профиле под основным потолком. Ранние потолки чаще всего использовались в квартирах и офисных помещениях, где качественный ремонт настоящего потолка практически неосуществим. Позднее, следуя тенденциям, натяжные потолки начали набирать популярность и пользоваться всё большим и большим вниманием, становясь неотъемлемой частью интерьера.
Использование натяжных потолков не только эстетично, но и практично — натяжные потолки имеют ряд важных преимуществ перед настоящими, в числе которых высокая скорость монтажа, исключение трудовых затрат на подготовительные и финишные работы и обеспечение защиты помещения от протечек сверху.
Проектирование выкройки полотна связано с точным расчётом площади, поскольку неточности в расчётах могут привести к некачественной установке потолка и, как следствие, к его скорому провисанию. Поэтому очень важно при проектировании выкройки учесть все особенности формы настоящего потолка.
Программа «CEILING», разрабатываемая в качестве дипломного проекта, предоставляет широкие возможности по графическому проектированию потолков и расчёту их площади, что позволит значительно сократить временные и финансовые затраты на составление макетов потолков, повысить точность вычислений и, следовательно, поднять эффективность работы специалиста-проектировщика. Благодаря эффективному алгоритму нахождения площадей плоских многоугольников по координатам вершин, реализованному на языке программирования, результаты выполняемых программой расчётов имеют высокую степень точности и могут использоваться при выкройке полотна.
Автоматизированное проектирование натяжных потолков
Основанием для разработки программы, автоматизирующей проектирование натяжных потолков, является задание на дипломный проект, выданное учреждением образования «Гомельский государственный машиностроительный колледж» 21 марта 2011 года.
Программа предназначена для автоматизации действий, выполняемых специалистами-проектировщиками фирм, занимающихся установкой натяжных потолков.
Использование программы значительно сокращает время, необходимое для проектирования макета потолка и расчёта стоимости установки натяжных потолков. В основе действий, выполняемых программой при вычислении площадей потолков по шаблону, лежат формулы нахождения площадей геометрических фигур:
Рисунок 1 Прямоугольник
(1)
Рисунок 2 Параллелограмм
(2)
Рисунок 3 Трапеция
(3)
Рисунок 4 Треугольник
(4)
Рисунок 5 Круг
(5)
Рисунок 6 Эллипс
(6)
Рисунок 7 Правильный n-угольник
(7)
При графическом проектировании потолка используется алгоритм, который позволяет находить точную площадь произвольного многоугольника и, в отличие от большинства схожих алгоритмов, не зависит от порядка обхода вершин.
Алгоритм находит наивысшую точку в массиве координат точек, образующих спроектированный многоугольник, и сравнивает её со всеми остальными точками в цикле, на каждой итерации увеличивая результат на следующее выражение:
(8)
По завершении цикла модуль итогового значения делится на два, образуя результат.
Для решения задачи предлагаются следующие входные и выходные данные:
· длины сторон (м.);
· длина высоты (м.);
· количество сторон;
· радиус (м.);
· координаты точек;
· Ф. И.О. заказчика;
· количество светильников;
· количество труб;
· стоимость светильника (долл.);
· стоимость трубы (долл.);
· стоимость квадратного метра (долл.).
Выходные данные:
· площадь потолка комнаты (м. кв.);
· площадь натяжного потолка (м. кв.);
· общая стоимость заказа (долл.);
· сумма задатка (долл.).
Разрабатываемая программа должна предоставлять пользователю следующие возможности:
1 ввод данных;
2 хранение данных, необходимых для расчётов;
3 вычисление площадей потолков простой формы по шаблону;
4 графическое проектирование и вычисление площадей потолков сложной формы;
5 просмотр результатов;
6 расчёт стоимости установки потолка;
7 вывод отчётов с результатами вычислений в текстовые файлы *. txt и графические файлы *. bmp.
Результатом расчётов являются следующие значения:
· площадь потолка комнаты (м. кв.);
· площадь натяжного потолка (м. кв.);
· общая стоимость заказа (долл.);
· сумма задатка (долл.).
Результаты работы программы должны выводиться на экран монитора и по желанию пользователя экспортироваться в текстовые файлы *. txt и графические файлы *. bmp.
Для написания данной программы был выбран язык программирования Object Pascal в среде программирования Borland Delphi 7.0 под управлением 64-разрядной операционной системы Windows. Язык и среда выбраны по ряду важных причин, влияющих на ход разработки программы и на саму программу в целом:
1 Логичная и совершенная реализация принципов объектно-ориентированного программирования;
2 Лёгкий в освоении синтаксис;
3 Возможность быстрого создания привлекательного пользовательского интерфейса с использованием стандартного набора компонентов;
4 Создание оптимизированного кода при компиляции. exe-файла, в результате чего он занимает сравнительно небольшой объём памяти;
5 Возможность полноценного использования функций WinAPI в разрабатываемых приложениях.
Указанные возможности и особенности позволяют сделать вывод о целесообразности выбора именно этих языка и среды.
Для нормального функционирования программы необходим следующий набор технических средств и программного обеспечения:
процессор Intel Pentium IV 1.0 ГГц или выше;
монитор SVGA, поддерживающий разрешение не менее 1024×768;
объём оперативной памяти 256 Мб и более;
свободное место на жёстком диске 20 Мб и более;
манипулятор типа «мышь» ;
клавиатура;
операционная система версии Windows XP и выше.
Для обоснования сметной стоимости программы и срока возврата инвестиций необходимо рассчитать следующие показатели. Расчёт будет производиться согласно Постановлению Министерства труда и социальной защиты Республики Беларусь от 27 июня 2007 г. «Об утверждении укрупнённых норм затрат труда на разработку программного обеспечения» .
Таблица 1 — Перечень и объём функций программного обеспечения
Код функции | Наименование (содержание) функций | Объём функции строк исходного кода (LOC) | ||
по каталогу Vi | уточнённый Vу | |||
Организация ввода информации | ||||
Контроль, предварительная обработка и ввод информации | ||||
Организация ввода/вывода информации в интерактивном режиме | ||||
Обработка файлов | ||||
Формирование файла | ||||
Обработка ошибочных и сбойных ситуаций | ||||
Обеспечение интерфейса между компонентами | ||||
Графический вывод результатов | ||||
Итого | ||||
Программа отнесена ко второй категории сложности: моделирование объектов и процессов, обеспечение переносимости программы, реализация особо сложных инженерных и научных расчётов. Наличие трёх характеристик, определяющих сложность программы, позволяет применить к программе коэффициент K:
KС = 1 + 0,08 + 1,26 = 1,34
Программа является развитием определенного параметрического ряда ПО. Новизна программы соответствует категории Б: Н = 1,00
При разработке программы доля используемых стандартных модулей составила менее 20%: Т = 0,9
Новизне программы категории Б соответствует следующее распределение трудоёмкости по стадиям:
КТЗ=0,10; КЭП=0, 20; KТП=0,30; КРП=0,30; КВН=0,10
Нормативная трудоемкость разработки ПО (Т) определяется согласно нормам затрат труда на разработку программного обеспечения и составляет 25 чел. — дн.
Таблица 2 — Расчет общей трудоёмкости разработки ПО
Показатели | ТЗ | ЭП | ТП | РП | ВН | Итого | |
Коэффициенты удельных весов трудоемкости стадии разработки ПО (K) | 0,10 | 0, 20 | 0,40 | 0, 20 | 0,10 | ||
Распределение нормативной трудоемкости программного обеспечения (ТН) по стадиям, чел. — дн. | |||||||
Коэффициент сложности ПО (KС) | 2,34 | 2,34 | 2,34 | 2,34 | 2,34 | ; | |
Коэффициент, учитывающий использование стандартных модулей (КТ) | 0,9 | ; | |||||
Коэффициент, учитывающий новизну ПО (KН) | 1,00 | 1,00 | 1,00 | 1,00 | 1,00 | ; | |
Общая трудоемкость ПО (ТО) чел. — дн. | |||||||
Итого время на разработку программы ПП=8*25=200 часов, в том числе машинное время ТМ=11*8=72 часа.
Определение стоимости машинного времени производится на основании данных из таблицы 3.
Таблица 3 — Исходная информация для определения стоимости машинного времени
Показатель | Условное обозначение | Единицы измерения | Значение, руб. | |
Балансовая стоимость компьютера | БК | Рублей | ||
Мощность, потребляемая компьютером | МК | КВт | 0,3 | |
Полезный фонд времени работы компьютера за год | FK | Час | ||
Балансовая стоимость принтера | БП | Рублей | ||
Продолжение таблицы 3 | ||||
Мощность, потребляемая принтером | МП | КВт | 0,05 | |
Полезный фонд времени работы принтера за год | FП | Час. | ||
Стоимость 1кВт/час | С | Рублей | ||
Площадь на 1 рабочее место | SPM | М2 | ||
Стоимость 1 м2 производственной площади | СПЛ | Рублей | ||
Норма амортизации для оборудования | НАО | Проценты | ||
Норма амортизации для зданий | НАПЛ | Проценты | ||
Отчисления на текущий ремонт оборудования (в процентах от балансовой стоимости) | PO | Проценты | 3,1 | |
Определение стоимости потребляемой электроэнергии осуществляется по формуле (9):
руб. (9)
СЭЛ= (0.3*2050+0.05*500) *611*0.8*1.05=328 500 руб.
где КВР — коэффициент, учитывающий использование по времени (КВР=0,8);
КС — коэффициент, учитывающий потери в сети (КС=1,05).
Определение суммы амортизационных отчислений осуществляется по формуле (10):
руб. (10)
САО= (1 500 000+300000) *20/100+6*34 802*1/100= 362 088 руб.
натяжной потолок графическое проектирование Определение затрат на текущий ремонт оборудования осуществляется по формуле (11):
руб. (11)
ЗР= (1 500 000+300000) *3,1/100= 55 800 руб.
Результаты расчётов сводятся в таблицу 4.
Расчёт затрат на 1 машино-час ведётся, исходя из полезного фонда времени работы компьютера за год, то есть итог графы 3 таблицы 3, делённой на полезный фонд времени работы компьютера (FK).
Таблица 4 — Расчёт затрат на 1 машино-час
Показатель | Условное обозначение | Значение, рублей. | ||
На год (ЗМГ) | на 1 машино-час (СМЧ) | |||
стоимость потребляемой электроэнергии | СЭЛ | 160,3 | ||
сумма ежегодных амортизационных отчислений. | САО | 176,7 | ||
Затраты на текущий ремонт оборудования | ЗР | 27,2 | ||
Итого: | 364,2 | |||
Затраты на один машино-час, руб.
руб. (12) СМЧ =746 388/2050= 364,2 руб.
Расчёт стоимости машинного времени осуществляется по формуле (13):
руб. (13)
где ТМ — машинное время работы компьютера в расчёте на программу;
СМЧ — стоимость 1 машино-часа — итог графы 4 таблицы 4.
CMВР= 88*364,2 = 32 049,6 руб. (14)
Расчёт затраты на материалы и покупные комплектующие изделия сводятся в таблицу 5.
Таблица 5 — Расчёт затрат на материалы
Наименование | Техническая характеристика | Количество | Отпускная цена, в рублях | Сумма, рублей | |
CD-диск | 700 mb | ||||
Тонер для лазерного принтера | |||||
Бумага | А4 | ||||
Итого: | |||||
Транспортно-заготовительные расходы (ТЗР) | |||||
Всего с учётом ТЗР | |||||
Таблица 6 — Расчет затрат на оплату труда
Вид работ | Трудоёмкость, час | Квалификационный разряд | Часовая тарифная ставка, руб. | Прямая зарплата, руб. | |
Техническое задание | |||||
Эскизный проект | |||||
Технический проект | |||||
Рабочий проект | |||||
Внедрение программы | |||||
Итого | |||||
Премии и доплаты (13% от прямой заработной платы) | |||||
Итого, основная заработная плата | |||||
ЧТС6=3550 * 1,73 * 1,1 = 6755 руб.
Таблица 7 — Расчёт отпускной цены программы
Наименование статей затрат | Сумма, руб. | Обоснование расчёта | |
1 Затраты на материалы | Таблица 5 | ||
2 Стоимость машинного времени | 32 049,6 | Формула 14 | |
3 Основная заработная плата програм — миста | Таблица 6 | ||
4 Дополнительная заработная плата программиста | 13% от п.3 | ||
5 Итого, фонд оплаты труда (ФОТ) | п.3+п.4 | ||
6 Отчисление в фонд социальной защиты населения и Белгосстрах | 386 419,25 | 35% от п.5 | |
7 Накладные расходы | 30% от п.3 | ||
8 Полная себестоимость | 1 821 895,3 | п.1+п.2+п.5+п.6+п.7 | |
9 Плановые накопления | 182 189,5 | 10% п.8 | |
10 Цена разработчика (оптовая цена) | 2 004 084,8 | п.8+п.9 | |
11 Налог на добавленную стоимость (НДС) | 20% от п.10 | ||
12 Итого стоимость ПП с НДС (Отпускная цена) | п.10+п.11 | ||
Отпускная цена программы принимается равной 2 404 900 руб.
Определение годовых эксплуатационных расходов при ручном решении задачи.
Годовые эксплуатационные расходы при ручной обработке информации определяются по формуле (15):
ЗР = ТР * к * tЧР, руб. (15)
где ТР — трудоёмкость разового решения задачи вручную (5 ч.);
к — периодичность решения задачи в течение года (300);
tЧР — среднечасовая ставка работника, осуществляющего ручной расчет задачи (5500);
ЗР=5*300*5500=3 300 000 руб.
Для расчёта годовых текущих затрат, связанных с эксплуатацией программы, необходимо определить время решения данной задачи на ЭВМ. Время решения задачи на ЭВМ определяется по формуле (16):
ТЗ= (ТВВ+ТР) * (1+dПЗ) /60, ч. (16)
где ТВВ — время ввода в ЭВМ исходных данных, необходимых для решения задачи, мин.;
ТР — время вычислений, мин.;
dПЗ — коэффициент, учитывающий подготовительно-заключительное время (dПЗ=0,25).
Время ввода в ЭВМ исходных данных может быть определено по формуле (17):
ТВВ =KZ*HZ/100, мин. (17)
где KZ — среднее количество знаков, набираемых с клавиатуры при вводе исходных данных (KZ=3);
HZ — норматив набора 100 знаков, мин. (HZ=6).
ТЗ=0,07 ч.
На основе рассчитанного времени решения задачи может быть определена заработная плата пользователя данной программы.
Затраты на заработную плату пользователя программы:
ЗП=ТЗ*к*tЧП, руб. (18)
где ТЗ — время решения задачи на ЭВМ;
tЧП — среднечасовая ставка пользователя программы.
В состав затрат, связанных с решением задачи включаются также затраты, связанные с эксплуатацией ЭВМ.
ЗП=0,06 *300*5500=99 000 руб.
Затраты на оплату аренды ЭВМ для решения задачи определяются по следующей формуле (55):
ЗА=ТЗ*к*СМЧ, руб. (19)
ЗА=0,06 *300*364,2=6556 руб.
Годовые текущие затраты, связанные с эксплуатацией, определяются по формуле (20):
ЗТ=ЗП+ЗА, руб. (20)
где ЗП — затраты на заработную плату пользователя программы;
ЗА — затраты на плату аренды ЭВМ при решении задачи.
ЗТ=99 000 + 6556= 105 556 руб.
Ожидаемый прирост прибыли в результате внедрения задачи взамен ручного ее расчета укрупнен, но может быть определен по формуле (21):
ПУ= (ЗР-ЗТ) * (1-СНП), руб. (21)
где СНП — ставка налога на прибыль (СНП =24%).
ПУ= (3 300 000 — 105 556) * (1−0,24) = 2 363 887 руб.
Годовой экономический эффект от сокращения ручного труда при обработке информации определяется по формуле (22):
ЭФ=ПУ-Е*КО=ПУ-Е* (КЗ+ЦПР), руб. (22)
ЭФ=2 363 887 — 0,25* (51,2 + 2 404 900) =1 762 662 руб.
где Е — коэффициент эффективности, равный ставке за кредиты на рынке долгосрочных кредитов (Е=0,25);
КЗ — дополнительные затраты пользователя, единовременного характера, необходимые для эксплуатации программы, определяются по формуле (23):
КЗ =БК*ТЗ/FК, руб. (23)
КЗ =1 500 000*0,07 /2050=51,2 руб.
Срок возврата инвестиций определяется по формуле (24):
ТВ=КО/ПУ= (КЗ+ЦПР) /ПУ (24)
ТВ= (51,2 + 2 404 900) / 2 363 887= 1 год Результаты расчета сводятся в таблицу 8.
Таблица 8 — Технико-экономические показатели проекта
Наименование показателя | Варианты | ||
ручной | машинный | ||
1 Трудоёмкость решения задачи, час | 0,06 | ||
2 Периодичность решения задачи, раз/год | |||
3 Годовые текущие затраты, связанные с решением задачи, руб. | |||
4 Отпускная цена программы, руб. | |||
5 Прирост условной прибыли, руб. | ; | ||
6 Годовой экономический эффект, руб. | |||
7 Срок возврата инвестиций, лет | |||
Принимаем стоимость программы 2 404 900 рублей. Срок возврата инвестиций составит 12 месяцев.
Автоматизированное проектирование натяжных потолков
Текст программы
Модуль «MainUnit» — главное окно программы:
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, MMSystem, jpeg, StdCtrls, XPMan, IniFiles, ComCtrls,
Buttons;
type
TMainForm = class (TForm)
BGImg: TImage;
CloseBtn: TImage;
MinBtn: TImage;
LogoImg: TImage;
MainBtn: TImage;
CalcBtn: TImage;
OptBtn: TImage;
HelpBtn: TImage;
AboutBtn: TImage;
MainFormXPManifest: TXPManifest;
AboutGrBox: TGroupBox;
AboutInfLbl: TLabel;
AboutNameLbl: TLabel;
AboutVerLbl: TLabel;
AboutGenLbl: TLabel;
HelpGrBox: TGroupBox;
HelpLabelTEMP: TLabel;
OptGrBox: TGroupBox;
LogFileChBox: TCheckBox;
ClearLogLbl: TLabel;
CalcAreaBtn: TImage;
CalcPriceBtn: TImage;
SoundsChBox: TCheckBox;
OptSaveLbl: TLabel;
procedure CloseBtnClick (Sender: TObject);
procedure MinBtnClick (Sender: TObject);
procedure AboutBtnClick (Sender: TObject);
procedure FormCreate (Sender: TObject);
procedure HelpBtnClick (Sender: TObject);
procedure OptBtnClick (Sender: TObject);
procedure CalcBtnClick (Sender: TObject);
procedure FormClose (Sender: TObject; var Action: TCloseAction);
procedure LogFileChBoxClick (Sender: TObject);
procedure ClearLogLblClick (Sender: TObject);
procedure CalcAreaBtnClick (Sender: TObject);
procedure CalcPriceBtnClick (Sender: TObject);
procedure MainBtnClick (Sender: TObject);
procedure SoundsChBoxClick (Sender: TObject);
procedure OptSaveLblClick (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure EnableFog;
procedure DisableFog;
procedure FormAppear;
procedure FormDisappear;
procedure EventLog (Event: String);
var
MainForm: TMainForm;
SRoom: Real;
SCeil: Real;
Date: String; // переменная, хранящая текущую дату
Time: String; // переменная, хранящая текущее время
ErrorString: String;
GenCheck: Boolean;
Check: Boolean;
IsInt: Boolean;
IsCoordinate: Boolean;
IsX: Boolean;
IsY: Boolean;
IsWord: Boolean;
Parameter: Byte;
AutoSaving: Boolean;
INI: TIniFile; // INI-файл программы
LogFile: TextFile; // текстовый лог-файл действий пользователя
LogFileDisabled: Boolean; // переменная, хранящая состояние лог-файла
LogFileSize: Byte; // перкменная, хранящая размер лог-файла
SoundsEnabled: Boolean; // переменная, хранящая состояние звукового сопровождения
CalcMenuOpened: Boolean; // переменная, хранящая состояние меню «Расчёт»
IllChar: array [1.151] of Char = ('q','w','e','r','t','y','u','i','o', // массив для защиты от некорректного ввода
'p','a','s','d','f','g','h','j','k',
'l','z','x','c','v','b','n','m','й',
'ц','у','к','е','н','г','ш','щ','з',
'х','ъ','ф','ы','в','а','п','р','о',
'л','д','ж','э','я','ч','с','м','и',
'т','ь','ь','б','ю','ё','Q','W','E',
'R','T','Y','U','I','O','P','A','S',
'D','F','G','H','J','K','L','Z','X',
'C','V','B','N','M','Й','Ц','У','К',
'Е','Н','Г','Ш','Щ','З','Х','Ъ','Ф',
'Ы','В','А','П','Р','О','Л','Д','Ж',
'Э','Я','Ч','С','М','И','Т','Ь','Б',
'Ю','Ё','! ','@','#','$','%','^','&',
'*',' (',') ','-','_','=','+','/','',
'{','}',' [','] ','" ','<','>','; ',': ',
'№','? ','. ','~','`','''',' ');
IllNum: array [1.10] of Char = ('1','2','3','4','5','6','7','8','9','0');
implementation
uses ClosingUnit, FogUnit, CADUnit, BigFogUnit, CADUnitWTools;
{$R *. dfm}
procedure FormAppear; // процедура, анимирующая появление форм
var
i: Byte;
begin
if MainForm. Active = TRUE then
for i: = 0 to 255 do
begin
MainForm. AlphaBlendValue: = i;
Application. ProcessMessages;
Sleep (1);
end
else
begin
if CADForm. Active = TRUE then
begin
for i: = 0 to 255 do
begin
CADForm. AlphaBlendValue: = i;
Application. ProcessMessages;
Sleep (1);
end;
end;
if CADFormWTools. Active = TRUE then
begin
for i: = 0 to 255 do
begin
CADFormWTools. AlphaBlendValue: = i;
Application. ProcessMessages;
Sleep (1);
end;
end;
if ClosingForm. Active = TRUE then
begin
for i: = 0 to 255 do
begin
ClosingForm. AlphaBlendValue: = i;
Application. ProcessMessages;
Sleep (1);
end;
end;
end;
end;
procedure FormDisappear; // процедура, анимирующая закрытие форм
var
i: Byte;
begin
if MainForm. Active = TRUE then
begin
for i: = 255 downto 0 do
begin
MainForm. AlphaBlendValue: = i;
Application. ProcessMessages;
Sleep (1);
end;
end;
if CADForm. Active = TRUE then
begin
for i: = 255 downto 0 do
begin
CADForm. AlphaBlendValue: = i;
Application. ProcessMessages;
Sleep (1);
end;
end;
if CADFormWTools. Active = TRUE then
begin
for i: = 255 downto 0 do
begin
CADFormWTools. AlphaBlendValue: = i;
Application. ProcessMessages;
Sleep (1);
end;
end;
if ClosingForm. Active = TRUE then
begin
for i: = 255 downto 0 do
begin
ClosingForm. AlphaBlendValue: = i;
Application. ProcessMessages;
Sleep (1);
end;
end;
end;
procedure EnableFog; // процедура анимации затемнения формы
var
i: Byte;
begin
if MainForm. Active = TRUE then
begin
FogForm. Show;
for i: = 0 to 150 do
begin
FogForm. AlphaBlendValue: = i;
Application. ProcessMessages;
Sleep (1);
end;
end;
if CADForm. Active = TRUE then
begin
BigFogForm. Show;
for i: = 0 to 150 do
begin
BigFogForm. AlphaBlendValue: = i;
Application. ProcessMessages;
Sleep (1);
end;
end;
if CADFormWTools. Active = TRUE then
begin
BigFogForm. Show;
for i: = 0 to 150 do
begin
BigFogForm. AlphaBlendValue: = i;
Application. ProcessMessages;
Sleep (1);
end;
end;
end;
procedure DisableFog; // процедура анимации снятия затемнения формы
begin
FogForm. Close;
BigFogForm. Close;
end;
procedure EventLog (Event: String); // процедура добавления событий в лог-файл
var
SizeStream: TFileStream;
SizeInB: Real;
SizeInKb: Real;
SizeInMb: Real;
begin
Date: = DateToStr (SysUtils. Date);
Time: = TimeToStr (SysUtils. Time);
Append (LogFile);
Writeln (LogFile, '' + Date + ' ' + Time + Event);
Flush (LogFile);
Close (LogFile);
SizeStream: = TFileStream. Create ('ActionLog. txt', fmOpenRead);
SizeInB: = SizeStream. Size;
SizeStream. Free;
if SizeInB < 1024 then
MainForm. ClearLogLbl. Caption: = 'Очистить лог-файл (' + FloatToStr (SizeInB) + ' байт) '
else
begin
SizeInKb: = SizeInB / 1024;
if SizeInKb < 1024 then
MainForm. ClearLogLbl. Caption: = 'Очистить лог-файл (' + FloatToStrF (SizeInKb, ffFixed, 4,2) + ' Кбайт) '
else
begin
SizeInMb: = SizeInKb / 1024;
MainForm. ClearLogLbl. Caption: = 'Очистить лог-файл (' + FloatToStrF (SizeInMb, ffFixed, 4,2) + ' Мбайт) '
end;
end;
end;
procedure GUIHide; // процедура скрытия элементов интерфейса
begin
MainForm. AboutGrBox. Visible: = FALSE;
MainForm. HelpGrBox. Visible: = FALSE;
MainForm. OptGrBox. Visible: = FALSE;
MainForm. LogoImg. Visible: = FALSE;
end;
procedure CalcMenuClose; // процедура анимации закрытия меню «Расчёт»
var
i: Byte;
begin
CalcMenuOpened: = FALSE;
MainForm. CalcAreaBtn. Visible: = FALSE;
MainForm. CalcPriceBtn. Visible: = FALSE;
for i: = 1 to 49 do
begin
MainForm. OptBtn. Top: = MainForm. OptBtn. Top — 1;
MainForm. AboutBtn. Top: = MainForm. AboutBtn. Top — 1;
MainForm. HelpBtn. Top: = MainForm. HelpBtn. Top — 1;
Application. ProcessMessages ();
Sleep (1);
end;
end;
procedure TMainForm. FormCreate (Sender: TObject); // обработка события запуска программы
begin
// MainForm. DoubleBuffered: =TRUE;
GUIHide;
LogoImg. Visible: = TRUE;
MainForm. Show;
CalcMenuOpened: = FALSE;
AboutGenLbl. Caption: = 'Данная программа разработана в качестве дипломного проекта по заказу ИП Торопова И. Н. ' + Chr (10) +
'Разработчик — Евгений Богданов, группа Пк-41. ' + Chr (10) +
'УО «Гомельский Государственный Машиностроительный Колледж», 2011 г. ';
AssignFile (LogFile,'ActionLog. txt');
if not FileExists ('ActionLog. txt') then
begin
Rewrite (LogFile);
CloseFile (LogFile);
end;
EventLog (' Программа запущена');
INI: = TIniFile. Create (ExtractFilePath (ParamStr (0)) + 'Settings. ini');
INI. WriteInteger ('Position', 'X', MainForm. Left);
INI. WriteInteger ('Position', 'Y', MainForm. Top);
LogFileDisabled: = INI. ReadBool ('LogFile', 'LogFileDisabled', LogFileDisabled);
if LogFileDisabled = TRUE then
begin
LogFileChBox. Checked: = TRUE;
EventLog (' ВЕДЕНИЕ ЛОГ-ФАЙЛА ОТКЛЮЧЕНО В ОДНОЙ ИЗ ПРЕДЫДУЩИХ СЕССИЙ');
end
else
LogFileChBox. Checked: = FALSE;
SoundsEnabled: = INI. ReadBool ('Sounds', 'SoundsEnabled', SoundsEnabled);
if SoundsEnabled = TRUE then
SoundsChBox. Checked: = TRUE
else
SoundsChBox. Checked: = FALSE;
INI. Free;
FormAppear;
end;
procedure TMainForm. MinBtnClick (Sender: TObject); // обработка нажатия кнопки «Свернуть»
begin
if SoundsEnabled = TRUE then
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC);
ShowWindow (Application. Handle, SW_MINIMIZE);
end;
procedure TMainForm. CloseBtnClick (Sender: TObject); // обработка нажатия кнопки «Закрыть»
begin
if SoundsEnabled = TRUE then
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC);
EnableFog;
Parameter: = 1;
ClosingForm. Show;
end;
procedure TMainForm. MainBtnClick (Sender: TObject); // обработка нажатия кнопки «Главная»
begin
if LogFileDisabled = FALSE then
EventLog (' Раздел «Главная» ');
if SoundsEnabled = TRUE then
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC);
GUIHide;
LogoImg. Visible: = TRUE;
end;
procedure TMainForm. CalcBtnClick (Sender: TObject); // обработка нажатия кнопки «Расчёт»
var //
i: Byte; //
begin //
if LogFileDisabled = FALSE then //
EventLog (' Раздел «Расчёт» '); //
if CalcMenuOpened = FALSE then //
begin //
if SoundsEnabled = TRUE then //
PlaySound (PChar ('Sounds/MenuOpening. wav'), 0, SND_ASYNC); //
CalcMenuOpened: = TRUE; //
for i: = 1 to 49 do //
begin //
OptBtn. Top: = OptBtn. Top + 1; //
AboutBtn. Top: = AboutBtn. Top + 1; //
HelpBtn. Top: = HelpBtn. Top + 1; //
Application. ProcessMessages (); //
Sleep (1); //
end; //
CalcAreaBtn. Visible: = TRUE; //
CalcPriceBtn. Visible: = TRUE; //
end; //
end; //
procedure TMainForm. CalcAreaBtnClick (Sender: TObject); // обработка нажатия кнопки «Вычисление площади»
begin //
if LogFileDisabled = FALSE then //
EventLog (' Подраздел «Расчёт» /" Вычисление площади" '); //
if SoundsEnabled = TRUE then //
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC); //
EnableFog; //
FormDisappear; //
CADForm. PriceGrBox. Visible: = FALSE; //
CADForm. TempBtn. Visible: = TRUE; //
CADForm. CADBtn. Visible: = TRUE; //
CADForm. Show; //
FogForm. Close; //
end; //
procedure TMainForm. CalcPriceBtnClick (Sender: TObject); // обработка нажатия кнопки «Вычисление стоимости»
begin //
if LogFileDisabled = FALSE then //
EventLog (' Подраздел «Расчёт» /" Вычисление стоимости" '); //
if SoundsEnabled = TRUE then //
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC); //
EnableFog; //
FormDisappear; //
CADForm. TempBtn. Visible: = FALSE; //
CADForm. CADBtn. Visible: = FALSE; //
CADForm. PriceGrBox. Visible: = TRUE; //
CADForm. SRoomLEdit. Text: = FloatToStrF (SRoom, ffFixed, 5,2); //
CADForm. SCeilLEdit. Text: = FloatToStrF (SCeil, ffFixed, 5,2); //
CADForm. Show; //
FogForm. Close; //
end; //
procedure TMainForm. OptBtnClick (Sender: TObject); // обработка нажатия кнопки «Настройки»
begin //
if SoundsEnabled = TRUE then //
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC); //
if CalcMenuOpened = TRUE then //
CalcMenuClose; //
if LogFileDisabled = FALSE then //
EventLog (' Раздел «Настройки» '); //
GUIHide; //
OptGrBox. Visible: = TRUE; //
end; //
procedure TMainForm. LogFileChBoxClick (Sender: TObject); // обработка события включения/выключения ведения лог-файла
begin //
if LogFileChBox. Checked = TRUE then //
LogFileDisabled: = TRUE //
else //
LogFileDisabled: = FALSE; //
end; //
procedure TMainForm. ClearLogLblClick (Sender: TObject); // обработка нажатия кнопки «Очистить лог-файл
begin //
if SoundsEnabled = TRUE then //
PlaySound (PChar ('Sounds/LogFileClear. wav'), 0, SND_ASYNC); //
Rewrite (LogFile); //
EventLog (' Лог-файл очищен'); //
end; //
procedure TMainForm. SoundsChBoxClick (Sender: TObject); // обработка события включения/выключения звукового сопровождения
begin //
if SoundsChBox. Checked = TRUE then //
SoundsEnabled: = TRUE //
else //
SoundsEnabled: = FALSE; //
end; //
procedure TMainForm. OptSaveLblClick (Sender: TObject); // обработка нажатия кнопки «Сохранить настройки»
begin //
INI: = TIniFile. Create (ExtractFilePath (ParamStr (0)) + 'Settings. ini'); //
INI. WriteBool ('LogFile', 'LogFileDisabled', LogFileChBox. Checked); //
INI. WriteBool ('Sounds', 'SoundsEnabled', SoundsChBox. Checked); //
if LogFileChBox. Checked = TRUE then //
EventLog (' ВЕДЕНИЕ ЛОГ-ФАЙЛА ОТКЛЮЧЕНО') //
else //
EventLog (' ВЕДЕНИЕ ЛОГ-ФАЙЛА ВКЛЮЧЕНО'); //
if SoundsChBox. Checked = TRUE then //
EventLog (' Звуковое сопровождение включено') //
else //
EventLog (' Звуковое сопровождение отключено'); //
EventLog (' Настройки сохранены'); //
INI. Free; //
end; //
procedure TMainForm. HelpBtnClick (Sender: TObject); // обработка нажатия кнопки «Справка»
begin
if SoundsEnabled = TRUE then
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC);
if CalcMenuOpened = TRUE then
CalcMenuClose;
if LogFileDisabled = FALSE then
EventLog (' Раздел «Справка» ');
GUIHide;
HelpGrBox. Visible: = TRUE;
end;
procedure TMainForm. AboutBtnClick (Sender: TObject); // обработка нажатия кнопки «О программе»
begin
if SoundsEnabled = TRUE then
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC);
if CalcMenuOpened = TRUE then
CalcMenuClose;
if LogFileDisabled = FALSE then
EventLog (' Раздел «О программе» ');
GUIHide;
AboutGrBox. Visible: = TRUE;
end;
procedure TMainForm. FormClose (Sender: TObject; var Action: TCloseAction); // обработка события закрытия программы
begin
EventLog (' Программа закрыта');
Append (LogFile);
Writeln (LogFile, '');
Flush (LogFile);
CloseFile (LogFile);
FormDisappear;
end;
end.
Модуль «CADUnit» — окно расчётов:
unit CADUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, MMSystem, jpeg, StdCtrls, Math, IniFiles;
type
TCADForm = class (TForm)
BGImgTop: TImage;
BackBtn: TImage;
CADMinBtn: TImage;
CADCloseBtn: TImage;
BGImgBottom: TImage;
BGImgLeft: TImage;
BGImgRight: TImage;
CircleBtn: TImage;
EllipseBtn: TImage;
ParallBtn: TImage;
PolyBtn: TImage;
RectBtn: TImage;
TrapBtn: TImage;
TriangleBtn: TImage;
ChooseLbl: TLabel;
TempBtn: TLabel;
CADBtn: TLabel;
TempHelpLbl: TLabel;
CADHelpLbl: TLabel;
RectGrBox: TGroupBox;
RectAImg: TImage;
RectALEdit: TLabeledEdit;
RectBLEdit: TLabeledEdit;
RectErrLbl: TLabel;
RectBImg: TImage;
RectImg: TImage;
RectAccImgA: TImage;
RectAccImgB: TImage;
RectAreaLEdit: TLabeledEdit;
RectCalcLbl: TLabel;
ParallGrBox: TGroupBox;
ParallImg: TImage;
ParallBImg: TImage;
ParallHImg: TImage;
ParallBLEdit: TLabeledEdit;
ParallHLEdit: TLabeledEdit;
ParallCalcLbl: TLabel;
ParallErrLbl: TLabel;
ParallAreaLEdit: TLabeledEdit;
ParallAccImgB: TImage;
ParallAccImgH: TImage;
TrapGrBox: TGroupBox;
TrapImg: TImage;
TrapHImg: TImage;
TrapAImg: TImage;
TrapBImg: TImage;
TrapALEdit: TLabeledEdit;
TrapBLEdit: TLabeledEdit;
TrapHLEdit: TLabeledEdit;
TrapCalcLbl: TLabel;
TrapAreaLEdit: TLabeledEdit;
TrapAccImgA: TImage;
TrapAccImgB: TImage;
TrapAccImgH: TImage;
TrapErrLbl: TLabel;
TriangleGrBox: TGroupBox;
TriangleImg: TImage;
TriangleBImg: TImage;
TriangleHImg: TImage;
TriangleBLEdit: TLabeledEdit;
TriangleHLEdit: TLabeledEdit;
TriangleCalcLbl: TLabel;
TriangleAreaLEdit: TLabeledEdit;
TriangleAccImgB: TImage;
TriangleAccImgH: TImage;
TriangleErrLbl: TLabel;
CircleGrBox: TGroupBox;
CircleImg: TImage;
CircleRImg: TImage;
CircleAccImgR: TImage;
CircleRLEdit: TLabeledEdit;
CircleCalcLbl: TLabel;
CircleAreaLEdit: TLabeledEdit;
CircleErrLbl: TLabel;
EllipseGrBox: TGroupBox;
EllipseImg: TImage;
EllipseAImg: TImage;
EllipseBImg: TImage;
EllipseALEdit: TLabeledEdit;
EllipseBLEdit: TLabeledEdit;
EllipseCalcLbl: TLabel;
EllipseAreaLEdit: TLabeledEdit;
EllipseAccImgA: TImage;
EllipseAccImgB: TImage;
EllipseErrLbl: TLabel;
PolyGrBox: TGroupBox;
PolyImg: TImage;
PolyAImg: TImage;
PolyALEdit: TLabeledEdit;
PolyAccImgA: TImage;
PolyErrLbl: TLabel;
PolyNLEdit: TLabeledEdit;
PolyAccImgN: TImage;
PolyCalcLbl: TLabel;
PolyAreaLEdit: TLabeledEdit;
RectAreaErrLbl: TLabel;
ParallAreaErrLbl: TLabel;
TrapAreaErrLbl: TLabel;
TriangleAreaErrLbl: TLabel;
CircleAreaErrLbl: TLabel;
EllipseAreaErrLbl: TLabel;
PolyAreaErrLbl: TLabel;
PriceGrBox: TGroupBox;
CustomerLEdit: TLabeledEdit;
SRoomLEdit: TLabeledEdit;
SCeilLEdit: TLabeledEdit;
LampLEdit: TLabeledEdit;
PipeLEdit: TLabeledEdit;
SquareLEdit: TLabeledEdit;
PriceCalcLbl: TLabel;
FinalPriceLEdit: TLabeledEdit;
DepLEdit: TLabeledEdit;
ErrLbl: TLabel;
CustomerAccImg: TImage;
RoomAccImg: TImage;
LampAccImg: TImage;
PipeAccImg: TImage;
SquareAccImg: TImage;
LampPriceLEdit: TLabeledEdit;
PipePriceLEdit: TLabeledEdit;
LampPriceAccImg: TImage;
PipePriceAccImg: TImage;
procedure FormActivate (Sender: TObject);
procedure BackBtnClick (Sender: TObject);
procedure CADMinBtnClick (Sender: TObject);
procedure CADCloseBtnClick (Sender: TObject);
procedure FormClose (Sender: TObject; var Action: TCloseAction);
procedure TempBtnClick (Sender: TObject);
procedure TempBtnMouseMove (Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure TempBtnMouseLeave (Sender: TObject);
procedure CADBtnMouseMove (Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure CADBtnMouseLeave (Sender: TObject);
procedure CADBtnClick (Sender: TObject);
procedure RectBtnClick (Sender: TObject);
procedure ParallBtnClick (Sender: TObject);
procedure TrapBtnClick (Sender: TObject);
procedure TriangleBtnClick (Sender: TObject);
procedure CircleBtnClick (Sender: TObject);
procedure EllipseBtnClick (Sender: TObject);
procedure PolyBtnClick (Sender: TObject);
procedure RectALEditChange (Sender: TObject);
procedure RectBLEditChange (Sender: TObject);
procedure RectALEditEnter (Sender: TObject);
procedure RectBLEditEnter (Sender: TObject);
procedure RectCalcLblClick (Sender: TObject);
procedure ParallBLEditChange (Sender: TObject);
procedure ParallBLEditEnter (Sender: TObject);
procedure ParallHLEditChange (Sender: TObject);
procedure ParallHLEditEnter (Sender: TObject);
procedure ParallCalcLblClick (Sender: TObject);
procedure TrapALEditChange (Sender: TObject);
procedure TrapBLEditChange (Sender: TObject);
procedure TrapALEditEnter (Sender: TObject);
procedure TrapBLEditEnter (Sender: TObject);
procedure TrapHLEditChange (Sender: TObject);
procedure TrapHLEditEnter (Sender: TObject);
procedure TrapCalcLblClick (Sender: TObject);
procedure TriangleBLEditChange (Sender: TObject);
procedure TriangleBLEditEnter (Sender: TObject);
procedure TriangleHLEditChange (Sender: TObject);
procedure TriangleHLEditEnter (Sender: TObject);
procedure TriangleCalcLblClick (Sender: TObject);
procedure CircleRLEditChange (Sender: TObject);
procedure CircleRLEditEnter (Sender: TObject);
procedure CircleCalcLblClick (Sender: TObject);
procedure EllipseALEditChange (Sender: TObject);
procedure EllipseALEditEnter (Sender: TObject);
procedure EllipseBLEditChange (Sender: TObject);
procedure EllipseBLEditEnter (Sender: TObject);
procedure EllipseCalcLblClick (Sender: TObject);
procedure PolyALEditChange (Sender: TObject);
procedure PolyALEditEnter (Sender: TObject);
procedure PolyNLEditChange (Sender: TObject);
procedure PolyNLEditEnter (Sender: TObject);
procedure PolyCalcLblClick (Sender: TObject);
procedure CustomerLEditChange (Sender: TObject);
procedure SRoomLEditChange (Sender: TObject);
procedure LampLEditChange (Sender: TObject);
procedure PipeLEditChange (Sender: TObject);
procedure SquareLEditChange (Sender: TObject);
procedure PriceCalcLblClick (Sender: TObject);
procedure LampPriceLEditChange (Sender: TObject);
procedure PipePriceLEditChange (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure InputCheck (CheckString: String);
var
CADForm: TCADForm;
a: Real;
b: Real;
h: Real;
r: Real;
n: Byte;
S: Real;
Customer: String;
Room: Real;
Ceil: Real;
Lamp: Byte;
Pipe: Byte;
Square: Real;
FinalPrice: Real;
Dep: Real;
LampPrice: Real;
PipePrice: Real;
implementation
uses MainUnit, FogUnit, ClosingUnit, CADUnitWTools;
{$R *. dfm}
procedure SaveResults (Shape: String; a: Real; b: Real; h: Real; r: Real; n: Byte; S: Real); // процедура для сохранения результатов расчётов по шаблону
var
ResFile: TextFile;
NameString: String;
LocalTime: TSYSTEMTIME;
begin
Date: = DateToStr (SysUtils. Date);
GetLocalTime (LocalTime);
NameString: = '' + Date + ' ' + IntToStr (LocalTime. wHour) + '-' + IntToStr (LocalTime. wMinute) + '-' + IntToStr (LocalTime. wSecond) + ' ' + Shape + '. txt';
AssignFile (ResFile, NameString);
if not FileExists (NameString) then
begin
Rewrite (ResFile);
CloseFile (ResFile);
end;
Append (ResFile);
Writeln (ResFile, Date);
Writeln (ResFile, Time);
Writeln (ResFile, Shape);
if a <> 0 then
Writeln (ResFile, 'Сторона ''а'' = ' + FloatToStr (a) + ' м. ');
if b <> 0 then
Writeln (ResFile, 'Сторона ''b'' = ' + FloatToStr (b) + ' м. ');
if h <> 0 then
Writeln (ResFile, 'Высота ''h'' = ' + FloatToStr (h) + ' м. ');
if r <> 0 then
Writeln (ResFile, 'Радиус ''r'' = ' + FloatToStr ® + ' м. ');
if n <> 0 then
Writeln (ResFile, 'Количество сторон ''b'' = ' + IntToStr (n));
Writeln (ResFile, ' Площадь потолка = ' + FloatToStr (S) + ' кв. м. ');
Flush (ResFile);
CloseFile (ResFile);
end;
procedure InputCheck (CheckString: String); // процедура, проверяющая корректность вводимых значений
var
Empty: Boolean;
NilCheck: Boolean;
CommaCounter: Byte;
HasLetters: Boolean;
i: Byte;
j: Byte;
begin
GenCheck: = FALSE;
Empty: = FALSE;
NilCheck: = TRUE;
Check: = TRUE;
HasLetters: = FALSE;
CommaCounter: = 0;
if Length (CheckString) = 0 then
begin
Empty: = TRUE;
ErrorString: = 'Это поле обязательно для ввода. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода пустой строки');
end;
if Empty = FALSE then
begin
if IsWord = TRUE then
begin
for i: = 1 to Length (CheckString) do
begin
for j: = 1 to 26 do
if IllChar [j] = CheckString [i] then
begin
Check: = FALSE;
ErrorString: = 'Вводимое значение не может содержать символов латинского алфавита. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода латинских букв');
end;
end;
for i: = 1 to Length (CheckString) do
begin
for j: = 61 to 86 do
if IllChar [j] = CheckString [i] then
begin
Check: = FALSE;
ErrorString: = 'Вводимое значение не может содержать символов латинского алфавита. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода латинских букв');
end;
end;
for i: = 1 to Length (CheckString) do
begin
for j: = 120 to 150 do
if IllChar [j] = CheckString [i] then
begin
Check: = FALSE;
ErrorString: = 'Вводимое значение не может содержать знаков препинания. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода знаков препинания');
end;
end;
for i: = 1 to Length (CheckString) do
begin
for j: = 1 to 10 do
if IllNum [j] = CheckString [i] then
begin
Check: = FALSE;
ErrorString: = 'Вводимое значение не может содержать цифр. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода цифр');
end;
end;
for i: = 1 to Length (CheckString) do
begin
if (CheckString [i] = ' ') and (CheckString [i + 1] = ' ') then
begin
Check: = FALSE;
ErrorString: = 'Вводимое значение не может содержать двух пробелов подряд. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода двух пробелов подряд');
end;
end;
end;
if CheckString = ',' then
begin
Check: = FALSE;
ErrorString: = 'Вводимое значение не должно начинаться с запятой. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода строки, которая начинается с запятой');
end;
if (CheckString = '0') and (CheckString <> ',') and (IsCoordinate = FALSE) then
begin
Check: = FALSE;
ErrorString: = 'Вводимое значение не может начинаться с нуля, не будучи дробным. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода строки, которая начинается с нуля и не содержит дроби');
end;
if (CheckString = '0') and (CheckString = '0') then
begin
Check: = FALSE;
ErrorString: = 'Перед запятой не может быть двух и более нулей. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода строки, которая содержит два и более нулей перед запятой');
end;
for i: = 1 to Length (CheckString) do
begin
if CheckString [i] = ',' then
Inc (CommaCounter);
if CommaCounter > 1 then
begin
Check: = FALSE;
ErrorString: = 'Десятичная дробь не может содержать две и более запятых. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода числа, которое содержит более одной запятой');
end;
end;
if IsWord = FALSE then
begin
for i: = 1 to Length (CheckString) do
begin
for j: = 1 to 151 do
if IllChar [j] = CheckString [i] then
begin
Check: = FALSE;
HasLetters: = TRUE;
if IsInt = FALSE then
ErrorString: = 'Вводимое значение не должно содержать букв, пробелов и знаков препинания, кроме запятой. '
else
ErrorString: = 'Вводимое значение не должно содержать букв, пробелов и знаков препинания. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода строки, которая содержит буквы, пробелы и знаки препинания');
end;
end;
end;
if (IsInt = TRUE) and (CommaCounter <> 0) then
begin
Check: = FALSE;
if IsCoordinate = TRUE then
ErrorString: = 'Координата не может быть дробной'
else
ErrorString: = 'Количество не может быть выражено дробью. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода строки, которая содержит нецелочисленное значение');
end;
if (IsCoordinate = TRUE) and (IsX = TRUE) and (HasLetters = FALSE) {and (IsWord = FALSE) } then
begin
if StrToFloat (CheckString) > 898 then
begin
Check: = FALSE;
ErrorString: = 'Введённая координата выходит за пределы диапазона. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода координаты, выходящей за пределы диапазона по X');
end;
end;
if (IsCoordinate = TRUE) and (IsY = TRUE) and (HasLetters = FALSE) and (IsWord = FALSE) then
begin
if StrToFloat (CheckString) > 446 then
begin
Check: = FALSE;
ErrorString: = 'Введённая координата выходит за пределы диапазона. ';
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода координаты, выходящей за пределы диапазона по Y');
end;
end;
if (Check = TRUE) and (IsCoordinate = FALSE) and (IsWord = FALSE) then
begin
if StrToFloat (CheckString) = 0 then
begin
Check: = FALSE;
ErrorString: = 'Вводимое значение не должно быть равно нулю. ';
NilCheck: = FALSE;
if LogFileDisabled = FALSE then
EventLog (' Попытка ввода числа, равного нулю');
end
else
NilCheck: = TRUE;
end;
if (Check = TRUE) and (NilCheck = TRUE) then
begin
GenCheck: = TRUE;
if LogFileDisabled = FALSE then
EventLog (' Введены корректные данные');
end;
end;
end;
procedure LocalGUI (Parameter: Byte; Show: Boolean); // процедура, отвечающая за отображение и скрытие элементов интерфейса
begin
CADForm. TempBtn. Visible: = FALSE;
CADForm. CADBtn. Visible: = FALSE;
if (Parameter = 11) and (Show = TRUE) then
begin
CADForm. ChooseLbl. Visible: = TRUE;
CADForm. CircleBtn. Visible: = TRUE;
CADForm. EllipseBtn. Visible: = TRUE;
CADForm. ParallBtn. Visible: = TRUE;
CADForm. PolyBtn. Visible: = TRUE;
CADForm. RectBtn. Visible: = TRUE;
CADForm. TrapBtn. Visible: = TRUE;
CADForm. TriangleBtn. Visible: = TRUE;
end;
if (Parameter = 11) and (Show = FALSE) then
begin
CADForm. ChooseLbl. Visible: = FALSE;
CADForm. CircleBtn. Visible: = FALSE;
CADForm. EllipseBtn. Visible: = FALSE;
CADForm. ParallBtn. Visible: = FALSE;
CADForm. PolyBtn. Visible: = FALSE;
CADForm. RectBtn. Visible: = FALSE;
CADForm. TrapBtn. Visible: = FALSE;
CADForm. TriangleBtn. Visible: = FALSE;
end;
if (Parameter = 111) and (Show = FALSE) then
begin
CADForm. RectGrBox. Visible: = FALSE;
CADForm. ParallGrBox. Visible: = FALSE;
CADForm. TrapGrBox. Visible: = FALSE;
CADForm. TriangleGrBox. Visible: = FALSE;
CADForm. CircleGrBox. Visible: = FALSE;
CADForm. EllipseGrBox. Visible: = FALSE;
CADForm. PolyGrBox. Visible: = FALSE;
end;
end;
procedure TCADForm. FormActivate (Sender: TObject); // обработка события активации формы
begin
TempHelpLbl. Caption: = 'Выберите эту опцию, если проектируемый потолок имеет одну из стандартных форм: прямоугольник, параллелограмм, трапеция, треугольник, круг, эллипс, правильный многоугольник. ' + Chr (10) +
'Эта опция подходит для самых простых потолков. ';
CADHelpLbl. Caption: = 'Выберите эту опцию, если проектируемый потолок имеет сложную форму, которую невозможно рассчитать с помощью стандартных форм. ' + Chr (10) +
'Эта опция подходит для потолков, которые осложнены внешними и внутренними углами. ';
TempHelpLbl. Visible: = FALSE;
CADHelpLbl. Visible: = FALSE;
FormAppear;
IsInt: = FALSE;
if LogFileDisabled = FALSE then
begin
EventLog (' Окно расчётов');
EventLog (' Диалог выбора режима расчёта');
end;
MainForm. Visible: = FALSE;
end;
procedure TCADForm. BackBtnClick (Sender: TObject); // обработка нажатия кнопки «Назад»
begin
if SoundsEnabled = TRUE then
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC);
EnableFog;
Parameter: = 3;
ClosingForm. Show;
end;
procedure TCADForm. CADMinBtnClick (Sender: TObject); // обработка нажатия кнопки «Свернуть»
begin
if SoundsEnabled = TRUE then
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC);
ShowWindow (Application. Handle, SW_MINIMIZE);
end;
procedure TCADForm. CADCloseBtnClick (Sender: TObject); // обработка нажатия кнопки «Закрыть»
begin
if SoundsEnabled = TRUE then
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC);
EnableFog;
Parameter: = 2;
ClosingForm. Show;
end;
procedure TCADForm. FormClose (Sender: TObject; var Action: TCloseAction); // обработка события закрытия формы
begin
if LogFileDisabled = FALSE then
EventLog (' Окно расчётов закрыто');
LocalGUI (11, FALSE);
LocalGUI (12, FALSE);
LocalGUI (111, FALSE);
end;
procedure TCADForm. TempBtnClick (Sender: TObject); // обработка нажатия кнопки «Выбрать шаблон потолка из стандартных форм»
begin //
if SoundsEnabled = TRUE then //
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC); //
FormDisappear; //
LocalGUI (11, TRUE); //
FormAppear; //
if LogFileDisabled = FALSE then //
EventLog (' Выбран расчёт потолка стандартной формы'); //
end; //
procedure TCADForm. TempBtnMouseMove (Sender: TObject; Shift: TShiftState; X, // отображение подсказки к кнопке «Выбрать шаблон потолка из стандартных форм»
Y: Integer); //
var //
i: Byte; //
begin //
if TempHelpLbl. Visible = TRUE then //
begin //
for i: = 107 to 137 do //
begin //
CADBtn. Top: = i; //
end; //
end; //
TempHelpLbl. Visible: = TRUE; //
end; //
procedure TCADForm. TempBtnMouseLeave (Sender: TObject); // скрытие подсказки к кнопке «Выбрать шаблон потолка из стандартных форм»
var //
i: Byte; //
begin //
TempHelpLbl. Visible: = FALSE; //
for i: = 137 downto 107 do //
begin //
CADBtn. Top: = i; //
Application. ProcessMessages (); //
Sleep (1); //
end; //
end; //
procedure TCADForm. CADBtnClick (Sender: TObject); // обработка нажатия кнопки «Спроектировать потолок вручную»
begin //
if SoundsEnabled = TRUE then //
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC); //
LocalGUI (12, TRUE); //
if LogFileDisabled = FALSE then //
EventLog (' Выбрано проектирование потолка сложной формы'); //
FormDisappear; //
CADForm. Close; //
CADFormWTools. Show; //
end; //
procedure TCADForm. CADBtnMouseMove (Sender: TObject; Shift: TShiftState; X, // отображение подсказки к кнопке «Спроектировать потолок вручную»
Y: Integer); //
begin //
CADHelpLbl. Visible: = TRUE; //
end; //
procedure TCADForm. CADBtnMouseLeave (Sender: TObject); // скрытие подсказки к кнопке «Спроектировать потолок вручную»
begin //
CADHelpLbl. Visible: = FALSE; //
end; //
procedure TCADForm. RectBtnClick (Sender: TObject); // обработка выбора прямоугольника
begin //
if SoundsEnabled = TRUE then //
PlaySound (PChar ('Sounds/OnSection. wav'), 0, SND_ASYNC); //
LocalGUI (11, FALSE); //
RectGrBox. Visible: = TRUE; //
RectImg. Visible: = TRUE; //
RectAImg. Visible: = FALSE; //
RectBImg. Visible: = FALSE; //
RectCalcLbl. Visible: = FALSE; //
RectAccImgA. Visible: = FALSE; //
RectAccImgB. Visible: = FALSE; //
RectAreaLEdit. Visible: = FALSE; //
if LogFileDisabled = FALSE then //
EventLog (' Выбран шаблон прямоугольника'); //
end; //
procedure TCADForm. RectALEditChange (Sender: TObject); // обработка ввода данных в RectALEdit
begin //
RectAreaLEdit. Visible: = FALSE; //
RectAreaErrLbl. Visible: = FALSE; //
RectErrLbl. Top: = 300; //
InputCheck (RectALEdit. Text); //
if GenCheck = TRUE then //
begin //
RectErrLbl. Visible: = FALSE; //
RectBLEdit. Enabled: = TRUE; //
RectAccImgA. Visible: = TRUE; //
a: = StrToFloat (RectALEdit. Text); //
if (RectAccImgA. Visible = TRUE) and (RectAccImgB. Visible = TRUE) then //
RectCalcLbl. Visible: = TRUE; //
end //
else //
begin //
RectBLEdit. Enabled: = FALSE; //
RectAccImgA. Visible: = FALSE; //
RectCalcLbl. Visible: = FALSE; //
RectErrLbl. Caption: = ErrorString; //
RectErrLbl. Visible: = TRUE; //
end; //
end; //
procedure TCADForm. RectALEditEnter (Sender: TObject); // отображение подсказки к RectALEdit
begin //
RectAImg. Visible: = TRUE; //
RectImg. Visible: = FALSE; //
RectBImg. Visible: = FALSE; //
end; //
procedure TCADForm. RectBLEditChange (Sender: TObject); // обработка ввода данных в RectBLEdit
begin //
RectAreaLEdit. Visible: = FALSE; //
RectAreaErrLbl. Visible: = FALSE; //
RectErrLbl. Top: = 330; //
InputCheck (RectBLEdit. Text); //
if GenCheck = TRUE then //
begin //
RectErrLbl. Visible: = FALSE; //
RectALEdit. Enabled: = TRUE; //
RectAccImgB. Visible: = TRUE; //
b: = StrToFloat (RectBLEdit. Text); //
if (RectAccImgA. Visible = TRUE) and (RectAccImgB. Visible = TRUE) then //