| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Системные сообщения |
| Автор: cyberstream 26.9.2006, 10:45 | ||||||||||
| Hello, ALL !!! Озадачился сегодня следующим: Создаём пункт системного меню
Где копнуть, что упустил? |
| Автор: Vyacheslav 26.9.2006, 12:12 | ||||
Main form
|
| Автор: Vyacheslav 26.9.2006, 12:29 |
| Виноват. Забыл указать для Form2 установить FormStyle = fsStayOnTop(всегда по верху) Postion = poOwnerFormCenter (по центру окна владельца) |
| Автор: cyberstream 27.9.2006, 16:56 | ||||||
| Действительно, всё гениальное просто. Преогромный thanks, Vyacheslav !! Вот только: 1. У вас работает изящная конструкция вида
2.Если у формы AlphaBlend=false; (чтобы не тормозило при Resize, Move...),
|
| Автор: dumb 27.9.2006, 17:16 |
либо в дизайнере сделай, либо при создании формы. |
| Автор: dumb 28.9.2006, 02:24 | ||||
так все равно заметно, как перед fade'ом мигает черным... так что лучше AlphaBlend выставлять при создании... |
| Автор: cyberstream 28.9.2006, 08:31 | ||||
| Ладно, пускай тормозит, выставим при создании. И ещё вопрос: Вторую форму пихаем в dll, код коего следующий
|
| Автор: Vyacheslav 28.9.2006, 09:45 | ||
| Не в том. 1)Первый вариант(не очень хороший). Перед вызом формы из dll выполнить подмену Аpplication из dll на Application приложения. И перед выгрузкой dll выполнить замену обратно. В dll должны быть функции типа
2)Второй вариант. Собрать и dll и приложение с включенной опцией Build with runtime package |
| Автор: cyberstream 3.10.2006, 15:31 | ||||||||
У меня не получается. Куда пихать вызов ShowWindow(Handle, SW_HIDE); и использовать ли его вообще? Другие варианты есть? Он не всегда работает, как хочется? Код формы в DLL
Код DLL
И ещё вопрос. Имеем: простое приложение, 1 форма. Почему не вызывается FormDeactivate при потере фокуса? Что за специфика такая непростая у этого события?
|
| Автор: cyberstream 5.10.2006, 12:25 | ||
Ладно, сделаем по-другому, как в OnDeactivate, Minimize example в Builder Нelp
Если отключить rBuild with runtime package, то будет fade-иться, но не спрячется в Taskbar-e, если влючить - наоборот, не появится на панели задач, но и не захочет закрываться при потере фокуса. Как это побороть? |
| Автор: cyberstream 7.10.2006, 14:50 |
| Ребята, вы где? У кого какие мысли есть? Поделитесь !! |
| Автор: Vyacheslav 9.10.2006, 12:43 | ||||
Должно получиться. Убедись, что точно экзешник и dll перестроены с данной опцией. Это весьма известный эффект и способы его решения стандартны ShowWindow(Handle, SW_HIDE); использовать не нужно.
А почему оно должно вызываться. Форма в приложении фокуса не теряет, так как форма в приложении одна. А то, что Вы переключаетесь на другое приложение, делая текущее неактивным, форме до этого дела нет. |
| Автор: cyberstream 9.10.2006, 16:57 | ||||||||
Убедился, да и по размеру видно, что И как было скомпилено. Сдвигов нет. 8(
Но как только оформляем DLL, начинается ... Если с Build with runtime packages то 2-я кнопка появляется по-любому - и с SW_HIDE и без SW_HIDE. Зато закрывается, теряя фокус. Если компилим без runtime packages (при этом отключать Use dynamic RTL ??? ), то с подменой Аpplication-ов и с SW_HIDE 2-е окно не вылезет, но уже и не захочет прятаться при потере фокуса. Не знаю уже, что и делать! Есть подозрения, что присутствует разумное этому объяснение, вот только какое? |
| Автор: Vyacheslav 9.10.2006, 18:07 | ||||
Не могли бы Вы прояснить следущие взаимоисключающие фразы фразы
Так появляется или не появлется? Уверяю Вас, что у Вы что-то собираете не так. Совершенно точно, что кнопка не появится, если собирать с включенной опцией Build with runtime. И разумное объяснение этому делу есть. При такой сборке на exe и dll присутсвует один общий эксземпляр Application. Еще раз и очень громко(чтобы все слышали) НЕ ТОЛЬКО DLL, НО И ОСНОВНОЕ ПРИЛОЖЕНИЕ ДОЛЖНО БЫТЬ СОБРАНО С BUILD WITH RUNTIME PACKAGE. Что бы окончательно убедиться в этом идите http://bcdev.narod.ru/Articles/dll_template.htm. Там внизу есть пример. К сожалению, он сразу не оттранслируется. Там прописались лишние пакеджи, которых нет у Вас. Отредактируйте строчку, которая расположена ниже Build with runtime: уберите все, начиная с ExtAction. И оттранслировав, Вы сможите убедиться, что формыЮ загружаемые из DLL не создают лополнительных кнопок на таскбаре. Кстати, может у Вас с этой строчкой что-то не впорядке. Например, она пустая ? |
| Автор: cyberstream 11.10.2006, 17:50 | ||
| НЕ ТОЛЬКО DLL, НО И ОСНОВНОЕ ПРИЛОЖЕНИЕ ДОЛЖНО БЫТЬ СОБРАНО С BUILD WITH RUNTIME PACKAGE. [/code] Так и делаю.
[code=nocolor] |
| Автор: Vyacheslav 11.10.2006, 18:58 |
| Вы пример мой собрали? |
| Автор: cyberstream 13.10.2006, 17:39 |
| Ваш пример собрал. Работает. Кнопка не появляется. А у меня должно было работать http://forum.vingrad.ru/index.php?showtopic=113557&view=findpost&p=875928 или определённо нет? И как заставить форму закрываться при потере фокуса? |
| Автор: FFFFFFF7 14.10.2006, 15:18 |
Смотря какого... Перепеши .http://www.sysman.ru/index.php?showtopic=7056&st=0 |
| Автор: Vyacheslav 16.10.2006, 17:58 | ||
Ты бы уж выложил в архиве полностью проект, а то словами объяснять получается малоэффективно. |
| Автор: cyberstream 18.10.2006, 09:42 |
| http://ifolder.ru/295708. |
| Автор: Vyacheslav 18.10.2006, 11:07 |
| Ну вот все и выяснилось. Извините, но до меня не дошло, что Вы используя dll пытаетесь линковать ее статически. Обычно dll подгружают динамически, чтобы иметь возможность модифицировать ее код, не занимаясь перекомпилированием основного приложения. Если Вам так уж необходимо линковать статически, то тогда уж используйте package вместо dll. Package - это dll от Borland и там все проблемы решены. Кстати при статической линковке можно просто экспортировать класс формы и с ним работать , а не использовать функцию. Если же надумаете использовать динамическую подгрузку dll, то я приааттачил проект с динамической подгрузкой. При работе с ним лучше открывать не отдельные проекты, целиком группу(файл FormInDll.bpg ) |
| Автор: cyberstream 18.10.2006, 14:08 | ||
Не могу скачать ваш архив.
Отчего так ? |
| Автор: Vyacheslav 18.10.2006, 14:16 |
| Так скачивайте, зарегистрировавшись. |
| Автор: cyberstream 19.10.2006, 11:25 |
| Не понимаю. Раз я выполнил вход и написал эти строки, значит я зарегестрирован? А форум так не думает. Отправьте на ящик, please. |
| Автор: cyberstream 25.10.2006, 14:56 |
| Ура! Всё работает! while (1) { Application->ShowMessage(" Наберу 100 постов - не забуду |
| Автор: Vyacheslav 25.10.2006, 15:28 |
| Надеюсь. А то пашешь-пашешь на Вас, а Вы вырастаете и забываете |
| Автор: cyberstream 27.10.2006, 17:31 |
| Ну... такое нам не грозит ... не скоро исчезнет с полки ваша "книга рецептов" |
| Автор: Vyacheslav 27.10.2006, 18:09 |
| Поддел, все таки, зараза |
| Автор: cyberstream 28.10.2006, 14:08 |
| Вы чего ? |