Я использую стили Delphi XE6 и VCL. У меня есть основное приложение и dll. Мое основное приложение включило темы времени выполнения, и я использую файлы стиля vcl. Я очень похож на свои DLL. Я включил темы времени выполнения и добавил VCL.Themes, VCL.Styles в области использования и файл ресурсов с файлом стиля VCL внутри него. Когда DLL загружается, я загружаю VCL-стиль из ресурсов и устанавливаю его для DLL-gui. Основное приложение и DLL не построены с пакетами времени выполнения.VCL Style из DLL влияет на TMenuItem в приложении
Теперь у меня есть основной графический интерфейс приложения, оформленный в собственном стиле и DLL-стиле с собственным стилем. Кажется, что это хорошо работает до тех пор, пока ...
Когда я нажимаю кнопку в главном приложении, событие, которое открывает TPopupMenu, оно оформлено в том же стиле, что и графический интерфейс DLL вместо основного стиля приложения. Если я перемещаюсь по меню, я тоже получаю AV и сбой программы. Взгляните на прикрепленное изображение.
Что я делаю неправильно? Единственным обходным решением, которое я сейчас вижу, было бы создание собственного настраиваемого TPopupMenu, полученного из какого-либо другого элемента управления.
Как я обещал, что я подготовил простую демонстрационную программу, которая похожа на мое приложение. Он состоит из хост-приложения с собственным стилем и DLL со стилем, добавленным к ресурсу. Запустите его и нажмите кнопку «Всплывающее окно», затем попробуйте выбрать что-нибудь из всплывающего окна. Он будет разбиваться и останавливаться в каком-то StdWindowProc или что-то в этом роде. Также, если вы перейдете в меню оконной системы (левый верхний угол), когда вы попытаетесь выбрать что-то из этого меню, вы заметите, что системное меню оформлено как DLL gui и сбой. Ссылка на файл RAR: dropbox.com/sh/f2jmbsmw18akpyg/AAA6SWdBmVhf6n6K-mvYLLmua?dl=0
Спасибо за вашу помощь.
Наиболее вероятным объяснением является то, что вы пропускаете объекты VCL через границу между вашими модулями, что запрещено, если вы не используете пакеты времени исполнения. –
Другая возможность, о которой я могу думать, это то, что код стилей VCL, возможно, включает в себя перечисление ресурсов и перечисляет ресурсы во всем процессе. Быстрое сканирование кода предполагает, что это может быть проблемой, если 'AutoDiscoverStyleResources' является' True'. Этот вызов для 'EnumModules' выглядит немного для меня. –
Если вы не можете отладить это, я думаю, вы просите нас вникать в него. Для этого нам может потребоваться код, демонстрирующий проблему. –