delphi - ¿Cómo deben lidiar los desarrolladores con tantas combinaciones de configuraciones de GUI?
user-interface desktop-application (7)
Delphi 2009 trajo soporte para tematización (es una configuración de nivel de aplicación). Cuando ejecuta una aplicación Delphi 2009 o una versión superior en Vista / Windows 7, cambia los cuadros de mensaje a TdTogs de tareas, por lo que obtiene algunas mejoras de UI de forma gratuita.
Hemos tenido problemas para trasladar a Delphi 2009 y Unicode, pero esa fue una ''deuda técnica'' que tuvimos que pagar en algún momento.
Espero que esto ayude.
Hoy en día, cualquier aplicación de escritorio decente de Windows debe funcionar bien y verse bien bajo las siguientes condiciones:
- XP y Vista y Windows 7.
- 32 bit y 64 bit.
- Con y sin Temas.
- Con y sin Aero.
- En 96 y 120 y quizás DPI personalizados.
- Uno o más monitores (pantallas).
- Cada sistema operativo tiene su propia fuente preferida.
¡Oh mi! ¿Qué puede hacer un pequeño desarrollador de aplicaciones de escritorio para Windows? :(
Espero obtener un hilo que comience con sugerencias sobre cómo lidiar con este dilema de GUI.
Primero, estoy en Delphi 7.
a) ¿Delphi 2010 trae algo nuevo a la mesa para ayudar con esta situación?
b) ¿Deberíamos elegir un conjunto de componentes del mercado de accesorios y confiar en ellos para resolver todos estos problemas?
c) ¿Deberíamos ir con un motor de rejuvenecimiento?
d) Quizás una GUI de tipo HTML sea el camino a seguir. ¿Podemos hacer una aplicación GUI relativamente compleja con HTML que no requiera el uso de un navegador? (prefiere mantenerlo en forma)
e) ¿Deberíamos limitarnos a codificar y codificar cada uno de estos escenarios y dejar de quejarse al respecto?
f) Y finalmente, ¿cómo se supone que debemos probar todas estas condiciones?
Delphi lo hace bastante fácil, pero al final habrá ejecutado su software en todas las versiones de Windows y verificará visualmente que todo se ve bien. La prueba automatizada es excelente para probar la funcionalidad, pero los cosméticos solo se pueden controlar visualmente.
Excelente pregunta
He estado desarrollando mi aplicación durante más de 10 años, comenzando con Delphi 2, 3 y luego 4 y luego quedándome allí y esperando muchos años para actualizar a Delphi 2009 porque Unicode era imprescindible. Actualizaré de nuevo cuando salga la versión de 64 bits.
Así que he recorrido toda la gama de sistemas operativos: Windows 98, Windows 2000, XP, Vista y ahora 7. Cada uno rompe su UI, pero Delphi ha sido bastante bueno al respecto. En algún punto del tiempo, debe decidir que ya no puede soportar los sistemas operativos más antiguos, y cambiar a Unicode finalmente elimina Windows 98 de mi lista compatible.
En general, he encontrado que Core Delphi te ofrece el mejor soporte de UI. Es posible que algunos paquetes de terceros proporcionen más, pero sus incoherencias son peores que sus beneficios. Minimice otros paquetes donde pueda.
El único objetivo de la interfaz de usuario que he tenido es ir al programa de logotipo de Windows Vista, y más recientemente al programa de Windows 7, y Microsoft proporciona mucha información sobre cuáles deberían ser los estándares que relacionan las condiciones del 1 al 7 en su pregunta. Pero conseguir un programa Delphi para usar un manifiesto y pasar por los aros de Microsoft fue al final, no me costó la molestia y el costo, especialmente porque mi programa no conforme funcionaba bien en Vista y 7.
Mantener mi programa en ejecución y mantener la interfaz de usuario igual en Windows XP, Vista y 7 cuando estoy desarrollando en una máquina Vista de 64 bits significa que uso Microsoft Virtual Machine cuando lo necesito. Me han dicho que mi programa también funciona en Wine, por lo que es otra máquina de prueba.
Ahora respondiendo tus preguntas:
a) ¿Delphi 2010 trae algo nuevo a la mesa para ayudar con esta situación?
Sí. Cada versión agrega nuevos componentes de VCL que se han agregado a los nuevos sistemas operativos. por ejemplo, se han agregado las nuevas IU de Windows 7.
b) ¿Deberíamos elegir un paquete de componentes para el mercado de accesorios y confiar en ellos para resolver todos estos problemas ?, y c) ¿Deberíamos elegir un motor de revisión de postventa?
Como dije antes, creo que es mejor hacerlo en Delphi que en un paquete de terceros.
d) Tal vez un gui de tipo más html sea el camino a seguir. ¿Podemos hacer una aplicación de interfaz gráfica de usuario relativamente compleja con html que no requiera el uso de un navegador? (prefiere mantenerlo en forma)
Mi aplicación es como un procesador de textos con texto enriquecido. He visto conjuntos de editores basados en HTML y hay algunos, pero no creo que sea el camino a seguir para una aplicación de escritorio. Si desea una aplicación basada en la web, estaría mejor con .NET y Prism.
e) ¿Deberíamos limitarnos a codificar y codificar cada uno de estos escenarios y dejar de quejarse al respecto?
Actualice a Delphi 2010 primero. Descubrirá que Delphi se encargará de la mayoría de esas situaciones por usted.
f) Y finalmente, ¿cómo se supone que debemos probar todas estas condiciones?
Hacerlo usted mismo es una gran tarea, incluso con máquinas virtuales. Lo que tienes que hacer es tener una versión beta abierta y obtener tantos usuarios diferentes en diferentes entornos para probar tu programa por ti. Luego, manejará todos los entornos que son más importantes para sus usuarios.
Ahora, si cree que es difícil conseguir la compatibilidad de la interfaz de usuario en diferentes entornos de Windows, simplemente espere hasta que Embarcadero presente su versión de Delphi que se compilará para la Mac. Sus preocupaciones de UI actuales parecerán triviales en comparación con lo que será.
Para la escala de sus formularios en resoluciones múltiples / tamaños DPI: utilizamos DevExpress LayoutControl para eso. Se asegura de que los controles en su formulario siempre se alineen para usar el espacio disponible, pase lo que pase. Y hace mucho más. Eche un vistazo a su sitio .
Por el momento, me gustaría responder una sola pregunta:
f) Usar máquinas virtuales y (si es posible) pruebas automatizadas. Sé que es un gran trabajo configurar esto, pero nunca te arrepentirás.
Yo también soy un modesto desarrollador de Windows (D7), mucho más interesado en resolver los problemas de usuario de mi aplicación de mercado vertical que en lidiar con M $ foibles.
Construí un componente para lidiar con todos estos problemas, más algunos más.
Hasta donde yo sé, todas las piezas estaban en el dominio público, y las he acreditado siempre que sea posible.
Estas son algunas de las propiedades:
tipo TAppEnvironment = clase (TComponent)
privado
{ Private declarations }
// gestión del entorno
FEnvError : TEnvError; // environment error code
FEnvErrorMsg : string; // environment error message
FEnvLocalComputerName : string; // name of the client computer
FEnvCurrentUserName : string; // logged-on user
FEnvCurrentUserAdmin : Boolean; // is logged-on user Admin?
FEnvProduct : string; // windows edition
FEnvProductFlavour : string; // windows flavour (Home/Pro)
FEnvBuildNumber : string; // windows build number
FEnvServicePack : string; // windows service pack
FEnvThemeActive : Boolean; // Windows Theme active
// calc usando producto y tema
FEnvTitleHeight : integer; // window title height
FEnvMenuHeight : integer; // window menu height
FEnvStatusHeight : integer; // window status bar height
FEnvBorderHeight : integer; // window border height
FEnvMainHeight : integer; // main menu window height
FEnvMainWidth : integer; // main menu window width
FEnvHeightAdjust : integer; // window height adjust
FEnvWidthAdjust : integer; // window width adjust
FEnvLocalPath : string; // App exe home folder
FEnvAppFolderName : string; // application name less extension
FEnvAppFileVersionStr : string; // like 6.0.0.4567
FEnvAppFileVersion : TFileVersion; // HiVersion, LoVersion, etc.
Y algunas utilidades:
function EnvironmentReady : TEnvError;
function GetLocalComputerName : string; // network needs this
function GetAppFolderName : string;
function BuildNumber : Integer;
procedure GetFileInfo(const AFileName: string; var RFileInfo: TFileInfo);
function GetLocalPath : string;
procedure getEnvWindowAdjust(bar : TStatusBar);
function setAppFileVersionStr : string;
function GetFileTime(const FileName: string): LongInt;
function initEnvironment : Boolean;
function exitEnvironment : Boolean;
function AlreadyRunning : Boolean;
function specialBuild : Boolean;
Tengo una función para clasificar cada formulario correctamente, usando FEnvTitleHeight, etc.
Todas las rutas de usuario tontas también se generan, dependiendo de la versión de Windows.
No tengo ni idea de cómo gestionar el proceso, pero si la gente lo desea, lanzaré todo al pozo, para que los maestros puedan resolverlo.
- Delphi 2010 ofrece compatibilidad nativa con Unicode.
- Delphi 2010 trae controles de Windows Vista / Seven.
- No existe un compilador Delphi de 64 bits por el momento.
- No deberías tener ningún problema para manejar las preguntas de conteo de ppp y monitor con Delphi 7