Sto utilizzando gli stili Delphi XE6 e VCL. Ho l'applicazione principale e le DLL. La mia applicazione principale ha abilitato i temi di runtime e sto usando i file in stile vcl. Ho fatto una cosa abbastanza simile alle mie DLL. Ho attivato temi di runtime e aggiunto VCL.Themes, VCL.Styles in usi e file di risorse con file in stile VCL al suo interno. Quando viene caricata la DLL, carico lo stile VCL dalle risorse e lo imposto per il gui DLL. L'app principale e la DLL non sono costruite con pacchetti di runtime.Lo stile VCL della DLL interessa TMenuItem nell'applicazione
Ora ho la GUI dell'app principale in stile con il proprio stile e gui DLL con stile proprio. Questo sembra funzionare bene fino a ...
Quando faccio clic sul pulsante nella mia app principale quale evento apre TPopupMenu è in stile con lo stesso stile della GUI DLL invece dello stile dell'app principale. Se navigo nel menu ottengo anche AV e il programma si blocca. Dai un'occhiata all'immagine allegata.
Cosa sto sbagliando? L'unica soluzione che attualmente vedo sarebbe quella di rendere il mio TPopupMenu personalizzato derivato da qualche altro controllo.
Come promesso ho preparato semplice programma demo che è simile alla mia domanda. Consiste in un'applicazione host con il proprio stile e DLL con stile aggiunto alla risorsa. Eseguilo e fai clic sul pulsante Popup, quindi prova a selezionare qualcosa dal popup. Crollerà e si fermerà in alcuni StdWindowProc o qualcosa del genere. Inoltre, se si accede al menu di sistema della finestra (angolo in alto a sinistra) quando si tenta di selezionare qualcosa da quel menu, si noterà che il menu di sistema ha lo stile di gui DLL e si blocca anche. Collegamento a file rar: dropbox.com/sh/f2jmbsmw18akpyg/AAA6SWdBmVhf6n6K-mvYLLmua?dl=0
Grazie per il vostro aiuto.
La spiegazione più probabile è che si passino oggetti VCL oltre il limite tra i moduli, il che non è consentito a meno che non si utilizzino pacchetti di runtime. –
L'altra possibilità che posso pensare è che gli stili VCL codificano forse l'enumerazione delle risorse dei flub e enumerano le risorse lungo l'intero processo. Una rapida scansione del codice suggerisce che potrebbe essere un problema se "AutoDiscoverStyleResources' è' True'. Quella chiamata a "EnumModules" sembra un po 'incerta per me. –
Se non riesci a eseguire il debug di questo, suppongo che ci stia chiedendo di approfondire. Per fare ciò potrebbe essere necessario avere un codice che mostri il problema. –