SELECT PRINTER - SE ME QUEDA BLOQUEADO

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
SALINETAS24
Posts: 298
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Has thanked: 10 times
Been thanked: 16 times

SELECT PRINTER - SE ME QUEDA BLOQUEADO

Post by SALINETAS24 » Mon Mar 25, 2019 10:18 pm

Hola, estoy trabajando con el código de barras y desde el TOOLBAR tengo un boton que llama a esta función

Code: Select all

		BUTTON IMP_CODE ;
             	TOOLTIP "Imprime código de barras" ;
				PICTURE "barcode" ;
				ACTION (Play_Barcode(.T.), MSGBOX("ARRIBA"),Win_MaMP.BrowseDbf.Enabled:=.T.,         Win_MaMP.BrowseDbf.SETFOCUS )  ;
				SEPARATOR

Y esta seria la función en si misma. Esta sacada de un función de Claudio

Code: Select all

STATIC PROCEDURE Play_Barcode(lPr)
LOCAL hBitmap
LOCAL cCode          := WIN_MaMP.GET01.value
LOCAL cType          := "CODE128"
LOCAL lShowdigits    := .F.
Local  lSuccess
DEFAULT lPr:=.F.

	hBitmap := HMG_CreateBarCode ( cCode, cType , NIL, NIL, lShowdigits )
	BT_HMGSetImage ("WIN_MaMP", "Image_1", hBitmap)
	
	IF lPr
		BT_BitmapSaveFile( hBitmap, "BarCode128.BMP", BT_FILEFORMAT_BMP )
		SELECT PRINTER DIALOG TO lSuccess PREVIEW
		START PRINTDOC
			START PRINTPAGE
				@ 20,40 PRINT IMAGE "BarCode128.BMP" WIDTH 50 HEIGHT 50
			END PRINTPAGE
		END PRINTDOC
		MSGBOX("tERMINADO")
	ENDIF

RETURN	
El caso es que si entro y finalizo la opción todo funciona correcto, pero si entro y quiero cancelar pulsado la "X" de la ventana o la opción cancelar el programa se queda colgado.. no responde..
Si que me imprime ambos mensajes, pero es como si no tuviera ningún campo activo.

¿Que estoy haciendo mal...?

Muchas gracias y una cervecita fresquita....

edk
Posts: 439
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland
Has thanked: 127 times
Been thanked: 361 times

Post by edk » Tue Mar 26, 2019 8:01 am

Debes dar una condición para verificar si la impresora ha sido seleccionada. Por ejemplo:

Code: Select all

STATIC PROCEDURE Play_Barcode(lPr)
LOCAL hBitmap
LOCAL cCode          := WIN_MaMP.GET01.value
LOCAL cType          := "CODE128"
LOCAL lShowdigits    := .F.
Local  lSuccess
DEFAULT lPr:=.F.

	hBitmap := HMG_CreateBarCode ( cCode, cType , NIL, NIL, lShowdigits )
	BT_HMGSetImage ("WIN_MaMP", "Image_1", hBitmap)
	
	IF lPr
		BT_BitmapSaveFile( hBitmap, "BarCode128.BMP", BT_FILEFORMAT_BMP )
		SELECT PRINTER DIALOG TO lSuccess PREVIEW
		
		IF lSuccess
		
			START PRINTDOC
				START PRINTPAGE
					@ 20,40 PRINT IMAGE "BarCode128.BMP" WIDTH 50 HEIGHT 50
				END PRINTPAGE
			END PRINTDOC
			
		ELSE
		
			MSGBOX("tERMINADO")
			
		ENDIF
	ENDIF

RETURN	

Por cierto, puede imprimir el código de barras sin guardarlo primero en el disco como un archivo gráfico. Ver esta publicación: http://hmgforum.com/viewtopic.php?p=50480#p50480

User avatar
SALINETAS24
Posts: 298
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Has thanked: 10 times
Been thanked: 16 times

Post by SALINETAS24 » Tue Mar 26, 2019 8:20 am

Efectivamente... muchas gracias edk.
Es raro y deberia de sufrir el bloque siempre, pero cuando pruebas el ejemplo de Claudio, (esta copiado tal cual lo tengo yo) al no tener ninguna Base de Datos activa no sufre ningún bloqueo. El problema surge cuando se trabaja con base de datos.., es entonces cuando rompe.
Como tu dices., una simple condición.

Code: Select all

If lSuccess == .F.
	MsgInfo('Print Error')
	Return
EndIf
Agradecido.., vamos con esa cervecita.

Post Reply