Помощь в написании студенческих работ
Антистрессовый сервис

Автоматизированное проектирование натяжных потолков

ДипломнаяПомощь в написанииУзнать стоимостьмоей работы

Применение натяжных потолков берёт начало ещё в далёких античных временах. Современный натяжной потолок представляет собой конструкцию из полотна, закреплённого на алюминиевом или пластиковом профиле под основным потолком. Ранние потолки чаще всего использовались в квартирах и офисных помещениях, где качественный ремонт настоящего потолка практически неосуществим. Позднее, следуя тенденциям… Читать ещё >

Автоматизированное проектирование натяжных потолков (реферат, курсовая, диплом, контрольная)

Автоматизированное проектирование натяжных потолков

  • Введение
  • Автоматизированное проектирование натяжных потолков
  • Текст программы
  • Описание программы
  • Входными данными являются:
  • Описание применения
  • Руководство программиста
  • Заключение
  • Приложения

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

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

Применение натяжных потолков берёт начало ещё в далёких античных временах. Современный натяжной потолок представляет собой конструкцию из полотна, закреплённого на алюминиевом или пластиковом профиле под основным потолком. Ранние потолки чаще всего использовались в квартирах и офисных помещениях, где качественный ремонт настоящего потолка практически неосуществим. Позднее, следуя тенденциям, натяжные потолки начали набирать популярность и пользоваться всё большим и большим вниманием, становясь неотъемлемой частью интерьера.

Использование натяжных потолков не только эстетично, но и практично — натяжные потолки имеют ряд важных преимуществ перед настоящими, в числе которых высокая скорость монтажа, исключение трудовых затрат на подготовительные и финишные работы и обеспечение защиты помещения от протечек сверху.

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

Программа «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

Полезный фонд времени работы принтера за год

Час.

Стоимость 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 //

Показать весь текст
Заполнить форму текущей работой