Organizar Docks (no funciona)


([N1] aztecmexico) #1

Pues eso, que estoy hecho un lio con el manejo de los Docks.

Aclaro, estoy haciendo pruebas, pero los docks se acomodan donde les da su regalada gana, valiendoles ma..e si yo le indico que lo quiero arriba, abajo, azquierda o derecha, independientemente de si están en modo añadir o incluir.

Si una vez abierta la aplicación (en ejecución), manualmente los acomodo pues así se quedan por los siglos de los siglos, si desde el vDevelop les cambio la posición, al ejecutar no cambia ABSOLUTAMENTE NADA, siguen todos en las posiciones en que se quedaron al cerrar la aplicación la última vez que fue ejecutada.

Todos los docks incluyen formularios, no toolbars.

Ya reinicié instancias, y ni así funciona.

He observado varias de las open apps y por lo que veo todo mundo se evita problemas y utiliza un solo dock y a partir de ahi arman sus formularios, menús, etc.

Es esto un problema real? o soy yo el que anda tirándola fuera de la olla?

Posiblemente sea yo, puesto que existe muy poca información de problemas a ese respecto.

Agradeceré cualquier comentario al respecto.

En mis pruebas utilizo 4 docks y 5 formularios sin origen.

Form1 como principal del marco.
Form2 incluido en el dock2 posición arriba
Form3 incluido en el dock3 posición abajo
Form4 incluido en el dock4 posición izquierda
Form5 incluido en el dock5 posición derecha

en los modos de aparcar puede ser añadir o incluir, da igual, de todos modos los acomoda como le da su gana, la diferencia es que cuando los mueves manualmente, en uno puedes sobreponer en un área existente y te crea pestañas para cada dock, en el otro crea nuevas áreas.

Nuevamente agradezco cualquier orientación al respecto.

Saludos.

Martin Ibarra Murillo.


([N4] eic) #2

Hola.

Si no recuerdo mal, la información de la posición de los docks se almacena en el registro. Por tanto, si ejecutas la aplicación y cambias manualmente su posición, seguirá estando en el mismo sitio aunque lo cambies en vDevelop (porque la información que tiene el registro es la que considera más actual). En cambio, si lo ejecutas en otro ordenador, verás que van cada uno a su sitio.

Saludos,

Fran Varona


([N4] eic) #3

En concreto, está en:

HKEY_CURRENT_USERSoftwareVelneovClientMainWindow

Dentro de esa clave, hay una clave por cada aplicación-usuario, con la sintaxis:

usuario@vatp:direccion_vserver:puerto-codigo_instancia

El código de instancia (numérico) se puede ver desde vAdmin.

Borrando la clave de la aplicación, la siguiente vez que la abras tomará las posiciones que hayas definido en tu proyecto.

Saludos,

Fran Varona


([N1] aztecmexico) #4

Gracias Fran,

Haciendo lo que me indicas funciona.

Pero, no habrá manera de mejorar esto?, o alguien ya lo tiene un tanto más automatizado?

Los comandos actuales no sirven para identificar el número de instancia y en consecuencia poder automatizar la identificación del número de instancia para así poder borrar la entrada correspondiente.

Igualmente, aún poniendolo manualmente probé a borrar la entrada "State" y no funciona, hay que eliminar manualmente la carpeta completa de la instancia de la aplicación.

Lo que pretendo es en el evento on-init del marco, verificar y dar la opción al usuario de que cada que acceda a la aplicación pueda elegir si quiere mantener el último aspecto (en caso que lo haya cambiado) de los docks o quiere reiniciar a la configuración por defecto.

Igual y en lugar de poner esto en el autoexec, se pudiera poner en un check de configuración general de la aplicación, seleccionar o no si hay que organizar a modo por defecto los docks.

Bueno, la última es que se joda el usuario y que ni mueva, ni flote ni nada, un poco drástico el asunto.

En fín, creo como muchos otros en muchas otras cosas o temas (hasta más importantes) que esto se debe mejorar y no estar atado a estar eliminando una carpeta del registro, vamos, que ni siquiera la entrada que hasta para identificar su carpeta es imposible por no poder conocer el número de la instancia.

