Save screen no funciona

314 views
Skip to first unread message

Esteban Perez

unread,
Jun 22, 2013, 9:03:44 AM6/22/13
to publice...@googlegroups.com
Hola. este es mi primer post en el grupo.
Les cuento lo que estoy intentando hacer y las dificultades que tengo a ver si alguien me puede ayudar..

Estoy trabajando con VFP 8

lo que necesito hacer es ir guardando pantallas en una tabla de una base sql
La grabacion de las pantallas pretendo que se hagan con un timer, y en forma automática, es decir que quiero definir el timer en el ingreso al ejecutable que voy a hacer y que luego el sistema me vaya grabando cada n minutos la pantalla del operador que está ejecutando.
Una especie de LOG que se registraria periodicamente pero en vez de grabar las acciones, registraria la pantalla que el operador tiene en funcionamiento en el sistema.

intenté hacerlo con save screen to xx
y luego grabar dicha variable (no se como) en la tabla sql

pero aparentemente el save screen no funciona mas. Lo que hace es grabar en una variable que retorna como type una "S" (supongo que de screen), pero no se como manipular dicha variable. además sospecho que el save screen no está correcto ya que si quiero hacer un rest screen from xx me devuelve un error de variable inexistente


cabe aclarar que el save screen sin parametro de variable y combinado con el rest screen: SI funciona.  pero no me parece que asi pueda encontrar la solucion a mi planteo.

tambien he visto el trabajo de un ruso.. esta con el nombre de gpImage, pero se me complica ver como tratar la informacion ya que él sugiere que si se quiere campurar la ventana activa: debe hacerse desde la misma pantalla y yo no quiero eso sino que con un solo comando genérico poder hacer una especie de printscreen y guardarlo en una tabla SQL

Espero haber sido claro y no demasiado extenso!

gracias por los aportes que puedan hacerme! le buscado tambien por el lado de GDIPlus,. pero no sé como utilizarlo y no estoy seguro que haya una librería activa para VFP8

saludos a todos. y perdon por la extension.

Carlos Miguel FARIAS

unread,
Jun 22, 2013, 9:32:22 AM6/22/13
to Grupo Fox

Esteban Perez

unread,
Jun 22, 2013, 11:22:12 AM6/22/13
to publicesvfoxpro
Carlos.. muchas gracias..
justamente esos 3 links (y muchos otros mas) son los que visité antes de decidirme a preguntarles a mis colegas si tenían alguna manera de ayudarme, y si tenian experiencia en el problema planteado...

no suelo escribir o molestar a los demás sin haberme tomado el trabajo de invertir.. digamos.. unas 8 o 9 horas, en el problema, que es lo que debo tener invertido por ahora

gracias igual.

Fernando D. Bozzo

unread,
Jun 22, 2013, 12:01:16 PM6/22/13
to publice...@googlegroups.com
Hola Esteban, por lo que comentaste me picó la curiosidad de si esos comandos realmente seguían funcionando, ya que no los uso desde FoxBase :) y me encontré con la grata sorpresa de que sí, y de paso me recordaste algunos buenos momentos de cuando comencé a investigar eso.

Te comento lo que hice paso a paso para que hagas la misma prueba:

1) Desde la ventana de comandos ejecutá algún form sencillo con algunos controles dentro (DO FORM xxx)
2) Luego, sin cerrar el form, hacé un click en la ventana de comandos y poné este comando:

SAVE SCREEN TO mipantalla
SAVE TO archivo_de_memoria
&& ==> También se puede guardar en un campo memo de tabla. Ver ayuda.

3) Luego cerrá la sesión de Fox y reabrila, o abrí una nueva en el mismo directorio
4) Restaurá las variables guardadas y la pantalla para que la muestre en la ventana principal de Fox:

RESTORE FROM archivo_de_memoria
RESTORE SCREEN FROM mipantalla

¡Voilá! Te tiene que mostrar la captura del form.

Comentame si ahora te funciona :)

Edgar Acevedo

unread,
Jun 22, 2013, 12:33:58 PM6/22/13
to publice...@googlegroups.com
Me parece que Esteban sí alcanza a grabar el "pantallazo" en una variable tipo S.  El problema es que no tiene como guardar ese tipo de variable en una tabla.

Yo pensé hacerlo de esta forma pero NO ME FUNCIONÓ (aún así lo escribo por si alguien tiene una idea al respecto).
1- Guardar la variable tipo en un archivo tipo MEM  (usando el SAVE TO  archivo.mem ALL LIKE variable)
2- Convertir el archivo tipo MEM creado en un STRING (usando el FILETOSTR())
3- Ya una vez convertido lo anterior en una variable tipo C, manipularla como cualquier otra variable tipo Character.

Pero falló en la primera línea arriba indicada....   El comando SAVE TO "aparantemente" guarda la variable tipo S en el archivo indicado pero "naranjas" (o sea NO).  Ya que al intentar recuperar la variable con el RESTORE FROM, la misma "aparentemente" se recupera pero al hacer un RESTORE SCREEN FROM variable, la pantalla deseada ya no se muestra.

