que tienen un componente que estoy construyendo en Delphi XE que quiero ser utilizados de la siguiente manera:Desmarque "Habilitar temas de tiempo de ejecución" o elimine el manifiesto interno en Delphi XE?
usuario crea un nuevo proyecto en blanco.
El usuario elimina mi componente en el formulario.
Se ejecuta algún código especial de Designtime en mi componente, que cambiará las Opciones del proyecto para desmarcar la casilla "Habilitar temas de tiempo de ejecución" en las opciones del proyecto. No estoy seguro de que esto sea posible, así que estoy preguntando si es posible.
Si # 3 no es posible, entonces necesito otra solución a mi problema de "usabilidad" con este componente; El problema que tengo es que si los usuarios no deshabilitan el archivo de manifiesto vinculado estáticamente desmarcando Enable Runtime Themes, entonces ese manifiesto generado estáticamente que está vinculado al EXE parece anular los archivos de manifiesto externos que quiero tener fuera del EXE, en disco. También necesito modificar estos manifiestos en tiempo de ejecución, por lo tanto, la necesidad de manifiestos externos. Por supuesto, puedo habilitar la funcionalidad de Runtime Theme utilizando estos manifiestos, cuando es conveniente hacerlo. Una segunda pregunta es acerca de la prioridad de los manifiestos externos e internos; ¿Puede un manifiesto externo tener prioridad sobre el recurso manifiesto interno que está vinculado a las aplicaciones Delphi cuando se marca "Habilitar temas de tiempo de ejecución"?
soluciones aceptable distinto de # 3:
A. De alguna manera hacen que Delphi para no generar un manifiesto. B. De alguna manera, en tiempo de ejecución, Windows reconoce y prioriza archivos .manifest externos incluso cuando se encuentra uno interno.
C. Menos buena solución; En tiempo de ejecución, después de que falla CoCreateInstance en mi componente, puedo enumerar recursos, informar que un manifiesto externo está presente y nos está haciendo perder el control, y confiar en los desarrolladores que usan mi componente leyendo los mensajes de error de tiempo de ejecución que mi componente escupe, diciéndoles que deshabiliten runtime themes checkbox y reconstruir su aplicación. Extraer y leer un manifiesto ya está cubierto en otra pregunta de stackoverflow here, con código C++ que podría convertirse fácilmente en Delphi.
Actualización La respuesta aceptada hace exactamente lo que solicité, pero se considera un truco, y la respuesta de David sobre los contextos de activación es mucho más sensata y es el enfoque recomendado.
Update2 El manifiesto incorporado normalmente se reemplaza en las versiones posteriores de Delphi (XE5 y posterior) al especificar explícitamente qué manifiesto desea vincular, a través de la configuración del proyecto.
# 3 es definitivamente posible, las opciones del proyecto se exponen a través de la interfaz 'IOTAProjectOptions'. –
[Lectura interesante] (http://blogs.msdn.com/b/patricka/archive/2009/12/09/answers-to-several-application-manifest-mysteries-and-questions.aspx). Parece que en XP, el manifiesto externo tiene mayor prioridad que el embebido, mientras que en Vista + es al revés. –