No logro entender como funciona la función zorder

549 views
Skip to first unread message

Elides Paredes

unread,
Apr 24, 2015, 8:11:24 AM4/24/15
to publice...@googlegroups.com
Estimados maestros web

Me ha ocurrido en muchas ocasiones que tengo objetos con un orden Zorder() en modo de diseño y me cambia en modo de ejecución. Y viceversa. Por ejemplo, coloco rectángulos (Shapes) detrás de los controles de textos, (para poner un fondo atractivo)  y al correr el formulario necesito poner zorder(1) dentro del algoritmo para que se puedan ver bien en el formulario
Sin embargo al volver al modo diseño vuelven a estar delante de los cuadros de textos.

Esto es algo que me pasa con frecuencia y no consigo otra solución, tengo que estar constantemente cambiando la posición con las propiedades en modo de diseño y con algoritmos en modo de ejecución.

tengo un formulario en particular (agenda) donde coloqué un calendario pero tiene muchos objetos porque cada día tiene un botón y cuando le agrego un nuevo control todo se vuelve como un 8 (enredado, jajaja). 

Mucho les sabría agradecer porque con éste problema llevo años y me gustaría saber que pasa internamente porque no consigo información comprensible en la red.

Agradecido por éste y todas las veces que me han ayudado y me han enseñado, por eso al principio los saludos como maestros. 

Gracias.
Elides Paredes.
Barquisimeto Venezuela

Fernando D. Bozzo

unread,
Apr 24, 2015, 9:21:57 AM4/24/15
to publice...@googlegroups.com
Hola Elides:

Si los controles están directamente en el formulario no deberías tener problemas, realmente puede haber problemas cuando esos controles son heredados por alguna clase que hayas puesto en el form, donde a veces pueden tener un comportamiento extraño, y esto a veces se puede deber a que el form podría tener cierto grado de corrupción que no llega a causar errores.

Podrías verificar algunos tipos de corrupción en forms (o librerías de clases) convirtiendo tu form a texto con FoxBin2Prg, si hay algún problema evidente, te saldrá una ventana indicando el error.


Saludos.-

Elides Paredes

unread,
Apr 24, 2015, 10:47:50 AM4/24/15
to publice...@googlegroups.com
Estimado maestro de maestros: Fernando.

Ante todo muchas gracias por responder,

 Adjunto un ejemplo de un formulario que solo contiene 3 objetos image y 3  shape que coloco para 'enmarcar' la imagen, (aunque el problema me ha ocurrido con otros controles, como etiquetas) y hasta donde se son nativos, 

(aunque en un tema diferente me hicieron el mismo comentario, pero sucede que yo coloco solo objetos de VFP, ahora dudo, si hice algo de forma inconsciente.)

De allí que se me ocurrió la idea de enviar un Form. en éste el problema ocurre solo con un shape, en diseño está debajo de la imagen. (como debería quedar). al ejecutar se coloca encima de la imagen. 

Y al volver al modo de diseño permanece el shape sobre la imagen. Claro se puede corregir muy simple en el Init le coloco zorder(1), pero no entiendo porque es necesario hacerlo, debería quedar como en modo de diseño; porque no hay nada que le indique que cambie.
ejemplo de form con error._zip

Fernando D. Bozzo

unread,
Apr 24, 2015, 12:42:17 PM4/24/15
to publice...@googlegroups.com
Hola Elides:

Como te comenté, el problema tiene que ver con algunos datos internos que afectan al ZOrder de los objetos, y se puede solucionar con FoxBin2Prg v1.19.43 Preview-1.

Te adjunto un zip con tu form arreglado, la vista texto generada con FoxBin y la configuración que usé.

Te comento que el arreglo consistió en usar la configuración CFG que te adjunto, convertir el form a texto (.sc2) y regenerar el form desde el texto .sc2


Saludos.-

ejemplo de form con error._zip

Elides Paredes

unread,
Apr 24, 2015, 2:10:53 PM4/24/15
to publice...@googlegroups.com


Estimado Sensei: Fernando.

Ante todo muchas gracias por responder,

 Después de 1 hora analizando tu respuesta, aunque desde el principio no tuve dudas de que sabes lo que dices, trate de bajar el programa pero, honestamente me pareció en 'chino', hasta éste momento solo entiendo que se puede resolver y un poquito cual es la causa.

Voy a tratar de entender un poco adentrándome en la aplicación genial que hiciste, aunque entiendo un poco de inglés, asimilar la parte técnica me lleva mas tiempo. jejeje...

Pero agradezco mucho tu aporte,  pienso que es mejor como dice el proverbio chino, enseñar a pescar que dar el pescado. Y aunque la reparación la hace una aplicación, pues es casi igual, me das una caña de pescar y me enseñas a usarla..jajaja.

