In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Imagen Valida

Foro público de Xailer en español
Responder
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Imagen Valida

Mensaje por zeasoftware »

Como puedo saber si una imagen esta cargada para usarla con
TPicture():LoadFromFile( cFile ).
Explico:
Tengo un programa en el cual me mandan la imagen y la depositan en una
carpeta "imagenes" (por ejemplo), , pero en algunas impresiones esta imagen
sale, y en otras no, por lo que veo que requiero saber si ya la imagen ha
sido copiada pro completo en dicha carpeta, pero aun asi sigo teniendo ese
detalle.
puse igual:
Repeat
ProcessMessages()
Until ( file(AppData:DIR_CBB + Trim(::cFolioFiscal + ".jpg")) .And. ;
filesize(AppData:DIR_CBB + Trim(::cFolioFiscal + ".jpg")) >
20000 )
Esto por que las imagenes son de 24, 25 o 26 kb, pero..., siguen sin salir
en algunos casos.
Alguien puede dar alguna idea? todas son aceptadas, para probarlas.
Gracias de antemano.
Ramón Zea
Móvil.: 993-231.62.29
zeasoftware@hotmail.com
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Imagen Valida

Mensaje por jlalin »

Ramón,
si no recuerdo mal, las imágenes JPEG empiezan con "FFD8" y terminan con
"FFD9", así­ que para saber si el archivo está completo sólo necesitas
comprobar los dos últimos bytes.
REPEAT
ProcessMessages()
UNTIL IsValidJPEG( AppData:DIR_CBB + Trim(::cFolioFiscal + ".jpg" ) )
FUNCTION IsValidJPEG( cFilename )
LOCAL lOk := .F.
LOCAL cFile := Memoread( cFilename )
IF Asc( Right( cFile, 2 ) ) == 0xFF .AND. Asc( Right( cFile, 1 ) ) == 0xD9
lOk := .T.
ENDIF
RETURN lOk
Un apunte: yo no usarí­a ese bucle REPEAT...UNTIL, mejor pondrí­a un TTimer
cada x segundos y desde ahí­ harí­a la comprobación.
Saludos,
José Lalí­n
macgyber
Mensajes: 33
Registrado: Mié Jun 01, 2011 6:33 pm

Imagen Valida

Mensaje por macgyber »

El 26/07/2011 17:09, José Lalí­n escribió:
> Ramón,
>
> si no recuerdo mal, las imágenes JPEG empiezan con "FFD8" y terminan con
> "FFD9", así­ que para saber si el archivo está completo sólo necesitas
> comprobar los dos últimos bytes.
>
> REPEAT
> ProcessMessages()
> UNTIL IsValidJPEG( AppData:DIR_CBB + Trim(::cFolioFiscal + ".jpg" ) )
>
> FUNCTION IsValidJPEG( cFilename )
>
> LOCAL lOk := .F.
> LOCAL cFile := Memoread( cFilename )
>
> IF Asc( Right( cFile, 2 ) ) == 0xFF .AND. Asc( Right( cFile, 1 ) ) == 0xD9
> lOk := .T.
> ENDIF
>
> RETURN lOk
>
> Un apunte: yo no usarí­a ese bucle REPEAT...UNTIL, mejor pondrí­a un
> TTimer cada x segundos y desde ahí­ harí­a la comprobación.
>
> Saludos,
> José Lalí­n
>
una idea seria, suponiendo que quien pone la imagen es otro programa,
que grabara 2 archivos: foto.jpg y foto
la existencia del segundo indica que el primero ya se grabo por completo
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Imagen Valida

Mensaje por zeasoftware »

Gracias, sigue igual, el problema es que esos archivos los pone el PAC, por
lo de las fact. elect., si re-imprimo el comprobante si sale, pero ya pasado
unos minutos.
Sigo buscando...
Saludos.
Ramón Zea
Móvil.: 993-231.62.29
zeasoftware@hotmail.com
"José Lalí­n" escribió en el mensaje de
noticias:4e2f1eec$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Ramón,
si no recuerdo mal, las imágenes JPEG empiezan con "FFD8" y terminan con
"FFD9", así­ que para saber si el archivo está completo sólo necesitas
comprobar los dos últimos bytes.
REPEAT
ProcessMessages()
UNTIL IsValidJPEG( AppData:DIR_CBB + Trim(::cFolioFiscal + ".jpg" ) )
FUNCTION IsValidJPEG( cFilename )
LOCAL lOk := .F.
LOCAL cFile := Memoread( cFilename )
IF Asc( Right( cFile, 2 ) ) == 0xFF .AND. Asc( Right( cFile, 1 ) ) ==
0xD9
lOk := .T.
ENDIF
RETURN lOk
Un apunte: yo no usarí­a ese bucle REPEAT...UNTIL, mejor pondrí­a un TTimer
cada x segundos y desde ahí­ harí­a la comprobación.
Saludos,
José Lalí­n
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Imagen Valida