Un saludo y nuevamente gracias Fran, por lo pronto me sirve para dar el aspecto que deseo a mi aplicación real.

Martin Ibarra.


([N1] Tronico) #5

No se podría desde la aplicación borrar el registro correspondiente, es decir, si el usuario quiere recuperar el aspecto por defecto ejecuta un proceso que borre el dichoso registro.


([N1] aztecmexico) #6

Hola, pues no se puede, probé con un evento que borra la entrada del registro de windows, sin embargo como actualmente primero se construyen los docks y al último se ejecutan los eventos pues para cuando se borra la carpeta ya quedaron los docks con las últimas posiciones guardadas.

Encontré este post de Jesus Arboleya http://velneo.es/foros/topic/aclaracion-sobre-la-inicializacion-en-formularios-on_init donde queda la promesa de un evento nuevo PRE_INIT, que en este caso sería lo que se necesita.

Esperemos que a la brevedad o en la siguiente liberación ya venga incluido.

Mientras pues tendrás que hacer un ticket de soporte al (los) usuarios que desajusten sus marcos para que manualmente les borren la entrada del registro y sus marcos vuelvan a sus posiciones originales en automático, sobre todo si los cerraron por accidente, o (eso si se puede) programar que no los puedan cerrar.

Un saludo.

Martin Ibarra.












([N1] aztecmexico) #7

Bueno, pues a fin de cuentas si se puede borrar la entrada de registro, para esto se crea una nueva solución con un nuevo proyecto de aplicación que contiene la instrucción y de ahi se ejecuta la solución que contiene los docks.

Resulta un tanto engorroso el asunto, pero desde la solución "Puente" se pueden validar ciertas cosas, como pedir datos del usuario de la solución a ejecutar (user, password), validar si se quiere mantener el aspecto último o reorganizar a valores por defecto los docks, etc.

La única pega es que de momento aparece la famosa ventanita negra de DOS y no sé y no pude implementar la shell32 que algunos utilizamos en V6 para evitarla, simplemente no funciona o yo soy muy bestia para ese tema y me queda grande de momento.

Tambien lo intenté con el componente y tutor cmdret.dll pero igualmente no funciona, manda error -1.

Aqui una petición, si alguien a logrado hacer funcionar la shell32.dll para evitar la famosa ventanita se agradecerá su orientación o la publicación del vin.

Saludos.

Martin Ibarra.


([N1] aztecmexico) #8

Bueno, pues a fin de cuentas y despues de leer y releer manuales, foros, etc. y de un buen rato buscando en la web pude hacer que se borrara la dichosa entrada con la ayuda de un programita que me encontré en http://www.nirsoft.net el cual se llama nircmd.exe.

Anexo la línea que utilizó para hacerlo funcionar, ahhhh, y sin la molesta ventanita negra de güindows,

Lanzar aplicación (No esperar, sysCacheClientPath + "nircmd.exe", "execmd " + sysCacheClientPath + "eliminaregistro.bat", OK)

esta línea puesta en el autoexec de la aplicación "puente" que lanza a la aplicación real me borra la entrada de registro correspondiente.

Ojo, me tardé porque supuse que al incluir los archivos nircmd.exe y eliminaregistro.bat como ficheros adjuntos, se ejecutarían en automático, ya que los mismos (lo verifiqué) se descargan al ejecutar la aplicación en la cache local del cliente, SIN EMBARGO esto se lo pasa por el arco del triunfo y no funciona, por tal motivo hay que agregar la SENDA de la caché local mediante la variable de sistema sysCacheClientPath.

Mientras sigo con lo de probar a implementar funciones de la API de windows, que dicho sea de paso es un desmadre por lo de las convenciones y los tipos de datos para los parámetros.

Por cierto, en ese mismo sitio hay otra utilidad (DLL EXPORT VIEWER) que muestra todas las funciones contenidas en una DLL, ya uno por su cuenta busca en internet los parámetros y demás para utilizarla.

Saludos.

Martin Ibarra.