Pensé en utilizar un programa de captura de pantalla externo (desde la línea de comando) como el CmdCapture, pero el problema es que éste captura TODA la pantalla y no solo la venta de la aplicación de Fox.

La cosa es:  Si tan solo hubiera alguna forma de manipular la variable tipo S y convertirla en algo "guardable" en una tabla...

Salu2,


Edgar Acevedo

Fernando D. Bozzo

unread,
Jun 22, 2013, 2:39:47 PM6/22/13
to publice...@googlegroups.com
Hola Edgar, en la ayuda del comando SAVE TO dice que se puede guardar a un campo memo, por eso puse de comentario "ver ayuda".


Saludos.-

ZeRoberto

unread,
Jun 23, 2013, 9:20:26 PM6/23/13
to publicesvfoxpro
Hubiera sido mejor que el SAVE SCREEN grabe la pantalla en formato BMP o JPG

SAVE SCREEN TO Pantalla.Jpg

Edgar Acevedo

unread,
Jun 24, 2013, 2:33:08 AM6/24/13
to publice...@googlegroups.com
Cierto, hubiera sido una maravilla que lo hubieran hecho de esa forma...
Pero a falta de ello creo que podría usar el ScreenShotCmd.Exe:  http://code.google.com/p/screenshot-cmd/

Fer

unread,
Jun 24, 2013, 3:57:01 AM6/24/13
to publice...@googlegroups.com

Hola Edgar, ¿y cuál sería el problema de usar save screen? Te evitarías depender de librerías externas que pueden darte problemas en distintas máquinas.
Además el restore screen seguro que puede enviarse a un form de salida, que haría de visualizador

Edgar Acevedo

unread,
Jun 24, 2013, 8:56:37 AM6/24/13
to publice...@googlegroups.com
Hola Fer:
El problema sería en cómo guardar en un archivo dicha captura de pantalla para un uso posterior.  En el momento, si te funciona perfecto porque lo guarda en una variable tipo "S".  Probé usar el SAVE TO  archivo.mem para guardar esa variable tipo "S" y aparentemente la guarda, pero cuando hice un RESTORE FROM archivo.mem para volver a cargar la variable tipo "S" en la memoria, allí fue el problema...

Fernando D. Bozzo

unread,
Jun 24, 2013, 1:23:11 PM6/24/13
to publice...@googlegroups.com
Edgar, la prueba que te puse yo la hice paso a paso y funciona. ¿Lo probaste como te puse exactamente, cerrando la sesión de Fox o abriendo una nueva? A mí me restauró la variable y me mostró la pantalla en la ventana principal.

Incluso te deja guardar la variable en una tabla!

Edgar Acevedo

unread,
Jun 24, 2013, 1:32:39 PM6/24/13
to publice...@googlegroups.com
Fernando, lo hice como lo mencionas y no me funcionó.  No me explico que estaré haciendo mal, si no fuera mucha flojera  o torpeza de mi parte ¿podrías mostrarme tu código de prueba?


Fernando D. Bozzo

unread,
Jun 24, 2013, 1:56:30 PM6/24/13
to publice...@googlegroups.com
El código lo puse el principio de todo, donde te puse el paso a paso desde la ventana de comandos. Lo único que no puse fue el form con 4 controles que hice para la prueba, pero fue todo desde la ventana de comandos con FoxPro 9 SP2.

Hacé una cosa, volvé a repetir los pasos tal cual los puse, comentame qué paso no te funciona y adjuntame el archivo .mem que te generó, así intento recuperarlo yo, que debería verlo bien.

Intenté adjuntarte mi archivo de memoria, pero por algún motivo el  #&%@&  Google no deja subirlo.

Fernando D. Bozzo

unread,
Jun 24, 2013, 2:10:02 PM6/24/13
to publice...@googlegroups.com
Dejo el link a mi Google Drive para que se bajen el archivo y puedan probar.

https://docs.google.com/file/d/0B_qHXcWqGDY-YWpVTFBqOW5uVk0/edit?usp=sharing

Una vez descargado y descomprimido usar desde la ventana de comandos:

RESTORE FROM pp
RESTORE SCREEN FROM aa

Comentame si te muestra el form de ejemplo que usé.

Claudio Luna

unread,
Jun 24, 2013, 2:15:08 PM6/24/13
to Comunidad de Visual Foxpro en Español
Edgar,
Te comento que por curiosidad probé lo que te indica Fernando y funciona a la perfección
Un saludo
--
Claudio Luna
Monttevideo - Uruguay
SKYPE: clunamarin

Luis Maria Guayan

unread,
Jun 24, 2013, 2:35:59 PM6/24/13
to publice...@googlegroups.com
Este código es lo mas sencillo para capturar la imagen del formulario con la clase GdiPlusX

Do System.App
local loBmp as xfcBitmap
With _Screen.System.Drawing
  loBmp = .Bitmap.FromScreen(Thisform)
  loBmp.Save("C:\ImagenCapturada.Png", .Imaging.ImageFormat.Png)
EndWith


La última versión de GDIPlusX la puedes descargar de http://vfpx.codeplex.com/wikipage?title=GDIPlusX


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Reply all
Reply to author
Forward
0 new messages