Por cierto el vídeo es muy bueno, pero tengo un monitor pequeño y aún con alta definición me resulta difícil verlo. 

Fernando D. Bozzo

unread,
Apr 24, 2015, 2:21:47 PM4/24/15
to publice...@googlegroups.com
Elides, aunque el programa tiene los métodos en Inglés, ¡no hace falta que estudies el código! que para eso está la documentación de uso!

Por eso te puse el link donde vas a encontrar la Documentación en Español

Cualquier duda, comentame,


Saludos :D

Fernando D. Bozzo

unread,
Apr 24, 2015, 2:48:41 PM4/24/15
to publice...@googlegroups.com
Volví a releer tu respuesta y veo que me quedé un poco corto en la mia anterior, así que la complemento con esta:

Aunque estudiar el código de FoxBin2Prg te pueda aportar algunas cosas, te aviso que son más de 25.000 líneas de código y que te puede llevar un rato :-)


Pero volviendo al tema principal:

VFP a veces guarda una propiedad en las tablas por cada objeto llamada "ZOrderSet". Aunque el ZOrder del objeto está determinado por el orden físico del registro, esta propiedad puede alterar ese orden, cambiándolo. En este caso tu form tenía asignada esa propiedad para todos los controles y estaba causando conflictos.

Hace unos días un desarrollador que usa FoxBin me explicó el problema que estaba teniendo con esta propiedad en los objetos, sobre todo en clases visuales heredadas, y me preguntó si se podía agregar un seteo en FoxBin2Prg para poder quitarla, así que en el Preview de la próxima versión ya agregué ese seteo (RemoveZOrderSetFromProps) que va en el archivo de configuración foxbin2prg.cfg y que si se activa con 1 permite quitar esa propiedad de todos los objetos, tanto de los binarios como de las vistas texto, con lo cual la clase visual puede volver a su curso normal otra vez.

Obviamente, también podés abrir el form como tabla con USE, buscar en los campos memo esa propiedad y quitarla a mano, pero este proceso es un poco más peligroso, porque si te equivocás o quitás o ponés algo demás, se te puede corromper el form.


Saludos!

Elides Paredes

unread,
Apr 24, 2015, 3:36:39 PM4/24/15
to publice...@googlegroups.com
Nooo.. Por Dios..! Estudiar el código. FoxBin... ?
eso nunca.. Para mí seria mas fácil estudiar la energía nuclear... jajaja. 25.000 líneas no me llevaría un rato, necesito el resto de mi vida y si hay otra, gran parte de la otra.

Solo pretendía entender que sucede con VFP, ahora entiendo que es una especie de corrupción de la tabla y tengo idea de que quizás algún día me atreva a arriesgarme a repararlo, (De esa forma manual), porque con ésta última explicación si  entendí perfectamente lo que sucede. A eso me atrevo porque guardo respaldos y es fácil recuperar el formulario si se daña.

Lo que ya comencé fue a tratar de entender lo que hace la aplicación, o como implementarla y no como lo hace...nooo.. es demasiado para mi.

Ustedes tienen una forma muy profesional de hacernos entender. Por eso siento mucho respeto y admiración por esa labor tan noble que hacen. De hecho es lo único en mi vida que he visto que alguien hace con tanto profesionalismo e incluso pasión por ayudar.



  Gracias, mis respetos.
 
Elides Paredes.
Barquisimeto Venezuela

Fernando D. Bozzo

unread,
Apr 24, 2015, 4:12:10 PM4/24/15
to publice...@googlegroups.com
Ja ja ja, entonces te había entendido mal, porque hablaste de que te ibas a "adentrar en la aplicación" y creí que te referías al código.

El uso realmente es muy simple: Lo principal es foxbin2prg.exe, que es el conversor, y para que convierta un binario VFP a texto, se lo tenés que "pasar", para lo que tenés varias formas, pero la más fácil es crearle un acceso directo y copiar ese acceso directo a la carpeta "SendTo" de tu perfil de Windows, que cambiará de ubicación dependiendo qué Windows sea (Win7 => \Users\tuUsuario\SendTo) y así luego podés usar el menú "Enviar a" haciendo click-derecho sobre tu form (el scx) y "Enviar a" FoxBin2Prg, lo que genera un archivo con el mismo nombre de tu form, pero extensión sc2.

También podés hacerlo a la inversa: Seleccionar el archivo.sc2, "Enviar a " FoxBin2Prg y eso te regenerará el form, ya que FoxBin reconoce las extensiones de entrada para saber qué generar como salida.

Lo que si te va a interesar es la vista texto generada, que es prácticamente un PRG, aunque no es ejecutable, y que te sirve para comparar con las versiones anteriores.