Mensaje por jlalin »

Ramón,
prueba así­:
REPEAT
ProcessMessages()
Sleep( 500 )
UNTIL IsFileLocked( AppData:DIR_CBB + Trim(::cFolioFiscal + ".jpg" ) )
IF IsValidJPeg( AppData:DIR_CBB + Trim(::cFolioFiscal + ".jpg" ) )
...
ENDIF
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
HB_FUNC( ISFILELOCKED )
{
HANDLE hFile = CreateFile( hb_parc( 1 ), GENERIC_WRITE, FILE_SHARE_READ
| FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0 );
hb_retl( hFile == INVALID_HANDLE_VALUE );
}
#pragma ENDDUMP
Saludos,
José Lalí­n
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Imagen Valida

Mensaje por jlalin »

Ramón,
hay un bug en la función. Usa esta:
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
HB_FUNC( ISFILELOCKED )
{
HANDLE hFile = CreateFile( hb_parc( 1 ), GENERIC_WRITE, FILE_SHARE_READ
| FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0 );
if( hFile != INVALID_HANDLE_VALUE )
CloseHandle( hFile );
hb_retl( hFile == INVALID_HANDLE_VALUE );
}
#pragma ENDDUMP
Saludos,
José Lalí­n
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Imagen Valida

Mensaje por jlalin »

Ramón,
acabo de recordar que tenemos la vieja FOpen():
#include "fileio.ch"
FUNCTION IsFileLocked( cFilename )
LOCAL hFile := FOpen( cFilename, FO_EXCLUSIVE )
LOCAL lLocked := ( FError() == 0 )
IF hFile > 0
FClose( hFile )
ENDIF
RETURN lLocked
Saludos,
José Lalí­n
Avatar de Usuario
xhermita
Mensajes: 177
Registrado: Vie Feb 18, 2011 10:05 pm
Ubicación: Las Palmas de Gran Canaria
Contactar:

Imagen Valida

Mensaje por xhermita »

De donde sale la REPEAT / UNTIL, la he buscado en xharbour y clipper y
no he dado con ella, y la verdad es que la habí­a echado de menos un par
de veces, por que con el DO WHILE no siempre puedes estructurar bien el
código.
Es solo por curiosidad, por si deberí­a leer algo mas sobre xbase para
que no se me queden cosas como esta atrás.
Un Saludo
Pedro Amaro
Pedro Amaro
2PC Service

Xailer / Néfele / MySQL-MariaDB / SQLServer
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Imagen Valida

Mensaje por zeasoftware »

Es un comando hecho a mano, te paso los comandos:
#command Repeat => While ( .T. )
#command Until <expr> => If ( <expr> ) ;
; Exit ;
; End ;
; End
Saludos. estamos para apoyarnos....
Ramón Zea
Móvil.: 993-231.62.29
zeasoftware@hotmail.com
"Pedro Amaro" escribió en el mensaje de
noticias:4e30500a$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
De donde sale la REPEAT / UNTIL, la he buscado en xharbour y clipper y
no he dado con ella, y la verdad es que la habí­a echado de menos un par
de veces, por que con el DO WHILE no siempre puedes estructurar bien el
código.
Es solo por curiosidad, por si deberí­a leer algo mas sobre xbase para
que no se me queden cosas como esta atrás.
Un Saludo
Pedro Amaro
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Imagen Valida

Mensaje por zeasoftware »

Gracias, funciono perfecto!!!!
ya estan saliendo mis fact. elect. completas....
Ramón Zea
Móvil.: 993-231.62.29
zeasoftware@hotmail.com
"José Lalí­n" escribió en el mensaje de
noticias:4e2fc5e5$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Ramón,
acabo de recordar que tenemos la vieja FOpen():
#include "fileio.ch"
FUNCTION IsFileLocked( cFilename )
LOCAL hFile := FOpen( cFilename, FO_EXCLUSIVE )
LOCAL lLocked := ( FError() == 0 )
IF hFile > 0
FClose( hFile )
ENDIF
RETURN lLocked
Saludos,
José Lalí­n
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Imagen Valida

Mensaje por jlalin »

Ramón,
> Gracias, funciono perfecto!!!!
> ya estan saliendo mis fact. elect. completas....
Ya pagarás unas cervezas :-D
Saludos,
José Lalí­n
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Imagen Valida

Mensaje por zeasoftware »

jajjaja
Salud!!
Ramón Zea
Móvil.: 993-231.62.29
zeasoftware@hotmail.com
"José Lalí­n" escribió en el mensaje de
noticias:4e364dc9$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Ramón,
> Gracias, funciono perfecto!!!!
> ya estan saliendo mis fact. elect. completas....
Ya pagarás unas cervezas :-D
Saludos,
José Lalí­n
Responder