Ramzay |
Отправлено: 09.03.2007, 01:19 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
Работая с dll я выяснил для себя, что это очень удобная штука с точки зрения повторного использования кода.
Однако, наряду с достоинствами я натолкнулся на недостатки, которые я победить не смог. Если кто сталкивался с подобными проблемами, буду признателен за подсказку.
Итак, особенность №1
Вызываем dll-функцию. Функция динамически создает модальную форму. Проблема заключается в том, что форму невозможно свернуть. При нажатии на иконку "Свернуть" в верхнем правом углу окна ничего не происходит. При этом окно нормально закрывается крестиком и нормально разворачивается на весь экран. Если из такой формы создать еще одну, то она будет нормально сворачиваться.
Особенность №2
Вызываем dll-функцию. Функция динамически создает модальную форму №1, которая в свою очередь создает еще одну модальную форму №2. Находясь в форме №2 нажимаем Alt-Tab и переключаемся в какое-либо другое приложение, а затем переключиться обратно. Мы видим на экране форму №2, под которой лежит приложение (в которое мы переключались), а форма №1 лежит под этим приложением. Хотя форма №1 должна лежать под формой №2.
Особенность №3
Запускаем некоторое приложение (например Word или что-то другое).
Вызываем dll-функцию. Функция динамически создает модальную форму №1, которая в свою очередь создает еще одну модальную форму №2. В процессе работы пользователя в форме №2 выдается сообщение. (например, функцией ShowMessage или это может быть сообщение об ошибке). После того как пользователь прочел сообщение и нажал ОК, пользователь видит не форму №2, а приложение.
Отредактировано Ramzay — 09.03.2007, 01:23 |
|
olegenty |
Отправлено: 09.03.2007, 08:26 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Для начала, есть ощущение, что EXE и DLL ты собрал статически, а не динамически. Пересобери динамически (Build with runtime packages и Use dynamic RTL) и данные эффекты должны улетучиться. При статической сборке экземпляры глобальный объектов (Application, Screen, Printer, etc) — локальны для EXE и для DLL (свои для каждого модуля то есть). При динамической — все модули "пользуются" единственным экземпляров данных объектов, созданных в EXE.
|
|
Ramzay |
Отправлено: 09.03.2007, 14:58 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
QUOTE (olegenty @ 09.03.2007, 08:26) | Для начала, есть ощущение, что EXE и DLL ты собрал статически, а не динамически. Пересобери динамически (Build with runtime packages и Use dynamic RTL) и данные эффекты должны улетучиться. |
Установка птицы "Build with runtime packages", оказывает заметное положительное воздействие. Но при этом придется за своей dll-кой таскать кучу пакеджей, а я к этому пока психологически не готов.
Что делает "Use dynamic RTL" — не понятно.
А нет ли какой-нибудь функции или метода, который бы позволил сделать окно задачи текущим окном Windows и вынести ее на передний план всех окон Windows? |
|
Tantos |
Отправлено: 09.03.2007, 18:20 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 108
|
QUOTE (Ramzay @ 09.03.2007, 21:58) | А нет ли какой-нибудь функции или метода, который бы позволил сделать окно задачи текущим окном Windows и вынести ее на передний план всех окон Windows? |
1. SetForegroundWindow
2. Вдогонку
|
|
|