En fin, hay mucha documentación en mi Blog y algunos videos como para ver posibles usos. Algunos lo usan para hacer backup de forms, clases, menus, etc, otros para usarlo con herramientas de control de código y así poder comparar versiones, otros lo usan para hacer reemplazos masivos en las vistas texto (por ejemplo de una clase por otra) y luego regenerar todos los binarios, y finalmente los más avanzados lo usan como objeto para controlar el proceso con herramientas particulares, por ejemplo Fidel se montó una aplicación interesante para manipulación de clases y otros están creando herramientas para usar con git u otros SCM basándose en este objeto.

Creo que le podés sacar provecho, al menos como backup, ya que un binario se puede corromper, pero un archivo de texto es más difícil que le pase algo, además de ser mucho más comprimible y fácil de enviar.


Saludos.-

Fidel Charny

unread,
Apr 24, 2015, 4:49:25 PM4/24/15
to publice...@googlegroups.com
Hola Fernando!
Ahí pongo dos imágenes de aplicaciones adicionales con Foxbin2prg.

Lo que se ve en prs_foxbin2.jpg es una vcx que genera una serie de informes sobre cómo está compuesta una librería (puede ser un form también):
Métodos, propiedades, funciones de usuario (si es que se genera el diccionario de funciones), variables locales, privadas, públicas, array locales, privados , públicos, llamadas a métodos, métodos sin llamadas, etc.
Ahora ha progresado bastante respecto de la idea original, aunque todavía le falta claridad en algunas cuestiones. Y en parte debido a que necesito compartir una librería y, como siempre, uno echa mano a cuanto recurso tiene en el proyecto. Pero a la hora de compartir, se necesita que la vcx tenga toda la funcionalidad y no contaminar al usuario con un montón de basura.

Gracias a Foxbin2prg (la librería trabaja sobre los vc2 o sc2 utlizando foxbin2prg como objeto), pude determinar todo esto, corregir desprolijidades, etc.

El backup con FoxBin2prg (yo lo envío a una carpeta de Dropbox) nos libra de corrupciones y el tema de archivo memo no reconocido y otros espantos propios de los binarios.
Algunos usos de los que se ven en getfoxbin.jpg son de una sola vez y para eliminar viejos errores.

Más allá de estos ejemplos, Foxbin2prg es lo que utilizo todos los días. También recomiendo Notepad++ como editor de texto.

Gracias Fernando!
Un abrazo!

getfoxbin.jpg
Prs_foxbin.jpg

Fernando D. Bozzo

unread,
Apr 24, 2015, 5:03:47 PM4/24/15
to publice...@googlegroups.com
Qué bueno Fidel! cada vez mejor!

Creo que te podría llegar a ser util lo se UseClassPerFile, donde te descompone una librería en una clase por archivo, más manejable, que además ahora también es válido para los DBCs (conexiones, tablas, vistas, etc)

Un abrazo! :D


Elides Paredes

unread,
Apr 24, 2015, 5:23:13 PM4/24/15
to publice...@googlegroups.com
Disculpen, ésto lo dicen porque es viernes? o están hablando en serio? 
 
cuando estaba pensando que si podía en un mediano o largo plazo, viene Fidel con eso..

Es como si pasaron del Chino, al Mandarín. o al Ruso de lo que no entiendo una letra. He estado tratando de descifrar un poco pero, eso no es VFP, aunque sirva para repararlo, no obstante seguiré revisando con tiempo, mi gran problema es que estoy peleando con las cuentas contables porque le estoy metiendo algo de informes contables a mi aplicación (que por cierto ya se está haciendo interminable porque todos los días me pide algo nuevo). Y me estoy relacionando con el tema.

Soy tecnólogo mecánico, aunque he trabajo con un poco de electrónica; (hace años reparaba los equipos de cobros de pasajes del metro de caracas entre otras cosas)  y se de electricidad doméstica, automotriz e industrial,  me mentí también con programación y gracias a Dios y a personas como ustedes he logrado mucho, ahora estoy aprendiendo contabilidad y administración. Fui entre otras cosas Gerente de servicios de un concesionario y por eso estoy haciendo un sistema para gerentes de servicios. Pero, me quito el sombrero ante ustedes..jejejee..

Fernando. Por casualidad das clases en alguna universidad o algo así? Si no, ustedes deberían, esta información no se consigue en libros, y vaya que he buscado libros e incluso en internet. Y lo único parecido era el portal Fox, que gracias al sensei Luis Maria Guayan, (mis respetos para ese maestro), se recuperó mucho de ese portal.

Bueno, es viernes, disculpen el toque personal  y gracias.

Elides Paredes
Reply all
Reply to author
Forward
0 new messages