Página 1 de 1

Imagen Valida

Publicado: Mar Jul 26, 2011 9:05 pm
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

Imagen Valida

Publicado: Mar Jul 26, 2011 10:09 pm
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

Imagen Valida

Publicado: Mié Jul 27, 2011 12:37 am
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

Imagen Valida

Publicado: Mié Jul 27, 2011 2:00 am
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

Imagen Valida

Publicado: Mié Jul 27, 2011 9:44 am
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

Imagen Valida

Publicado: Mié Jul 27, 2011 9:57 am
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

Imagen Valida

Publicado: Mié Jul 27, 2011 10:01 am
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

Imagen Valida

Publicado: Mié Jul 27, 2011 7:48 pm
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

Imagen Valida

Publicado: Mié Jul 27, 2011 8:22 pm
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

Imagen Valida

Publicado: Sab Jul 30, 2011 4:54 pm
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

Imagen Valida

Publicado: Lun Ago 01, 2011 8:55 am
por jlalin
Ramón,
> Gracias, funciono perfecto!!!!
> ya estan saliendo mis fact. elect. completas....
Ya pagarás unas cervezas :-D
Saludos,
José Lalí­n

Imagen Valida

Publicado: Lun Ago 01, 2011 2:46 pm
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