Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

План заняття. 1. Характеристика одноекземплярних прикладних застосувань




1. Характеристика одноекземплярних прикладних застосувань

2. Характеристика методів та властивостей одноекземплярних прикладних застосувань

 

В ряде случаев возникает необходимость создать приложение, которое могло бы запускаться только в одном экземпляре. Иными словами, требуется, чтобы не было возможности загружать вто­рую копию приложения, если работает первая. Это реализуется путем использования API-функций Windows.

К решению данной проблемы существует два подхода: блоки­ровка запуска второй копии и активизация уже открытого экземпляра приложения.

Рассмотрим, каким образом реализуется первый подход.

Перед запуском программа просматривает список заголовков открытых в системе окон и проверяет, не открыто ли ее главное окно. Для этого используется API-функция FindWindow, имею­щая такой формат:

FindWindow (lpClassName, lpWindowName: LPCTSR): HWND

Если требуемое окно не найдено, то данная функция возвра­щает нулевое значение, если же окно найдено, то будет возвращен его дескриптор. С помощью параметра lpClassName задается класс искомого окна, а с помощью параметра lpWindowName -его заголовок. Другими словами, если в приложении создана форма Forml класса TForml, то параметру lpClassName зада­ется значение TForml, а параметру lpWindowName устанавли­вается значение свойства Caption данной формы Обращение к функции FindWindow должно осуществляться только в файле проекта, так как если вызывать данный поиск из модуля главной формы, то к тому времени сама форма будет уже создана и открыта. Следовательно, функция найдет заданное окно, приложение заблокирует само себя и не будет запускаться вообще.

Предположим, что в приложении имеется главная форма Forml класса TForml с заголовком MainForm. Тогда, чтобы сделать данное приложение одноэкземплярным, необходимо:

1) добавить модуль Windows в список используемых модулей в разделе uses файла проекта;

2)в тело файла проекта после строки инициализации проекта Application. Initialize добавить код поиска формы сле­дующего вида:

if FindWindow('TForml', 'MainForm') <> О then Application.Terminate;

Теперь, если при запуске приложения в системе будет обнару­жено открытое ранее главное окно данного приложения, то вы­полнение второго его экземпляра будет прерываться.

Программисту следует обратить внимание на ряд моментов, о которых важно помнить. Во-первых, необходимо обязательно включить в файл проекта модуль Windows, потому что будет ис­пользоваться API-функция Windows. Если этого не сделать, то компилятор будет выдавать сообщение об ошибке. Во-вторых, при изменении свойств Name и Caption главной формы нужно изменить соответствующим образом и условие поиска в файле проекта. Кроме того, нельзя исключать теоретическую вероят­ность того, что имя и заголовок главного окна разрабатываемого приложения совпадут с аналогичными свойствами некоторого другого приложения, работающего в системе в текущий момент времени, и тогДа данное приложение нельзя будет запустить. По­этому рекомендуется, по возможности, давать главному окну при­ложения оригинальный заголовок, который не имел бы аналогов среди названий окон наиболее распространенных программ.

Второй подход к созданию одноэкземплярного приложения за­ключается в активизации уже запущенного экземпляра данного приложения. С этой целью применяется API-функция SetFore-groundWindow (hwndWindow: HWND): boolean. При ее использовании то окно, дескриптор которого задан параметром hwndWindow, будет размещено поверх всех открытых окон.

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

Если главное окно приложения уже открыто в системе, то при попытке запуска второго экземпляра приложения функция Find­Window вернет ненулевое значение. В этом случае функция SetForegroundWindow активизирует данное окно и разместит его поверх всех остальных открытых окон.

 

Контрольні питання

1. Характеристика одноекземплярних прикладних застосувань

2. Характеристика методів та властивостей одноекземплярних прикладних застосувань


АУДИТОРНЕ ЗАНЯТТЯ

ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ

ТЕМА 6.5: ОРГАНІЗАЦІЯ ПРИКЛАДНИХ ЗАСТОСУВАНЬ

 

Лекція №51 – Виклик зовнішніх прикладних застосувань




Поделиться с друзьями:


Дата добавления: 2014-12-25; Просмотров: 320; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.