Реферат на тему Контроллер связываемых объектов
Работа добавлена на сайт bukvasha.net: 2015-06-29Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Продукт | Автоматный сервер | Автоматный контроллер |
Visual Basic | да | да |
Exel | да | да |
Word 6.0 | да | нет |
AutoCad 12LT | да | нет |
PhotoShop 3.0 | да | нет |
CorelDraw 5.0 | да | нет |
Приложения которые одновременно являются и серверами и контроллерами могут как управляться из вне, так и управлять другими приложениями. В традиционном программировании приложение либо сервер, либо контроллер, но не одновременно и то и другое. OLE вынуждает расстаться с таким способом мышления и предоставляет разработчику приложения право выбора - будет ли его приложение сервером или контроллером.
Объекты. Под понятие о6ьекта ОLЕ попадает все, что может иметь машинное представление. Объектом может быть документ текстового процессора, рисунок или чертеж, также часть чертежа (допустим какой либо слой чертежа печатной платы), видео-клип, звук или даже приложение. Такое понимание расходится со стандартной интерпретацией, в которой объекты - данные, над которыми производятся манипуляции посредством функций и процедур. Хотя OLE поддерживает объекты только в рамках одной машины, это не ограничение архитектуры OLE, а лишь ограниченность ее реализации. Уже демонстрировалась версия OLE, названная распределенным ОLЕ, в которой границы между машинами для объектов прозрачны. Другими словами, если ваше приложение запрашивает OLE-объект, то поставщик этого объекта не обязательно находится на вашей машине, хотя с точки зрения вашего приложения ОLE -объект - локальный.
Интерфейсы. OLЕ интерфейс - это механизм, используемый для доступа к группе связанных с объектом функций. Если вы хотите выполнить в OLE операцию над объектом, можно запросить специфический интерфейс, имеющий нужную вам функцию. Когда вы запрашиваете интерфейс, то обращаетесь к объекту, указывая его ID-номер. Каждый интерфейс имеет уникальный номер-идентификатор (Interface ID или IID). Объект возвращает либо состояние ошибки, если объект не поддерживает запрашиваемый интерфейс или происходит другая ошибка, либо он возвращает указатель на требуемый интерфейс.
Компонентная модель объекта. Компонентная модель объекта (также известная под аббревиатурой СОМ) - это спецификация, определяющая связующий ОLЕ клей. СОМ определяет, каким образом объекты взаимодействуют. СОМ предусматривает для объектов ОLЕ такую специфику, в частности диктуя, какие интерфейсы объекту необходимы, как объект может быть создан и когда он может быть уничтожен.
Структурированное хранилище. Структурированное хранилище - это спецификация, определяющая метод хранения объектов. Структурированное хранилище можно представить себе как OLE-аналог DOS. Этот механизм поддерживает большинство из функций DOS - файлы и каталоги, копирование и перемещение файлов (файлы называются потоками, а каталоги - хранилищами. Кроме того, термин “структурированное хранилище” информации не подразумевает, что данные хранятся на диске. Так же как и файлы DOS, которые могут находится на RAM-диске, жестком диске, флоппи-диске или даже на CD-ROM, объекты, размещенные в структурированном хранилище, могут находиться в любом из этих мест, а также и в других. Чтобы DOS могла использовать для хранения информации другие устройства, такие, как оптический флоппи-диск или сетевой диск, обычно нужен драйвер устройства. Структурированное хранилище информации также имеет методы для поддержки нестандартных устройств.
Составной документ является специальным случаем структурированного хранилища, предназначенного для хранения наборов объектов в приложениях-контейнерах (контейнерные приложения - это приложения которые используют и сохраняют объекты).
Автоматизация. OLE-автоматизация - это надзор интерфейсов, в типичном случае псзволяющий использовать приложение в качестве ОLЕ объекта. Автоматизация возможна не только для приложений в форме исполняемых модулей (ЕХЕ), но и для динамически присоединяемых библиотек (DLL). Автоматизация позволяет посредством набора определенных правил извне запрограммировать или специализировать приложение. Это дает приложению, например, Visual Basic, возможность управлять Exel, в результате чего функции Ехсеl становятся доступны вашему приложению на Visual Basic. Автоматный контроллер OLE управляет объектами-автоматами через посредство автоматного сервера.
Унифицированная передача данных. Унифицированная передача данных - это набор интерфейсов, которые позволяют клиенту и серверу обмениваться данными. Она является DDE-эквивалентом и функций буфера cut/сору/paste, собранных воедино. Унифицированная передача данных посылает уведомление в случай если данные изменяются (подобно связи DDE), а также поддерживает переговоры о формате, в котором данные будут передаваться. Кроме того, унифицированная передача данных предусматривает возможность передачи одного лишь дескриптора (handle) данных вместо самих данных. Объект-сервер может решить, что вместо передачи 20 Мбайт данных в оперативную память через буфер обмена объекту-клиенту будет передан дескриптор данных, чтобы клиент сам мог их получить. Это избавляет сервер от необходимости чтения всех данных и передачи их клиенту, а клиента от необходимости самостоятельной обработки данных. Это также избавляет конечного пользователя от сидения перед экраном компьютера в ожидании окончания обмена.
Связывание и внедрение (Linking and Embedding). Связывание и внедрение - два принципа, которые по традиции известны в OLE (Objekt Linking and Embedding) лучше всего. Связывание и внедрение (вместо этого теперь говорят просто о документах ОLЕ) позволяют объекту-клиенту (который может быть другим приложением) прикрепиться к объекту-серверу. Присоединение может либо осуществляться связыванием (данные находятся вне составного документа), либо данные могут внедряться внутрь составного документа. Внедренные данные сохраняются непосредственно в документе, в то время как при связывании для доступа к данным OLE в действительности сохраняет своего рода дорожную карту. Дорожной карта называется ярлыком (moniker). Когда ОLЕ получает запрос на восстановления данных, оно смотрит на ярлык (дорожную карту), чтобы их отыскать. Связанные данные могут храниться в не принадлежащем ОLЕ файле или в структурированном хранилище (возможно даже, что данные находятся где-то в самом составном документе).
Составной частью связывания и внедрения является способность OLE выполнять активацию по месту. В OLE 1 при двойном нажатии кнопки мыши над связанным или внедренным объектом запускается сервер этого объекта. В ОLЕ 2 возможна активация по месту. Для пользователя два приложения являются как бы одним. Активация по месту присоединяет нужные части приложения сервера (такие, как пункты меню и инструментальные линейки) к приложению клиента, когда пользователь работает с внедренным объектом. При двойном нажатии кнопкой мыши над внедренным объектом происходит преобразование приложения клиента, в нем изменяются меню и линейки инструментов, а также прочие элементы интерфейса, для работы с приложением сервера внедренного объекта. При двойном нажатии кнопкой мыши над связанным объектом приложение сервер запускается в отдельном окне (как в OLE 1).
В терминах OLE описанное выше действие (двойное нажатие для активации сервера) называется активацией извне (outside-in). При активации извне сервер объекта не активируется (не запускается), пока пользователь не нажмет над объектом кнопку мыши дважды. Активация изнутри (inside-out) требует, чтобы объект-клиент активировал объект-сервер всегда, когда объект-сервер виден. Сервер принимает управление по однократному нажатию кнопки мыши - потому, что для активируемых изнутри объектов он уже запущен заранее.
Как можно видеть, архитектура ОLE достаточно богата, а связывание и внедрение - лишь часть общей структуры.
1.3. Выбор и обоснование языка программирования
Сегодня в связи с все более ускоряющимися технологиями программирования, постоянно повышаются требования к среде и к самому языку программирования. Наиболее злободневные требования можно описать таким образом.
1. Отделение элементов программы, связанных с пользовательским интерфейсом от алгоритмической части. Это позволяет минимизировать или вообще избежать при правильном проектировании проекта изменений в алгоритмической части проекта при модернизации пользовательского интерфейса вне зависимости от причин их вызывающих: требование заказчика проекта по замене неверной надписи или кардинальной смены концепции вследствие перевода разработок на другую платформу.
2. Простота и скорость создания/модернизации пользовательского интерфейса и самих программ, путем использования уже готовых элементов (блоков), реализующих некие крупные функции взаимодействия с человеком или другой программой.
3. Еще раз простота, а также ясность и наглядность при программировании пользовательского интерфейса, скрывающая нижний, сложный слой и оставляющая на поверхности только малую, но самодостаточную необходимую часть айсберга управления элементами интерфейса.
4. Использование уже существующего кода, возможно, написанного на другом языке программирования.
При разработке приложений для Windows вышеизложенным принципам очень удачно соответствует Visual Basic. Основные свойства этого языка программирования приведены ниже.
Возможности Visual Basic.
1. Все элементы пользовательского интерфейса можно создавать / модернизировать / удалять без всякой связи с алгоритмической "невидимой" частью программы. Все, что связано с взаимодействием с человеком или другим субъектом управления, находится в файлах форм (FRМ), VВХ и ОСХ, а все, что связано с расчетной частью, - в файлах стандартных модулей (ВАS) и классов(СLS), или, если нужна скорость обработки - в специально написанных на С, Pascal, Fortran или других язык программирования, DLL. Но это разнесение на самом деле чисто условно и делается просто с целью облегчения работы самому разработчику или, что более важно, - группе разработчиков. На самом деле, при небрежном проектировании или небольшой поставленной задаче и интерфейсная и алгоритмическая часть могут располагаться в одном модуле (FRМ или ВАS).
2. Формирование пользовательского интерфейса в Visual Basic похоже на работу с детским конструктором - все элементы на виду, все элементы просты, но сложность создаваемой конструкции ограничена только изобретательностью разработчика. Причем надо иметь ввиду, что число элементов этого конструктора постоянно и очень быстро растет. Сотни (на начало 1995 года около тысячи) сторонних производителей и фирм постоянно выбрасывают на рынок все новые, более мощные модели расширения для Visual Basic.
3. Если уже имеется готовый алгоритм БПФ (Быстрого Преобразования Фурье) на ассемблере или алгоритм быстрого поиска в отсортированном списке на С или Pascal, не надо переписывать их на Visual Basic. Достаточно оформить их виде DLL и использовать как функции.
4. Можно с помощью Visual Basic для Windows создавать запускаемые “.EXЕ” файлы. Visual Basic для Windows создает выполняемые (“. ЕХЕ”) файлы, но не самодостаточные. Все программы, созданные на Visual Basic, должны распространяться с файлом VBRUNx00.DLL (x - номер версии 1,2 или 3) или VB400xx.DLL (xx - 16 или 32). Эта DLL обязательно должна присутствовать в каждой системе, где используются программы на Visual Basic для Windows.
Visual Basic дает возможность создавать приложения, работающие среде Windows. Программы компилируются в псевдокод (р-коде) и помещаются в файлы с расширением “.ЕХЕ”. Когда программа запускается, файл с р-соdе обращается к VBxxxx.DLL, которая интерпретирует р-code в последовательность инструкций Windows АРI.
5. Использование функций Windows АРI в Visual Basic довольно просто - необходимо ее объявить (declare) в секции объявлений или модуле кода.
Windows АРI - набор DLL, содержащих функций общего назначения среды Windows. Вызов функций АРI позволяет выполнить множество вещей, включая отображение меню, манипуляции с изображениями, проигрыш музыкального фрагмента и т.д.
6. Используемый механизм добавления элементов управления VВХ ( Visual Basic eXtension - модули расширения Visual Basic) явил собой "черный ход" для разработчиков третьих фирм по внедрению собственных объектов в среду разработки Visual Basic. Механизм, пусть и не объектно-ориентированный, но позволяет просто и довольно элегантным путем добавлять новые программные компоненты без дополнительного программирования. Механизм VВХ является специфическим интерфейсом для Visual Basic.
7. Существует открытый стандартный интерфейс для работы с программными компонентами, в каждую программу и приложение можно интегрировать стандартный набор средств, позволяющий использовать в дальнейшем данные программы в виде компонент для будущих приложений. Механизм ОLЕ и новая технология в виде ОСХ (ОLЕ Custom Control). ОLЕ не только предлагает стандарт в определении объекта, но также определяет, как и каким образом объекты могут взаимодействовать друг с другом. / 3 /
Основные новшества в Visual Basic версии 4.0
наличие 16- и 32-разрядной редакции;
работа в среде Windows 3.1, Windows для Рабочих Групп 3.11, Windows 95, Windows NТ;
возможность создания ОLЕ Automation объектов;
поддержка OСХ и VВХ;
расширение ТооlВох (Окно Инструментария) за счет ОLЕ Insertable объектов;
использование JЕТ версии 2.5;
наличие новых и поддержка специализированных Data Bound Control (объектов, значительно упрощающих работу с базами данных);
использование ВАО версии 2.0;
открытая и расширяемая среда разработки;
возможность разбиения длинных строк в программном коде;
расширение лексики языка программирования;
запуск одновременно нескольких копий Visual Basic 4.0;
директивы условной компиляции;
поддержка файлов-ресурсов;
создание 32-разрядных приложений;
Директивы условной компиляции программы. Разработчик имеет возможность, используя директивы условной компиляции выбирать, например, какую версию приложения (16- или 32-разрядную) он собирается создать. Используя подобные директивы, можно создавать программы, имеющие один и тот же исходный текст, но которые после компиляции смогут работать на различных платформах.
Object Browser (Инспектор объектов). Данное средство предназначено для облегчения идентификации и управления всеми ОLЕ Automation Servers, на которые есть ссылки в проекте. Выбрав нужный объект, разработчик может легко выбрать и передать корректный синтаксис выражения работы с объектом в текст программы или вызвать встроенную помощь для данного объекта.
Встроенный редактор. Увеличена функциональны мощь встроенного редактора. Во-первых, расширены возможности настройки, точнее постройки, “на свой вкус” формата отображаемых строк кода, комментариев, ключевых слов, идентификаторов, точек останова, и т. д. Можно задать различные фонты, цвета и размеры фонтов для облегчения чтения текста программы. Во-вторых, улучшена работа с отладочным окном. Больше нет необходимости держать и окно с отлаживаемым текстом программы и окно с отображаемыми переменными - теперь достаточно использовать одно окно, состоящее из двух подвижных частей: нижнее подокно представляет собой полнофункциональный редактор кода, верхнее же показывает содержимое переменных.
Расширение лексики языка программирования. Для объявления подпрограмм и функций, доступных или не доступных из других модулей проекта, введены дополнительные служебные слова при объявлении процедур: Public и Private соответственно. Visual Basic 4.0 “прихватил” теперь кусочек Pascal, добавив к своему лексическому запасу выражения “With”, ”For Each”, а также добавлены новые типы данных - Byte (простое без знаковое, для представления чисел в диапазоне 0-255), Вооlean 16 битовые (2-байта) числа, которые могут принимать только два значения: True или False) и Collection. Collection позволяет построить собственную группу пронумерованных объектов. Использование Collection более предпочтительно, чем использование массивов вследствие большей гибкости индексов, и наличия наследуемых методов для вставляемых и удаляемых объектов коллекции.
Процедуры свойств (property procedures). Появилась возможность создавать для объектов (форм, стандартных модулей и модулей классов) собственные специализированные свойства (properties), и привязывать к ним выполняемый код, который будет вызываться при обращении к свойству.
Расширяемость оболочки программирования. Оболочка разработки (IDE) самого Visual Basic 4.0 также может быть управляем через ОLЕ Automation, что позволяет ОLЕ приложениям создавать и размещать в специальное меню Add-In Visual Basic 4.0 свои команды, расширяя таким образом возможности IDE.
Создание ОLЕ Objekt приложений и классы (Сlasses). Одной из основных претензий к Visual Basic со стороны профессиональных программистов служило отсутствие средств создания готовых модулей для последующего использования. Программист вынужден был обращаться к С, С++, Раsсаl или другим языкам программирования для создания DLL и вызовам функций DLL из программы на Visual Basic или, например, из приложения Microsoft Office. С выходом Visual Basic 4.0 данная ситуация коренным образом изменилась, программисты могут создать объекты ОLЕ Automation. Библиотеки подобных объектов, каждый со своими характеристиками и методами управления, могут быть использованы из любого приложения, имеющего возможность контролировать приложение, являющееся ОLЕ объектом (OLE Object Application).
По определению, такие объекты названы классами (Claases) - (эту часть языка Visual Basic взял от С++) и располагаются в специальных модулях (class module). Для совместимости с программами, реализованными в третьей версии и использующими VВХ из стандартного набора, Visual Basic 4.0 включает ОLЕ Custom Control (OCX), заменяющие эти VВХ. При вызове проекта программы, разработанной в среде предыдущей версии Visual Basic и использующей один из стандартных VBX предложит автоматически преобразовать ссылки на новые ОСХ. Такие приложения, как Microsoft Excel для Windows, Microsoft Word для Windows и другие, являющиеся ОLЕ приложениями, теперь можно вставлять в Окно Инструментария (ТооlBох) как обычные элементы управления.
Таким образом можно сказать об некоторой универсальности Visual Basic для создания приложений для Windows.
2. РАЗРАБОТКА СТРУКТУРНОЙ СХЕМЫ И АЛГОРИТМОВ ПРОГРАММЫ
2.1. Функциональная схема работы Windows 95
Операционная система должна обеспечивать взаимодействие приложения как самой верхней ступени с самым нижним уровнем иерархии - аппаратной частью компьютера, через набор каких-либо стандартных функций и подпрограмм. Кроме того она должна обеспечивать пользователя удобным интерфейсом. Рассмотрим как это реализовано в выбранной операционной системе Windows 95. Функциональная схема работы операционной системы Windows 95 представленная на рис 2.1.
Аппаратная часть компьютера представляющая собой какие-либо устройства ввода-вывода информации (клавиатура, мышь, принтер, плоттер, сканер, устройство чтения компакт дисков, монитор и т.д.) подключена на системную шину через так называемые контроллеры устройств имеющие в адресном пространстве памяти вычислительной машины какие-то адреса называемые портами ввода-вывода. Через эти порты при низкоуровневом программировании программист может обмениваться информацией с устройством. Но сейчас такая технология считается устаревшей и приводящей к излишним затратам ресурсов. Ведь в таком случае стандартные функции обмена информацией должны находится в каждой программе которая могла обмениваться информацией с внешними устройствами.
Windows 95 обеспечивает взаимодействие с внешними устройствами как с потоками информации независимо от самого устройства через свои собственные драйвера устройств.
Итак, устройства обмена информацией подключаются к компьютеру через контроллеры, которыми управляют драйверы устройств. Драйверы устройств разработаны таким образом, что при передаче информации на устройство они организовывают очередь следуя которой на устройство передается информация от различных приложений (например принтер). Однако при передаче информации в обратном направлении (от устройства) драйверы создают так называемые события (например событие “закончена печать” от принтера или “нажата кнопка” от мыши), которые операционной системой помещаются в глобальную очередь событий, из которой события попадают в специальный блок определения назначения события. Там по информации хранящейся в системе: приоритет события, какое приложение открыло поток обмены с устройством, приоритет приложения открывшего поток обмена и пр. Определяется назначение события, его принадлежность определенной виртуальной машине организованной системой. По этому назначению передается сообщение о происходящем событии приложению которое должно его обработать.
В отдельной виртуальной машине приложения по приходе событий организовывается локальная очередь событий. Из которой сообщения о событиях передаются по так называемому фокусу объекту который в этот момент находится в фокусе. Объектом может быть любой элемент управления (как то кнопки, поля ввода, имиджи, иконки, картинки и т.д.). С объектом связана целая система процедур и функций которые могут обрабатывать события приходящие объекту, а также могут передавать их другим объектам или выше на ступень по иерархии объектов (элементы управления передавать формам, а формы в свою очередь более глобальным формам или окнам приложений или самой системе).
Таким образом, задача программиста заключается в создании подпрограмм и функции реагирующих определенным образом на события приходящие от системы, для всех объектов которые могут использовать эти события в целях определяемых программой в целом, для конкретной задачи поставленной перед программой.
2.2. Используемая терминология
Итак, Visual Basic предназначен для быстрого создания приложений в среде Windows, и как любая программа для Windows, программа, написанная на Visual Basic, должна иметь как минимум одно окно.
В терминах Visual Basic все окна есть формы, в программе может быть множество окон-форм. Формы в программе служат для отображения элементов пользовательского интерфейса. На каждой форме может находится некоторое количество элементов управления, а также графика и даже другие формы, причем, как вырожденный случай, на форме может вообще не располагаться ни одного элемента.
В том случае, когда приложение использует окно-форму для отображения различных типов информации или предоставляет возможность работать в нескольких режимах, чтобы не засорять площадь окна множество дополнительных элементов, используется линейка ниспадающих меню. Каждое меню содержит список пунктов, которые в свою очередь могут разворачиваться в подменю. Названия подобных вложенных подменю, а также пунктов меню, при выборе которых потребуется в отдельном диалоговом окне выполнить некие дополнительные действия, при отображении в списке пунктов меню дополняются справа многоточием.
Элементы управления служат для отображения информации, выбора из некоторого множества объектов, а также для более ясного и четкого восприятия.
Любая, даже простейшая программа на Visual Basic, имеет свой Проект (project), информацию о котором хранится в специальном файле. В проект программы, отображаемом в специальном окне Проекта, помещаются все формы, модули и файлы, совокупность которых и составляет программу.
Visual Basic не является объектно-ориентированным языком в догматическом понимании ООП (объектно-ориентированное программирование), Visual Basic базируется на парадигме событийно-ориентированного программирования: программа - суть некий набор реального или виртуального мира, каждый из которых понимает некий ограниченный набор событий (возможна, расширяемый). По приходу каждого события из набора отслеживаемых событий формы и элементы управления могут реагировать определенным образом, в соответствии с программным кодом, реализованным программистом для каждого объекта.
Для внесения управляющего программного кода для событий и методов используется Редактор Кода, который служит для создания, просмотра и модификации подпрограмм (Sub) и функций (Function). Процедура представляет собой подпрограмму, которая не возвращает результата.
Программный код, связанный с формами и элементами управления, служит для реализации ответной реакции программы на действия пользователя или приход системного события.
Программный код может находиться в специальных программных модулях (стандартные модули и модули классов) или быть “привязан” только к элементу управления (то есть объекту) или форме.
Кроме набора событий (events), для каждого элемента управления существует предопределенный (возможно, расширяемый) набор свойств или характеристик (properties), представляющих собой некие начальные установки. Данные свойства разделяются по сфере доступности: есть свойства, которые могут устанавливаться только в режиме разработки, только во время выполнения программы или в обоих случаях. Установка и настройка свойств объектов осуществляется в окне Свойств (Properties).
Для элементов управления и форм также существует связанный с ними набор методов (method), которые можно рассматривать как набор команд, понимаемых данным объектом.
Для некоторых отображаемых на экране элементов управления есть возможность задавать различные основные цвета и цвета фона. Для удобства выбора нужных цветов используется Цветовая Палитра (Color Palette).
2.3. Синтез общей структурной схемы программы
Таким образом переходя к синтезу структурной схемы программы можно условно разбить на несколько логических блоков. Каждый из которых представляет собой набор привязанных к объектам подпрограмм, функций и данных (рис. 2.2).
Основным звеном программы является главная форма программы (Main_Form.frm) представляющая собой главную интерфейсную часть программы. В которой происходят все преобразования проекта. Проектом, в контексте данной программы, называется совокупность документов и функций OLE Automation находящихся в рабочей области программы в определенном взаимодействии друг с другом. Над которыми могут производится определенные действия по созданию, редактированию, удалению, запуску функций и пр. Приводящие к изменению как самого проекта в целом, так и просто документов входящих в проект.
В главной форме содержатся коды по обработке всех меню содержащихся в программе, в том числе и функций работы с системным буфером обмена информацией. Кроме того главная форма содержит программный код обрабатывающий все изменения проекта с точки зрения пользователя. В том числе создание документов, функций, их перемещение в проекте, удаление запуск функций на обработку документов и пр.
Из главной формы производится активизация всех дочерних форм программы в режиме модальных окон. То есть окон до закрытия которых работа основной программы главной формы (а иногда и всей системы в целом, как например в случае открытия окна сообщения о глобальной ошибке возможно приводящей к разрушению системы) приостанавливается.
Дочерними формами по отношению к главной форме являются, форма создания и редактирования свойств документов (MakeDocForm.frm), форма создания и редактирования свойств функций OLE Automation (MakeFunkForm.frm), форма создания и изменения регистрационных данных приложений поддерживающих OLE Automation или для которых необходима эмуляция этой поддержки (MakeDocForm.frm).
Форма создания и редактирования свойств документов содержит все необходимые элементы управления (объекты) для ввода и изменения данных о документе, а также его визуальном представлении в проекте (то есть его иконки).Также в этой форме содержится программный код обрабатывающий эти элементы управления и вносящий изменения в глобальную структуру данных о документах в проекте. Эта форма представляет собой окно под названием “Свойства документа”.
Форма создания и изменения регистрационных данных приложений также представляет собой окно под названием “Регистратор приложений” и также содержит в себе ряд объектов (элементов управления) и программный код обрабатывающий эти элементы управления для изменения данных о зарегистрированных приложениях которые могут участвовать в проекте в качестве непосредственных обработчиках документов, а также в виде функции OLE Automation.
Форма создания и редактирования свойств функций OLE Automation представляет собой окно “Свойства функции” и содержит элементы управления позволяющие редактировать свойства функции OLE Automation. Форма также содержит программный код модифицирующий глобальные данные о функциях в проекте.
Все глобальные данные, а также подпрограммы необходимые для работы большинства блоков программы и не входящие в какую либо форму содержатся в специальном модуле (MainModule), который не содержит в себе никаких объектов и вообще визуально не определяется. Он включает в себя только программный код определяющий всю структуру данных и хранит в себе данные о регистрации приложений, свойств функций и документов. А также данные необходимые для нормальной работы программы в целом. Как то, различные переменные по средством которых производится обмен данными между различными формами и окнами внутри самой программы. А также модуль включает в себя подпрограммы и функции необходимые для всего проекта в целом. Например функции открытия проекта, сохранения проекта на носителе информации и т.д., которые не входят в какую-либо форму и могут вызываться из любой части программы.
Следующим логическим блоком программы является блок обработки ошибок. Он строго говоря не выделяется в в программном виде как отдельная часть программы, но он содержится практически в каждой программной единице будь то подпрограмма или функция. Однако как существенная часть всего программного комплекса его стоит отметить отдельным блоком.
Кроме форм и модуля в структуру программы входит основной блок программного кода обеспечивающий взаимодействие с механизмом OLE Automation операционной системы Windows 95. Как раз в этом блоке осуществляется выполнение функций OLE Automation, на него легла основная часть формирования сообщений для Windows и приложений, а также расшифровка ответных сообщений системы и программ.
2.4. Разработка структурной схемы взаимодействия программы с механизмом связывания и внедрения
Для более качественной разработки алгоритма взаимодействия программы с механизмом связывания и внедрения объектов Windows 95, необходимо рассмотреть функциональную схему работы OLE и системы OLE Automation (рис 2.3).
В общем виде структура взаимодействия операционной системы и приложений состоит из трех частей:
OLE Server - OLE сервер это приложение обеспечивающее некоторое количество функций
OLE Client (Controller) - OLE клиент (контроллер) является приложением которое пользуется функциями OLE Automation OLE клиента
Windows 95/NT является посредником между клиентами и серверами OLE обеспечивая их взаимодействие через ряд стандартных потоков и буферов обмена информацией OLE.
OLE сервер, вернее его часть отвечающая за OLE взаимодействие состоит из двух частей. Регистратора интерфейсов OLE находящихся в ядре, и собственно ядра OLE сервера, которое в свою очередь состоит из OLE интерфейсов обеспечивающих при обращении к конкретному интерфейсу ряд функций называемых методами, они то и являются на самом деле OLE Automation функциями. OLE сервер является несмотря на простоту описания наиболее сложной частью всего взаимодействия посредствам OLE, с точки зрения программиста. Эта сложность обусловлена непосредственно сложностью самих методов OLE, обеспечиваемых сервером.
Windows 95 являясь посредником во всех операциях между клиентом и сервером, выполняет координирующую роль администратора при передаче данных. А также именно Windows хранит информацию о всех интерфейсах серверов, здесь существует структурированное хранилище для этих целей. Также Windows выполняет регистрацию этих интерфейсов и отвечает на запросы IID от клиентов. Кроме того Windows содержит буфер обмена информацией между клиентом и сервером. Блок OLE Automation производит непосредственное соединение сервера и клиента и обеспечивает их взаимодействие.
Данные могут передаваться через буфер обмена Widows, а также непосредственно между методами и объектом, но этот способ считается не корректным поскольку не позволяет перемещать OLE объект.
OLE клиент (контроллер) должен, кроме естественно вызовов самих методов OLE, обеспечивать корректную обработку всех сообщений в обратном направлении (от сервера), Клиент состоит из трех взаимосвязанных частей: блок запроса IID для интерфейса объекта, блок обработки ОLE документа и самого OLE объекта. Первая часть выполняет только подготовительную функцию, она запрашивает IID интерфейс для конкретного объекта у Windows 95, получает этот интерфейс и передает его дальше во второй блок. Во втором блоке проиходит сама обработка документа OLE объекта. Именно в этом блоке обрабатываются такие события как активация извне и активация изнутри. Применяя при этом соответствующие методы обработки этих событий по полученным от первого блока интерфейсы. По этим интерфейсам блок производит активизацию методов применяя либо уже заранее известную информацию о параметрах методов и ответной реакции методов на их активацию, либо полученную через интерфейс эту же информацию. Таким образом воздействуя на объект и являясь посредником при передаче информации между методами сервера и объектом.
OLE объект это сам документ помещаемый в приложение клиента. Представляет собой самый зависимый элемент во всей структуре взаимодействия. Он сам ни на что не влияет, однако на него влияют методы сервера вызываемые клиентом. И на самом деле включает в себя только данные и их структуру.
Таким же образом как и структура OLE клиента, должна выглядеть структурная схема той части контроллера автоматически связываемых объектов, которая отвечающая за взаимодействие с механизмом связывания и внедрения Windows 95.
Поскольку, по сути, контроллер должен являться клиентом практически для всех приложений присутствующих в системе, то информация о OLE интерфейсах отдельных приложений заранее не известна. По этому эта информация должна быть собрана перед внедрением конкретных объектов, то есть в процессе работы программы. Это вносит свои коррективы в конкретную структурную схему взаимодействия программы с OLE - добавляется блок сбора и интерпретации информации о интерфейсах приложений (рис 2.4).
Кроме того схема должна включать в себя блок эмуляции OLE для приложений не предназначенных изначально для OLE взаимодействия.
Таким образом произведен синтез структурной схемы взаимодействия с механизмом связывания и внедрения (OLE).
Разработка структуры данных
Приступая к разработке структуры данных необходимо разделять данные по критерию возможности доступа до них. Так данные применяемые только в форме должны находится в самой форме, а данные доступ до которых происходит из нескольких форм называются глобальными и обычно помещаются в модуль с применением префикса Public (для возможности доступа до них из вне).
В этом разделе будет описана структура данных из главного модуля программы в котором хранятся глобальные данные необходимые для всего проекта.
Модуль состоит из четырех частей (рис. 2..5), три из которых представляют собой структуры для представления в машинном виде данных о регистрированных приложениях, о документах находящихся в проекте и о функциях применяемых в проекте для работы с документами. В четвертой части находятся данные необходимые для взаимодействия между формами, и нормальной работы контроллера в целом.
Данные о регистрированных приложения состоят из следующих частей:
глобальный номер регистрации - представляет собой сквозную нумерацию всех когда либо зарегистрированных приложений не зависящею от количества установленных и удаленных приложений на данный конкретный момент времени;
описание - текст описывающий работу приложения, составляется пользователем;
имя файла - указатель на запускаемый файл приложения для работы с ним блока OLE Automation;
имя приложения - собственное расширенное имя приложения указываемое для удобства работы с программой;
маска файлов - одно или несколько расширений имен файлов документов с которыми может работать зарегистрированное приложение.
Данные о документах находящихся в проекте хранятся в следующей структуре:
глобальный номер документа - представляет собой сквозную нумерацию всех когда либо созданных документов не зависящею от количества созданных и удаленных документов на данный конкретный момент времени;
описание - текст описывающий документ, составляется пользователем;
имя файла - путь и имя файла документа;
время создания документа;
имя приложения - имя приложения которое обрабатывает этот документ (выбирается из зарегистрированных в программе приложений или стандартный обработчик Windows документа с таким расширением) ;
иконка - путь и имя иконки для визуального представления документа в окне проекта;
подпись - текст под иконкой документа в окне проекта;
координаты документа в окне проекта;
указатели на исходящие из документа функции OLE в проекте.
Наиболее объемными являются данные о функциях OLE содержащихся в проекте, состоящие из следующих переменных:
глобальный номер функции - представляет собой сквозную нумерацию всех когда либо созданных функций не зависящею от количества созданных и удаленных функций на данный конкретный момент времени;
описание - текст описывающий функцию, составляется пользователем;
имя файла - путь и имя файла функции;
время создания функции;
функция автомата - вызываемый метод;
имя приложения - имя приложения которое эту функцию (выбирается из зарегистрированных в программе функций);
иконка - путь и имя иконки для визуального представления функции в окне проекта;
подпись - текст под иконкой функции в окне проекта;
координаты функции в окне проекта;
флаг автоматического выполнения функции в случае изменения любого входящего в из функцию документа;
флаг запроса пользователя перед выполнением функции;
указатели на исходящие функции OLE в проекте;
указатели на входящие функции OLE в проекте;
указатели на исходящие из функции документы;
указатели на входящие в функцию документы;
линковщик документов и функции - строка связывающая документы и функцию в одну строку используемую программой в качестве вызова функции с параметрами.
Четвертая общая часть состоящая из различных переменных необходимых для работы всей программы состоит из следующего:
различные флаги устанавливаемые и снимаемые различными функциями и подпрограммами для разделения ресурсов выделенных программе;
глобальные переменные определяющие количество документов, функций OLE и зарегистрированных приложений на данный момент времени;
переменные обмена информации (определяющие состояние буфера обмена и структуру данных находящихся в буфере обмена).
Таким образом определены все данные необходимые для работы всей программы в целом. Кроме того в каждой отдельной форме существует область объявления переменных, в которой определяются переменные для работы конкретно этой формы.
Существуют также и области объявлений переменных в каждой отдельной функции и подпрограмме для работы этой функции. Такое разделение областей видимости позволяет более гибко управлять данными в программе.
Инструкция пользователя по работе с программой
Перед запуском программы контроллера программу необходимо инсталлировать ее на жесткий диск. Это может выполнить как специальная программа инсталляции, так и сам пользователь. Нужно установить саму программу в специальную директорию, а специальные DLL-файлы добавить в директорию с системой Windows. Процесс это сложный для начинающего пользователя. По этому рекомендуется доверить его программе инсталляции.
После установки программы на диск ее можно запускать, для этого нужна лишь дважды щелкнуть на иконке программы или в главном меню Windows (“Пуск”) выбрать пункт “Выполнить” и изменить путь до исполняемого файла до запускаемого файла контроллера - Controller.exe и нажать кнопку “ОК”. После чего программа запустится и на экране появится главная форма программы (окно).
Интерфейс программы позволяет, зная общие принципы построения интерфейса в системе Windows 95, без особого труда научится пользоваться программой. Кроме того контекстная помощь и использование стандартных клавишных комбинаций для стандартных операций применяемых в системе намного облегчают пользование программой.
Основное окно программы состоит из рабочей области и меню, а также меню появляющееся при нажатии правой кнопки мыши (рис. 3.1).
Все управление программой обычно осуществляется графическим манипулятором (мышью) и набором горячих клавиш на клавиатуры, возможно управление только клавиатурой.
Система ниспадающих меню позволяет оперативно управлять процессом проектирования. Меню “Файл” состоит из пунктов открытия проекта, сохранения проекта, открытие нового проекта, выхода из программы. Меню “Правка” позволяет посредствам буфера обмена информацией обмениваться информацией между проектами, а также изменять текущий проект, копировать объекты в буфер обмена и из него, удалять часть объектов (рис 3.2).
Меню “Создать” кроме непосредственно прямого выбора в линейке меню, через меню “Правка”, можно получить нажав правую кнопку мыши, из него можно выбрать объект (документ или функцию OLE, или зарегистрировать приложение OLE Automation) который необходимо создать. После выбора объекта запускается редактор свойств выбранного объекта (рис.3.3). Как видно из иллюстрации, в этих формах все свойства описаны непосредственно в форме.
Все свойства документов и функций после заполнения сохраняются в переменных главного модуля. Назначение переменных главного модуля, а значит и назначение свойств объектов были описаны в предыдущем разделе
Заполнив эти формы создается заданный объект который можно перемещать указателем мыши. Правой кнопкой мыши можно через возникшее меню всегда изменить свойства объекта (выбрав “Свойства”).
Кроме того используется следующие способы управления объектами созданными в процессе проектирования. Возможно объединение объектов в группу, для этого нужно нажав левую кнопку мыши не отпуская обвести те объекты которые объединяются в группу, при отпускании кнопки объекты выделятся в рамку. С этими выделенными объектами возможно теперь выполнять групповые операции (перемещения, удаления копирования и т.д.) через меню “Правка” или по правой кнопки мыши.
Над документами также выполняются собственно операции их изменения, то есть в случае применения программы в конструкторском проектировании, их изменение возможно либо непосредственно приложением которое обрабатывает этот документ, либо через уже созданные OLE функции которые в неявном виде вызывают приложения и обрабатывают документы. Так запустить функцию OLE можно двойным щелчком левой кнопки мыши на нужной функции. А для запуска приложения обрабатывающего определенный документ нужно дважды щелкнуть мышкой на документе.
После работы с конкретным документом вырабатывается событие “Документ был изменен” которое должны обрабатывать все исходящие из документа функции OLE (если конечно у них был установлен флаг свойства “Автоматическое выполнение функции при изменении входного документа”). Что влечет за собой выполнение этих функций, то есть изменение документов исходящих из функции, что в свою очередь может повлечь за собой выполнение других функций. Процесс может стать циклическим (если входные документы будут изменены исходящими функциями). Чтобы этого не произошло необходимо пользоваться флагом “Запрос пользователя перед выполнением” в свойствах функции OLE. Установка этого флага повлечет собой запрос пользователю о необходимости выполнения этой функции перед ее выполнением. Тем самым предоставляется возможность пользователю зациклить процесс обратной связью, что иногда необходимо (например, для подбора нужного теплового режима), а затем прервать его.
Перед выходом из программы контроллера, программой будет задан вопрос о необходимости сохранения измененного проекта. Если проект нужен будет в последующем, его нужно сохранить.
Если необходимость в программе контроллера отпала, то ее можно удалить с диска. Однако программа контроллера не снабжена специальным файлом унинсталляции, как это требует стандарт программ для Windows 95, поскольку для создания этого файла программисту необходимо досконально знать всю систему Windows, что сейчас при недостатке информации о Windows (т.к. эта система является относительно новой) в наших условиях невозможно. По этому для удаления программы с носителя кроме удаления самой директории программы контроллера необходимо удалить все DLL-файлы из директория Windows самостоятельно. Список всех файлов программы приведен в приложении.
КОНСТРУКТОРСКИЕ РАСЧЕТЫ
Показатели надежности
Основными конструкторскими расчетами для ЭВА, являются расчет надежности устройства и расчет прочности печатной платы. Рассмотрим теоретическое основание этих конструкторских расчетов.
Все промышленные изделия характеризуются качеством, то есть совокупностью свойств, которые отличают данное изделие от других и определяют степень его пригодности для эксплуатации по своему назначению. Для ЭВА это прежде всего совокупность конструкторских, технологических и эксплутационных характеристик. В процессе эксплуатации происходят изменения этих характеристик в следствии износа и необратимых процессов старения. Таким образом меняется качество изделию во времени, а характеристикой изменения качества во времени является показатель называемый надежностью.
Под надежностью понимают свойство изделия выполнять заданные функции, сохранять свои эксплутационные показатели в заданных пределах в течении требуемого промежутка времени или требуемой наработки при соблюдении режимов эксплуатации, правил обслуживания, хранения и т.д.
Надежность не может быть измерена непосредственно как любая физическая величина. Она может быть только количественно оценена или предсказана. Для оценки основных показателей надежности используют математический аппарат теории вероятности
Показатели надежности неремонтируемых систем. Неремонтируемые системы работают до первого отказа после чего заменяются новыми. Все количественные показатели надежности неремонтируемых систем являются общими и выражаются одними и теми же математическими зависимостями, но их конкретные числовые значения зависят от режимов работы изучаемых систем.
Показатели надежности неремонтируемых систем базируются на понятиях функций надежности Р(t) и функции отказа Q(t), связанных зависимостью P(t) = 1- Q(t). Обе они зависят от времени t.
Вероятностью безотказной работы P(t) называют вероятность того, что в заданном интервале времени или пределах заданной наработки ti отказов в системе не возникает, т.е. P(ti) = P(T>ti), где Т - случайная величина характеризующая время наработки системы до возникновения в ней отказа. Соответственно вероятностью возникновения отказа в системе Q(ti) называется вероятность того, что в период наработки ti в ней обязательно произойдет отказ, т.е. Q(ti) = P(T< ti).
Теоретическое значение вероятности безотказной работы ЭВА удобно определить следующим образом :
(4.1),
где
N1i - число изделий, отказавших во время испытаний на i-том интервале времени;
m = t / t - число интервалов
t - время испытания
t - продолжительность интервала времени
По аналогии с (4.1) статистическая вероятность безотказной работы ЭВА
(4.2),
Естественно, чем больше N, тем более точно соблюдается равенства, и тем точнее становятся значения величин P(ti) и P’(ti).
Вероятность безотказной работы может быть определена и для произвольного интервала времени (t1 ; t2), т.е. не с момента включения системы. В этом случае говорят об условной вероятности безотказной работы системы P(t1 ; t2) в период (t1 ; t2), имея в ввиду, что в момент времени t1 система находится в работоспособном состоянии. Условная вероятность P(t1 ; t2) определяется соотношением
P(t1 ; t2) = P(t2) / P(t1) (4.3)
где
P(t1) и P(t2) - соответственно значения функций надежности в начале и конце наработки.
Плотностью распределения наработки до отказа f(t) называют производную по времени от функции отказа Q(t):
(4.4)
Из (4.4) следует, что величина f(t)dt характеризует безусловную вероятность того, что система обязательно откажет в интервале времени (t ; t+dt) при условии что в момент времени t она находилась в работоспособном состоянии.
Наиболее распространенным показателем надежности является интенсивность отказов. Интенсивность отказов (t) представляет собой условную вероятность возникновения отказа в системе в некоторый момент времени наработки при условии, что до этого момента отказов в системе не было. Величина интенсивности определяется отношением:(t) = f(t)/ P(t). Приблизительно ее можно оценить следующим отношением :
,
где
N1 - число изделий, отказавших при испытаниях в течении времени t
N - число изделий, работоспособных к началу испытаний.
Условная работоспособность системы в момент начала наработки можно записать в виде P(0) = 1. Тогда из (4.3) и (4.4) следует что
Аналогично может быть определена условная вероятность
Таким образом мы рассмотрели три показателя надежности. Очевидно, что достаточно знать одну (любую) из них, чтобы определить два других. Таким образом все три показателя являются равноправными. Однако в большинстве случаев предпочтение отдают интенсивности отказов.
В качестве показателя надежности используют среднюю наработку до отказа tcp. Средняя наработка до отказа представляет собой математическое ожидание M(t) случайной величины t
Вид функций f (t) и P (t) определяется конкретными законами распределения случайной величины t. Средняя наработка до отказа - это ожидаемое время исправной работы системы до первого отказа. Приближенно ее можно оценить так:
,
где
tcp i = (ti - ti-1) / 2
(ti ; ti-1) - время в начале и конце i-того интервала.
Таким образом мы рассмотрели основные показатели надежности систем./ 4 /
4.2. Методика расчета надежности
На практике чаще всего используется эскизный (ориентировочный) полный расчет надежности электронной аппаратуры. Расчет надежности нерезервируемой системы состоит в нахождении общей интенсивности отказов, наработки на отказ Тср и вероятности безотказной работы P(t). Эскизный расчет надежности нерезервированной системы можно проводить в следующем порядке :
все элементы системы разбиваются по группам с одинаковыми или близкими интенсивностями отказов и подсчитывается число элементов N в каждой i-той группе;
по таблицам приведенным в /4/ определяют значения интенсивности отказов для элементов i-той группы;
рассчитывают интенсивность отказов системы как сумму произведений Ni, c учетом поправочного коэффициента
,
где
m - общее количество групп
k - поправочный коэффициент, учитывающий изменение средней интенсивности отказов элементов аппаратуры в зависимости от ее назначения (величина обычно табличная);
определяют наработку на отказ
;
рассчитывают зависимость вероятности безотказной работы системы от времени по формуле
;
Таким образом производится расчет надежности.
4.3. Методика определения механической прочности ПП
На ПП, как правило, устанавливается несколько десятков интегральных схем (ИС) и электроэлементов (ЭРЭ)
Пусть на плату воздействует нагрузка Q, ускорение а , необходимо проверить, не приведут ли эти воздействия к возникновению недопустимых напряжений на плате
Величина предельно допустимого напряжения G задана. При воздействии на плату нагрузки с ускорением, на нее будет действовать деформация изгиба и кручения. Для расчета возникающих напряжений плату принято представлять в виде балочной системы, лежащей на опорах.
Для нахождения действующих на плату сил можно предложить следующий алгоритм.
Определяем координаты Хi ,Yi, i-х элементов на плате - расстояние от осей до центра тяжести элементов (мм)
Определяем равнодействующую приложенных к плате сил
где
Рi - сила тяжести i-того элемента, Н;
к - количество элементов, шт.
Находим общий центр тяжести приложенных сил
и (4.5)
где
Xi и Yi - координаты центра тяжести платы, мм.
Определим силу. Действующую на плату:
, (4.6)
где
а - ускорение, воздействующее на плату
Рассчитываем реакции в опорах :
(4.7) (4.8)
где
l - расстояние между опорами
Вычисляем максимальный изгибающий момент:
Mmax = RAXC (4.9)
Определяем крутящий момент крутящий момент :
Mk = Q d, (4.10)
где
d - величина смещения центра тяжести от оси симметрии платы
(4.11)
где
b - ширина платы
Находим напряжение, вызываемое в плате крутящим моментом :
(4.12),
где
h - толщина платы
- коэффициент прочности, равный 0.333.
Проверяем выполнение равенства
(4.13)
где
- максимально допустимое напряжение в плате
Если неравенство (4.13) выполняется, то следует заключить, что приложенные нагрузки не приведут к повреждению платы. В случае, если неравенство (4.13) не выполняется, нужно предусмотреть меры, необходимые для дополнительного крепления платы.
4.3. Методика расчета собственных колебаний блока
Расчет частоты собственных колебаний блока можно привести, заменив конструкцию его эквивалентной расчетной схемой в виде блочной схемы /5/.
Частоту собственных колебаний прямоугольной пластины для всех случаев закрепления ее краев можно определить следующим образом :
, (4.14)
где
а - длина пластины, м;
D - цилиндрическая жесткость пластины
, (4.15)
Е - модуль упругости;
- коэффициент Пуассона;
q - ускорение свободного падения;
- плотность материала
- коэффициент, значение которого зависит от способа закрепления сторон пластины
Для удобства пользования выражение (4.14) приведем к виду :
, (4.16)
где
В - частотная постоянная, зависящая от способа закрепления пластины
Если пластина не стальная, а выполнена из какого-либо другого материала, то в (4.16) вводится поправочный коэффициент kM на материал
где
Е и - модуль упругости и плотность применяемого материала;
ЕС и С - модуль упругости и плотность стали.
Для учета нагрузки при распределенной нагрузке вводят поправочный коэффициент массы элементов
,
где
QЭ и QЭ - масса пластины и масса элементов, равномерно распределенных по пластине ;
Таким образом выражение (4.14) для определения частоты собственных колебаний приобретает вид
(4.17)
Важно, чтобы резонансная частота ПП отличалась от частоты вынужденных колебаний на входе, по крайней мере в два раза. При этом исключается вхождение в резонанс, опасный в вибросистеме.
Печатная плата должна обладать значительной усталостной долговечностью при воздействии вибраций, для этого необходимо, чтобы минимальная частота собственных колебаний платы удовлетворяла условию:
, (4.18)
где
jmax - вибрационные перегрузки
b - размер короткой стороны платы
- безразмерная постоянная, числовое значение которой зависит от значений частоты собственных колебаний и воздействующих ускорений.
4.5. Расчетная часть
В расчетной части проекта в качестве примера конструкторского расчета какой-либо конструкторской единицы представим конструкторский расчет платы усилителя импульсов (УИ).
Текст программы
‘*****************************
‘ Main Module Code
‘*****************************
Option Explicit
Option Base 0
Public MenuFrom As Integer
Public Canceled As Boolean
Public SelectOn As Boolean
Public SelectIs As Boolean
Public ImageCo As Integer
Public MouseX As Integer
Public MouseY As Integer
Public TotalDocCo As Integer
Public TotalFunCo As Integer
Public TotalRegCo As Integer
Public CurDocument As Integer
Public CurFunction As Integer
Public DocumentIsChanged As Boolean
Public Type RegistrationType
TotalNumber As Long
Discription As String
FileName As String NameApp As String
FileMask As String
End Type
Public Registrations() As RegistrationType
Public RegistrationCo As Integer
Public Type DocumentType
TotalNumber As Long
FileName As String
CreateDateTime As String
UsedProgramm As Long
Discription As String
ImageIcon As String
ImageText As String
X As Integer
Y As Integer
OutputFunPoints() As Integer
OutputFunPointCo As Integer
OutputDocPoints() As Integer
OutputDocPointCo As Integer
End Type
Public Documents() As DocumentType
Public DocumentCo As Integer
Public Type FunctionType
TotalNumber As Long
FileName As String
CreateDateTime As String
Path As String
UsedProgramm As String
AutomatFunction As String
AutoExeFlag As Boolean
AskBeforeExe As Boolean
Discription As String
ImageIcon As String
ImageText As String
X As Integer
Y As Integer
DocumentsAndFunctionsLink As String
InputDocPoints() As Integer
InputDocPointCo As Integer
OutputDocPoints() As Integer
OutputDocPointCo As Integer
InputFunPoints() As Integer
InputFunPointCo As Integer
OutputFunPoints() As Integer
OutputFunPointCo As Integer
End Type
Public Functions() As FunctionType
Public FunctionCo As Integer
Public Sub ShowDocumentProperty(DocNumber As Integer)
On Error GoTo Err1
MakeDocForm.Label4(0).Caption = FileLen(Documents(DocNumber).FileName)
MakeDocForm.Label4(1).Caption = FileDateTime(Documents(DocNumber).FileName)
MakeDocForm.Label4(2).Caption = Documents(DocNumber).CreateDateTime
MakeDocForm.IconText.Text = Documents(DocNumber).ImageText
MakeDocForm.Icon9412_.Picture = LoadPicture(Documents(DocNumber).ImageIcon)
MakeDocForm.ImageIconText.Caption = Documents(DocNumber).ImageIcon
MakeDocForm.Discrip.Text = Documents(DocNumber).Discription
MakeDocForm.DocumentName = Documents(DocNumber).FileName
If Documents(DocNumber).UsedProgramm = -1 Then
MakeDocForm.Combo1.ListIndex = RegistrationCo + 1
Else
MakeDocForm.Combo1.ListIndex = GetREGIndex(Documents(DocNumber).UsedProgramm)
End If
Exit Sub
Err1:
Case vbAbort
End
Case vbRetry
Resume 0
Case vbIgnore
End Select
End Sub
Public Sub SaveRegCards()
Dim FileNumber As Integer
Dim a As Integer
On Error GoTo Err1
FileNumber = FreeFile
Open App.Path & "RegisterCards" For Output As FileNumber
Write #FileNumber, TotalRegCo, RegistrationCo
For a = 0 To RegistrationCo
With Registrations(a)
Write #FileNumber, .TotalNumber, .Discription, .FileName, .NameApp, .FileMask
End With
Next a
Close FileNumber
Exit Sub
Err1:
& Chr(13) & Chr(10) & Err.Number & Chr(13) & Chr(10) & _
Err.Description, vbAbortRetryIgnore + vbCritical)
Case vbAbort
End
Case vbRetry
Resume 0
End Select
End Sub
Public Sub MemberDocumentProperty(DocNumber As Integer)
Documents(DocNumber).ImageText = MakeDocForm.IconText.Text
Documents(DocNumber).ImageIcon = MakeDocForm.ImageIconText.Caption
Documents(DocNumber).Discription = MakeDocForm.Discrip.Text
Documents(DocNumber).FileName = MakeDocForm.DocumentName.Text
Documents(DocNumber).CreateDateTime = MakeDocForm.Label4(0).Caption
If MakeDocForm.Combo1.ListIndex = RegistrationCo + 1 Then
Documents(DocNumber).UsedProgramm = -1
Else
Documents(DocNumber).UsedProgramm = Registrations(MakeDocForm.Combo1.ListIndex).TotalNumber
End If
End Sub
Public Sub SaveProject(ProjectName As String)
Dim FileNumber As Integer
Dim a As Integer
Dim b As Integer
On Error GoTo Err1
FileNumber = FreeFile
Open ProjectName For Output As FileNumber
Write #FileNumber, TotalDocCo, TotalFunCo, DocumentCo, FunctionCo
For a = 0 To DocumentCo
With Documents(a)
Write #FileNumber, .TotalNumber, .FileName, .CreateDateTime, .UsedProgramm, _
.Discription, .ImageIcon, .ImageText, .X, .Y, .OutputFunPointCo, _
.OutputDocPointCo
For b = 0 To .OutputFunPointCo
Write #FileNumber, .OutputFunPoints(b)
Next b
For b = 0 To .OutputDocPointCo
Write #FileNumber, .OutputDocPoints(b)
Next b
End With
Next a
For a = 0 To FunctionCo
With Functions(a)
Write #FileNumber, .TotalNumber, .FileName, .CreateDateTime, .UsedProgramm, _
.AutomatFunction, .AutoExeFlag, .AskBeforeExe, .Discription, _
.ImageIcon, .ImageText, .X, .Y, .DocumentsAndFunctionsLink, _
.OutputFunPointCo, .OutputDocPointCo, .InputFunPointCo, _
.InputDocPointCo
For b = 0 To .OutputFunPointCo
Write #FileNumber, .OutputFunPoints(b)
Next b
For b = 0 To .OutputDocPointCo
Write #FileNumber, .OutputDocPoints(b)
Next b
For b = 0 To .InputFunPointCo
Write #FileNumber, .InputFunPoints(b)
Next b
For b = 0 To .InputDocPointCo
Write #FileNumber, .InputDocPoints(b)
Next b
End With
Next a
Close FileNumber
Exit Sub
Err1:
& Chr(13) & Chr(10) & Err.Number & Chr(13) & Chr(10) & _
Err.Description, vbAbortRetryIgnore + vbCritical)
Case vbAbort
End
Case vbRetry
Resume 0
End Select
End Sub
Public Sub LoadRegCards()
On Error GoTo Err1
Dim FileNumber As Integer
Dim a As Integer
FileNumber = FreeFile
Open App.Path & "RegisterCards" For Input As FileNumber
Input #FileNumber, TotalRegCo, RegistrationCo
If RegistrationCo = -1 Then
Close FileNumber
Exit Sub
End If
ReDim Registrations(RegistrationCo)
For a = 0 To RegistrationCo
With Registrations(a)
Input #FileNumber, .TotalNumber, .Discription, .FileName, .NameApp, .FileMask
End With
Next a
Close FileNumber
Exit Sub
Err1:
& Chr(13) & Chr(10) & Err.Number & Chr(13) & Chr(10) & _
Err.Description, vbAbortRetryIgnore + vbCritical)
Case vbAbort
End
Case vbRetry
Resume 0
Case vbIgnore
RegistrationCo = -1
End Select
End Sub
Public Sub LoadProject(ProjectName As String)
On Error GoTo Err1
Dim FileNumber As Integer
Dim a As Integer
Dim b As Integer
FileNumber = FreeFile
Open ProjectName For Input As FileNumber
Input #FileNumber, TotalDocCo, TotalFunCo, DocumentCo, FunctionCo
If DocumentCo -1 Then
ReDim Documents(DocumentCo)
For a = 0 To DocumentCo
With Documents(a)
Input #FileNumber, .TotalNumber, .FileName, .CreateDateTime, .UsedProgramm, _
.Discription, .ImageIcon, .ImageText, .X, .Y, .OutputFunPointCo, _
.OutputDocPointCo
If .OutputFunPointCo -1 Then
ReDim .OutputFunPoints(.OutputFunPointCo)
For b = 0 To .OutputFunPointCo
Input #FileNumber, .OutputFunPoints(b)
Next b
End If
If .OutputFunPointCo -1 Then
ReDim .OutputDocPoints(.OutputDocPointCo)
For b = 0 To .OutputDocPointCo
Input #FileNumber, .OutputDocPoints(b)
Next b
End If
End With
Next a
End If
If FunctionCo -1 Then
ReDim Functions(FunctionCo)
For a = 0 To FunctionCo
With Functions(a)
Input #FileNumber, .TotalNumber, .FileName, .CreateDateTime, .UsedProgramm, _
.AutomatFunction, .AutoExeFlag, .AskBeforeExe, .Discription, _
.ImageIcon, .ImageText, .X, .Y, .DocumentsAndFunctionsLink, _
.OutputFunPointCo, .OutputDocPointCo, .InputFunPointCo, _
.InputDocPointCo
If .OutputFunPointCo -1 Then
ReDim .OutputFunPoints(.OutputFunPointCo)
For b = 0 To .OutputFunPointCo
Input #FileNumber, .OutputFunPoints(b)
Next b
End If
If .OutputDocPointCo -1 Then
ReDim .OutputDocPoints(.OutputDocPointCo)
For b = 0 To .OutputDocPointCo
Input #FileNumber, .OutputDocPoints(b)
Next b
End If
If .InputFunPointCo -1 Then
ReDim .InputFunPoints(.InputFunPointCo)
For b = 0 To .InputFunPointCo
Input #FileNumber, .InputFunPoints(b)
Next b
End If
If .InputDocPointCo -1 Then
ReDim .InputDocPoints(.InputDocPointCo)
For b = 0 To .InputDocPointCo
Input #FileNumber, .InputDocPoints(b)
Next b
End If
End With
Next a
End If
Close FileNumber
Exit Sub
Err1:
& Chr(13) & Chr(10) & Err.Number & Chr(13) & Chr(10) _
& Err.Description, vbAbortRetryIgnore + vbCritical)
Case vbAbort
End
Case vbRetry
Resume 0
Case vbIgnore
FunctionCo = -1
DocumentCo = -1
End Select
End Sub
Public Function GetREGIndex(TotalNumber As Long) As Integer
Dim a As Integer
For a = 0 To RegistrationCo
If Registrations(a).TotalNumber = TotalNumber Then
GetREGIndex = a
Exit For
End If
Next a
End Function
Public Function GetDOCIndex(TotalNumber As Long) As Integer
Dim a As Integer
For a = 0 To DocumentCo
If Documents(a).TotalNumber = TotalNumber Then
GetDOCIndex = a
Exit For
End If
Next a
End Function
Public Function GetFUNIndex(TotalNumber As Long) As Integer
Dim a As Integer
For a = 0 To FunctionCo
If Functions(a).TotalNumber = TotalNumber Then
GetFUNIndex = a
Exit For
End If
Next a
End Function
Public Sub ShowProject()
Dim a As Integer
With MainForm
For a = 0 To DocumentCo
ImageCo = ImageCo + 1
Load .ImageIcon(ImageCo)
.ImageIcon(ImageCo).Top = Documents(a).Y
.ImageIcon(ImageCo).Left = Documents(a).X
.ImageIcon(ImageCo).Visible = True
.ImageIcon(ImageCo).Enabled = True
.ImageIcon(ImageCo).Picture = LoadPicture(Documents(a).ImageIcon)
.ImageIcon(ImageCo).Tag = Documents(a).TotalNumber
Load .ImageText(ImageCo)
.ImageText(ImageCo).Top = Documents(a).Y + 500
.ImageText(ImageCo).Left = Documents(a).X
.ImageText(ImageCo).Visible = True
.ImageText(ImageCo).Enabled = True
.ImageText(ImageCo).Caption = Documents(a).ImageText
.ImageText(ImageCo).Tag = 1
Next a
End With
End Sub
‘******************************
‘Main Form Code
‘******************************
Option Explicit
Option Base 0
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
Dim a As Integer
Dim dX As Integer
Dim dY As Integer
If SelectIs = True Then
dX = X - Source.Left
dY = Y - Source.Top
For a = 0 To ImageCo
If ImageIcon(a).BorderStyle = 1 Then
If ImageText(a).Tag = 1 Then
Documents(GetDOCIndex(ImageIcon(a).Tag)).X = ImageIcon(a).Left + dX
Documents(GetDOCIndex(ImageIcon(a).Tag)).Y = ImageIcon(a).Top + dY
End If
ImageIcon(a).Left = ImageIcon(a).Left + dX
ImageIcon(a).Top = ImageIcon(a).Top + dY
ImageText(a).Left = ImageIcon(a).Left
ImageText(a).Top = ImageIcon(a).Top + 500
End If
Next a
Else
If ImageText(Source.Index).Tag = 1 Then
Documents(GetDOCIndex(Source.Tag)).X = X
Documents(GetDOCIndex(Source.Tag)).Y = Y
End If
Source.Left = X
Source.Top = Y
ImageText(Source.Index).Left = X
ImageText(Source.Index).Top = Y + 500
End If
End Sub
Private Sub Form_Load()
Dim a As Integer
LoadRegCards
MakeDocForm.Combo1.Clear
For a = 0 To RegistrationCo
MakeDocForm.Combo1.AddItem Registrations(a).NameApp, a
Next a
MakeDocForm.Combo1.AddItem "Использовать стандартный обработчик", RegistrationCo + 1
MakeDocForm.Combo1.ListIndex = RegistrationCo + 1
LoadRegCards
ImageCo = -1
LoadProject App.Path & "pro1.prj"
ShowProject
SaveProject App.Path & "pro1.prj"
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
MouseX = X
MouseY = Y
SelectOn = True
With selectrec
.Visible = True
.Height = 0
.Width = 0
.Left = X
.Top = Y
End With
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If SelectOn = True Then
With selectrec
If Y < MouseY Then
.Top = Y
.Height = MouseY - Y
Else
.Top = MouseY
.Height = Y - MouseY
End If
If X < MouseX Then
.Left = X
.Width = MouseX - X
Else
.Left = MouseX
.Width = X - MouseX
End If
End With
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim a As Integer
If SelectOn = False Then
MouseX = X
MouseY = Y
If Button = 2 Then
MenuMake.Visible = True
MenuRegistration.Visible = True
MenuPropertyes.Visible = False
MenuSeparator.Visible = False
If SelectIs = True Then
MenuDelete.Visible = True
MenuCut.Visible = True
MenuCopy.Visible = True
Else
MenuDelete.Visible = False
MenuCut.Visible = False
MenuCopy.Visible = False
End If
' MenuPaste.Visible = False
MenuFrom = -1
MainForm.PopupMenu RightButtonMenuOnForm
End If
Else
SelectOn = False
selectrec.Visible = False
SelectIs = False
For a = 0 To ImageCo
If (ImageIcon(a).Top > selectrec.Top) And _
(ImageIcon(a).Left > selectrec.Left) And _
(ImageIcon(a).Top < (selectrec.Top + selectrec.Height)) And _
(ImageIcon(a).Left < (selectrec.Left + selectrec.Width)) Then
SelectIs = True
ImageIcon(a).BorderStyle = 1
Else
ImageIcon(a).BorderStyle = 0
End If
Next a
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
SaveProject App.Path & "pro1.prj"
End
End Sub
Private Sub ImageIcon_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
ImageIcon(Index).Drag
End If
End Sub
Private Sub ImageIcon_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
MenuMake.Visible = False
MenuRegistration.Visible = False
MenuPaste.Visible = False
MenuPropertyes.Visible = True
MenuSeparator.Visible = True
MenuFrom = Index
PopupMenu RightButtonMenuOnForm
End If
End Sub
Private Sub Menu_Edit_Click()
MainForm.PopupMenu RightButtonMenuOnForm
End Sub
Private Sub MenuDelete_Click()
Dim a As Integer
If SelectIs = True Then
For a = 0 To ImageCo
If ImageIcon(a).BorderStyle = 1 Then
Delete a
End If
Next a
SelectIs = False
Else
Delete MenuFrom
End If
End Sub
Private Sub MenuMakeDocument_Click()
DocumentCo = DocumentCo + 1
TotalDocCo = TotalDocCo + 1
ReDim Preserve Documents(DocumentCo)
Documents(DocumentCo).X = MouseX
Documents(DocumentCo).Y = MouseY
CurDocument = DocumentCo
DocumentIsChanged = True
MakeDocForm.Label4(0).Caption = "0"
MakeDocForm.Label4(1).Caption = str(Now)
MakeDocForm.Label4(2).Caption = str(Now)
MakeDocForm.IconText.Text = "Документ"
MakeDocForm.Icon9412_.Picture = LoadPicture(App.Path & "DefDoc.ico")
MakeDocForm.ImageIconText = App.Path & "DefDoc.ico"
MakeDocForm.Discrip.Text = ""
MakeDocForm.DocumentName = ""
Canceled = False
MakeDocForm.Show vbModal
If Canceled = True Then
DocumentCo = DocumentCo - 1
TotalDocCo = TotalDocCo - 1
ReDim Preserve Documents(DocumentCo)
Exit Sub
End If
MemberDocumentProperty DocumentCo
Documents(DocumentCo).TotalNumber = TotalDocCo
Documents(DocumentCo).OutputFunPointCo = -1
Documents(DocumentCo).OutputDocPointCo = -1
ImageCo = ImageCo + 1
Load ImageIcon(ImageCo)
ImageIcon(ImageCo).Top = Documents(DocumentCo).Y
ImageIcon(ImageCo).Left = Documents(DocumentCo).X
ImageIcon(ImageCo).Visible = True
ImageIcon(ImageCo).Enabled = True
ImageIcon(ImageCo).Picture = LoadPicture(Documents(DocumentCo).ImageIcon)
ImageIcon(ImageCo).Tag = Documents(DocumentCo).TotalNumber
Load ImageText(ImageCo)
ImageText(ImageCo).Top = Documents(DocumentCo).Y + 300
ImageText(ImageCo).Left = Documents(DocumentCo).X
ImageText(ImageCo).Visible = True
ImageText(ImageCo).Enabled = True
ImageText(ImageCo).Caption = Documents(DocumentCo).ImageText
ImageText(ImageCo).Tag = 1 '**************** 1 = Это документ
End Sub
Private Sub MenuPropertyes_Click()
Dim temp As Integer
If MenuFrom >= 0 Then
If ImageText(MenuFrom).Tag = 1 Then
temp = GetDOCIndex(ImageIcon(MenuFrom).Tag)
ShowDocumentProperty temp
MakeDocForm.Show vbModal
MemberDocumentProperty temp
ImageText(MenuFrom).Caption = Documents(temp).ImageText
ImageIcon(MenuFrom).Picture = LoadPicture(Documents(temp).ImageIcon)
End If
Else
End If
End Sub
Private Sub MenuRegistration_Click()
RegistrForm.Show vbModal
End Sub
Public Sub Delete(Index As Integer)
Dim a As Integer
Dim b As Integer
If ImageText(Index).Tag = 1 Then
b = GetDOCIndex(ImageIcon(Index).Tag)
For a = b To DocumentCo - 1
LSet Documents(a) = Documents(a + 1)
Next a
DocumentCo = DocumentCo - 1
End If
For a = 0 To ImageCo
Unload ImageText(a)
Unload ImageIcon(a)
Next a
ImageCo = -1
SaveProject App.Path & "temp~.prj"
LoadProject App.Path & "temp~.prj"
ShowProject
End Sub
‘********************
‘Make doc form code
‘********************
Option Explicit
Private Sub Cancel_Click()
Canceled = True
Hide
End Sub
Private Sub Command1_Click()
On Error GoTo Err1
RegDialog2.Flags = cdlOFNHideReadOnly
If Combo1.ListIndex (RegistrationCo + 1) Then
RegDialog2.Filter = "Âñå ôàéëû|*.*|" & _
Registrations(Combo1.ListIndex).NameApp & "|" & _
Registrations(Combo1.ListIndex).FileMask
Else
RegDialog2.Filter = "Âñå ôàéëû|*.*"
End If
RegDialog2.ShowOpen
DocumentName.Text = RegDialog2.FileName
Err1:
End Sub
Private Sub Command2_Click()
On Error GoTo Err1
RegDialog.Flags = cdlOFNFileMustExist + cdlOFNHideReadOnly
RegDialog.ShowOpen
Icon9412_.Picture = LoadPicture(RegDialog.FileName)
ImageIconText = RegDialog.FileName
Err1:
End Sub
Private Sub DocumentName_Change()
DocumentIsChanged = True
End Sub
Private Sub Form_Activate()
DocumentIsChanged = False
End Sub
Private Sub OkButton_Click()
Dim ErrorFlag As Boolean
Dim tmp As Integer
Dim CurObject As Object
Dim retShell As Long
On Error GoTo Err1
If DocumentName.Text = "" Then
DocumentName.SetFocus
Exit Sub
End If
If DocumentIsChanged Then
ErrorFlag = False
tmp = FileLen(DocumentName.Text)
If ErrorFlag = True Then
tmp = FreeFile
Open DocumentName.Text For Output As tmp
Close tmp
End If
End If
Hide
Exit Sub
Err1:
If Err.Number = 53 Then
ErrorFlag = True
Else
Select Case MsgBox("Ïðîèçîøëà îøèáêà íîìåð :" & Err.Number & _
Chr(13) & Chr(10) _
& Err.Description, vbAbortRetryIgnore + vbCritical)
Case vbAbort
End
Case vbRetry
Resume 0
End Select
End If
Resume Next
End Sub
‘***********************
‘ registration form code
‘***********************
Option Explicit
Dim CurIndex As Integer
Private Sub Browser_Click()
On Error GoTo Err1
RegDialog.Flags = cdlOFNFileMustExist + cdlOFNHideReadOnly
RegDialog.ShowOpen
Path = RegDialog.FileName
Err1:
End Sub
Private Sub Cancel_Click()
LoadRegCards
Hide
End Sub
Private Sub Combo1_Click()
ShowRegCard Combo1.ListIndex
End Sub
Private Sub DestroyReg_Click()
Dim a As Integer
For a = CurIndex To RegistrationCo - 1
LSet Registrations(a) = Registrations(a + 1)
Next a
RegistrationCo = RegistrationCo - 1
If RegistrationCo > -1 Then
ReDim Preserve Registrations(RegistrationCo)
If CurIndex > RegistrationCo Then CurIndex = CurIndex - 1
ComboRemake
CardShow CurIndex
Combo1.ListIndex = CurIndex
'ShowRegCard CurIndex
Else
EnabledAll RegistrationCo
End If
EnabledAll RegistrationCo
End Sub
Private Sub Form_Activate()
EnabledAll RegistrationCo
If RegistrationCo = -1 Then Exit Sub
ComboRemake
CurIndex = 0
CardShow CurIndex
Combo1.ListIndex = CurIndex
End Sub
Private Sub NewReg_Click()
TotalRegCo = TotalRegCo + 1
RegistrationCo = RegistrationCo + 1
ReDim Preserve Registrations(RegistrationCo)
Registrations(RegistrationCo).NameApp = InputBox("Ââåäèòå èìÿ ïðèëîæåíèÿ", , "Ïðèëîæåíèå" + str(RegistrationCo + 1))
If Registrations(RegistrationCo).NameApp = "" Then
ReDim Preserve Registrations(RegistrationCo)
TotalRegCo = TotalRegCo - 1
RegistrationCo = RegistrationCo - 1
Exit Sub
End If
Registrations(RegistrationCo).TotalNumber = TotalRegCo
EnabledAll RegistrationCo
ComboRemake
Combo1.ListIndex = RegistrationCo
'ShowRegCard RegistrationCo
'Debug.Print
End Sub
Private Sub OkButton_Click()
MemberCard
SaveRegCards
Hide
End Sub
Private Sub Rename_Click()
Dim a As Integer
Dim str As String
a = Combo1.ListIndex
str = InputBox("Ââåäèòå èìÿ ïðèëîæåíèÿ", , Registrations(a).NameApp)
If str "" Then Registrations(a).NameApp = str
ComboRemake
Combo1.ListIndex = a
'ShowRegCard a
End Sub
Private Sub ShowRegCard(NumRegCard As Integer)
MemberCard
CardShow NumRegCard
End Sub
Public Sub ComboRemake()
Dim a As Integer
Combo1.Clear
For a = 0 To RegistrationCo
Combo1.AddItem Registrations(a).NameApp, a
Next a
End Sub
Public Sub EnabledAll(Yes As Integer)
If Yes = -1 Then
ComboRemake
Browser.Enabled = False
DestroyReg.Enabled = False
Combo1.Enabled = False
Rename.Enabled = False
Path.Enabled = False
Discrip.Enabled = False
ListExt.Enabled = False
Path.Text = ""
Discrip.Text = ""
ListExt.Text = ""
Label1.Enabled = False
Label2.Enabled = False
Label3.Enabled = False
Label4.Enabled = False
Else
DestroyReg.Enabled = True
Combo1.Enabled = True
Browser.Enabled = True
Rename.Enabled = True
Path.Enabled = True
Discrip.Enabled = True
ListExt.Enabled = True
Label1.Enabled = True
Label2.Enabled = True
Label3.Enabled = True
Label4.Enabled = True
End If
End Sub
Public Sub CardShow(NumRegCard As Integer)
Path.Text = Registrations(NumRegCard).FileName
ListExt.Text = Registrations(NumRegCard).FileMask
Discrip.Text = Registrations(NumRegCard).Discription
CurIndex = NumRegCard
End Sub
Public Sub MemberCard()
Registrations(CurIndex).FileName = Path.Text
Registrations(CurIndex).FileMask = ListExt.Text
Registrations(CurIndex).Discription = Discrip.Text
End Sub
Приложения
рис 1.1
Рис. 2.2
Рис. 3.1. Основное окно программы
Рис. 3.2. Меню "Правка"
Рис. 3.3. Окно свойств документа