Używam stylów Delphi XE6 i VCL. Mam główną aplikację i biblioteki DLL. Moja główna aplikacja ma włączone tematy wykonawcze i używam plików w stylu vcl. Zrobiłem coś podobnego do moich bibliotek DLL. Włączyłem kompozycje uruchomieniowe i dodałem VCL.Themes, VCL.Style w ramach zastosowań i plik zasobów z plikiem w stylu VCL. Po załadowaniu biblioteki DLL ładuję styl VCL z zasobów i ustawię go dla biblioteki DLL. Główna aplikacja i biblioteka DLL nie są budowane z pakietami uruchomieniowymi.Styl VCL z biblioteki DLL wpływa na TMenuItem w aplikacji
Teraz mam GUI aplikacji głównej z własnym stylem i gui DLL w stylu z własnym stylem. To wydaje się działać dobrze, dopóki ...
Kiedy klikam przycisk w mojej głównej aplikacji, które wydarzenie otwiera TPopupMenu, jest stylizowany w tym samym stylu co GUI DLL zamiast głównego stylu aplikacji. Jeśli poruszam się po menu, dostaję AV i program się zawiesza. Spójrz na załączony obraz.
Co robię źle? Jedynym obejściem, jakie obecnie widzę, byłoby uczynienie mojego własnego dostosowanego TPopupMenu wyprowadzonego z innej kontroli.
Jak obiecałem przygotowałem prosty program demo, który jest podobny do mojego wniosku. Składa się z aplikacji hosta o własnym stylu i DLL ze stylem dodanym do zasobu. Uruchom go i kliknij przycisk Popup następnie spróbuj wybrać coś z popup. Spowoduje to awarię i zatrzymanie się w niektórych StdWindowProc lub coś podobnego. Również jeśli przejdziesz do menu systemu okien (lewy górny róg), gdy spróbujesz wybrać coś z tego menu, zauważysz, że menu systemowe jest stylizowane jako GUI DLL i też się zawiesza. Link do pliku rar: dropbox.com/sh/f2jmbsmw18akpyg/AAA6SWdBmVhf6n6K-mvYLLmua?dl=0
Dzięki za pomoc.
Najbardziej prawdopodobnym wyjaśnieniem jest przekazywanie obiektów VCL przez granicę między modułami, co jest niedozwolone, chyba że korzystasz z pakietów uruchomieniowych. –
Druga możliwość, że mogę myśleć, że VCL kod style może flubs wyliczanie zasobów i wylicza zasobów w całym procesie. Szybkie skanowanie kodu sugeruje, że może to być problem, jeśli 'AutoDiscoverStyleResources' ma wartość' True'. To wołanie do 'EnumModules' wygląda dla mnie trochę niepewnie. –
Jeśli nie można debugować to wtedy myślę prosicie nas kopać do niego. W tym celu może być potrzebny kod, który demonstruje problem. –