Apariencia gráfica de diseño

Desearía sugerencias o posibles soluciones con las que pudo superar el problema siguiente:
Si diseño una aplicacion en modo 800x600, si la instalo en una maquina que tiene la resolucion de 1024x768, se nota muy diferrente y los controles no se adaptan a su nuevo tamaño y no se aprecia tan profesional; y mi otra pregunta porque cuando instalo uan aplicacion con ejecutable, archivo pbd y librerias necesaris del power builder(libjcc.dll, pbdwe.dll, pbodbc.dll, pbv80.dll), cuando ejecuto la apliccion algunos label que se mostraban bien en la maquina que programo, en algunas no en todas,tapna algunas letras finales, ejm:label.text="Powqer Builder", en la otra mauina se ve "Power Build" y tapo la "er".

3 Respuestas

Respuesta
1
Este es uno de los graves problemas que podemos encontrar en power builder, lastimosamente hay cosas que este lenguaje no tiene incluido dentro de su contexto, uno de estos es la reubicación de controles, ventanas, etc. según las necesidades del usuario, como tu bien dices, el programar con una densidad y luego colocar la misma aplicación en otra maquina con otra densidad no solo no funciona correctamente sino que no tiene concepto de profesionalidad,
La solución que personalmente he determinado, es un poco tediosa, puesto que esto significa escribir, escribir, escribir,
Primero tienes que declarar en casi todos los controles el evento resize, y move. Los cuales deberán estar atados a sus propios event_id (algunos) y los que no contengan el propio, al genérico o genéricos.
Con estos eventos declarados, (cuidado que en algunos controles no funcionan), ya puedes iniciar la reforma de tu ventana.
Un ejemplo.
Cuando cambias el tamaño de una ventana luego todos los controles deberían hacerlo también, si la ventana contiene un datawindow, este debería también cambiar de tamaño conforme la ventana lo hace.
Aquí aplicas el evento resize que se encuentra en la ventana, y dentro de este cambias el tamaño de la ventana. Más o menos así.
THIS.dw_1.resize(THIS.WorkSpaceWidth(), THIS.WorkSpaceHeight())
Y con esto simplemente se reconfigura la ventana, aclarando que esto configura el control datawindow, no el datawindow object, por lo que internamente habrá que reconfigurar la intentar de los controles en el objeto datawindow, en el caso que este sea de tipo free-form, aquí entonces vuelve a tener utilidad el evento resize, pero del propio control datawindow, el cual no existe en su standard, sino que debe ser añadido, la modificación de los tamaños y posiciones, es exactamente igual. pero utilizando el prefijo OBJECT. Ej.
THIS.object.precio.width = 150 --> esto cambia el tamaño horizontal del control precio en el datawindow object.
THIS.object.precio.y = 1 --> esto cambia la posicion vertical del control precio en el datawindow object.
THIS.object.precio.x = 100 --> esto cambia la posicion horizontal en el control precio del datawindow object.
Como ya habrás descubierto, la tarea es ardua, personalmente he definido una técnica, por ejemplo, si una ventana contiene un datawindow y 3 botones, con un cuadro que agrupa los botones, entonces el datawindow y el cuadro son configurados con la ventana y los botones los reconfigura el cuadro de agrupación. La idea es atar (entre comillas), los botones al recuadro de agrupación.
Adicionalmente a esta, crear nuevos controles en los cuales ya tienen integrados los eventos resize y move. De tal manera que no tengas que añadirlo control por control.
El cambio de densidad del sistema visual, provoca la reconfiguración de la ventana principal, el cual debería ser automático, sin embargo, este cambio no influye en los controles internos de la ventana, y es en donde tienes que aplicar la técnica anterior,
Recomendación:
Es muy simple pensar que la reconfiguración de la densidad va hacia adelante, o sea yo programo en 800x600 y lo quiero ver en 1024x768 o mayor, aquí todo camina sobre ruedas, pero que pasa si cambio de 800x600 a 768x576 o 640x480, tienes que prever esto también al igual que la redimension de una ventana que aunque la densidad sea suficiente, la acción de redimensionar sea limitada o muy pequeña. Todo esto como ya te habrás dado cuenta, es posible por medio de los eventos resize y move, dentro de estos puedes limitar la re-ubicación o el redimensionamiento.
Respuesta
1
En cuanto a lo de los tamaños de resolución no hay nada simple que puedas hacer. Los controles no se rediseñan automáticamente, podrías hacerlo para que lo hagan pero seria un trabajo extra de tu parte y tendrías que evaluar si te conviene.
Otra opción es que si se va a usar unicamente en la resolución más alta, lo diseñes con esta resolución.
Consideraciones con respecto a las etiquetas y otros campos:
Por defecto aparece el color buttonface y el tipo de letra estándar de window.
Deberías setearlo a un color de tu aplicación y una tipografía propia, no la de windows ya que estas cambian con el fondo/esquema elegido por el usuario en cada pc.
Microsoft por algún motivo últimamente saco un nuevo tipo de fuente llamado opentype(OT) que si bien parece ser igual al truetype(TT) hay una diferencia y no se ven iguales. Me explico, la fuante arial TT en w98 es por algún motivo diferente a la fuente arial OT en w2000. Contra esto no hay mucho que se pueda hacer más que detectarlo y dejar un poco más de lugar para el texto.
Un ej. en un campo date con el tipo TT en w98 andaba bien y en una pc con w2000 producía un error grave y se colgaba todo. Después de mucho renegar vimos que era que el tamaño del texto en el campo en w2000 era mayor y producía un desboramiento.
Por ultimo y por las dudas asegurate de tener todas las librerías incluidas.
Respuesta
1
Para la primera parte, yo tengo problemas similares pero lo solucione realizando una rutina que "escala" la ventana a la resolución actual.
En realidad diseño las ventanas para 640 x 480 y al momento de ejecutar el sistema, la función genera un coeficiente y multiplica todos los controles (x, y, width, height, fontsize) por dicho coeficiente.
No queda hermoso pero salva el problema.
Otra opción es, en el evento RESIZE tienes que agregar el código necesario para que, al cambiar el tamaño, los controles tomen el nuevo lugar o posición.
Por el tema de los label's, lo que a mi me ha pasado es que en la PC donde ejecuto la aplicación, algunas veces, no posee la fuente y la reemplaza por otra que destruye todo el diseño. Puede ser que a ti te este pasando lo mismo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas