FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Rectangular Data Matrix barcode
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Rectangular Data Matrix barcode
Posted: Thu Aug 17, 2017 03:07 PM

Somebody knows how to print rectangular Data Matrix barcode? I tried with hbzebra and it works for square Data Matrix code. I don't understand how to get rectangular code without stretching the code itself.

EMG

Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: Rectangular Data Matrix barcode
Posted: Thu Aug 17, 2017 04:39 PM
perhaps


with barlib we can make the 1D barcodes

with hzebra we can make 2D barcodes ( i think this lib also on working)

Why we cannot make a lib with all barcodes ?

for a sample I made also circular barcodes for dvd shop

I think Mastintin can help you
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 512
Joined: Mon Oct 17, 2005 10:38 AM
Re: Rectangular Data Matrix barcode
Posted: Thu Aug 17, 2017 07:11 PM
Enrico, you can try this. Works perfectly.
With the standard libraries you can't make the data matrix barcode rectangular.
https://www.barcodetools.com/datamatrix/datamatrix-activex/introduction.html
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Rectangular Data Matrix barcode
Posted: Thu Aug 17, 2017 07:28 PM

Thank you, but I'm searching for something simpler and possibly free.

EMG

Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Rectangular Data Matrix barcode
Posted: Fri Aug 18, 2017 01:38 PM
Found! This is a working sample:

Code (fw): Select all Collapse
#include "Fivewin.ch"


#define HB_ZEBRA_FLAG_DATAMATRIX_RECTANGLE 0x0200


FUNCTION MAIN()

    LOCAL oPrn

    PRINT oPrn PREVIEW
        PAGE
            DATAMATRIX( oPrn, "12345678901234567890123456789012345678901234567890", 1000, 1000, HB_ZEBRA_FLAG_DATAMATRIX_RECTANGLE )
        ENDPAGE
    ENDPRINT

    RETURN NIL


FUNCTION DATAMATRIX( oPrn, cCod, nWidth, nHeight, nFlags )

    LOCAL hDCDesk := GETDC( GETDESKTOPWINDOW() )

    LOCAL hDCMem := CREATECOMPATIBLEDC( hDCDesk )

    LOCAL hBrush := CREATESOLIDBRUSH( 0 )
    LOCAL hBack  := CREATESOLIDBRUSH( CLR_WHITE )

    LOCAL hBmp := CREATECOMPATIBLEBITMAP( hDCDesk, nWidth, nHeight )

    LOCAL hBmpOld := SELECTOBJECT( hDCMem, hBmp )   

    LOCAL hZebra := HB_ZEBRA_CREATE_DATAMATRIX( cCod, nFlags )

    LOCAL hDib

    FILLRECT( hDCMem, { 0, 0, nHeight, nWidth }, hBack )

    HB_ZEBRA_DRAW( hZebra, { | x, y, w, h | FillRect( hDCMem, { y, x, y +  h, x + w }, hBrush ) }, 0, 0, 20, 20 )

    hDib = DIBFROMBITMAP( hBmp )

    DIBDRAW( oPrn:hDCOut, hDib, , 500, 500 )

    GLOBALFREE( hDib )

    SELECTOBJECT( hDCMem, hBmpOld )

    DELETEOBJECT( hBrush )
    DELETEOBJECT( hBack )

    HB_ZEBRA_DESTROY( hZebra )

    DELETEOBJECT( hBmp )

    DELETEDC( hDCMem )

    RELEASEDC( GETDESKTOPWINDOW(), hDCDesk )

    RETURN NIL


EMG
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Rectangular Data Matrix barcode
Posted: Fri Aug 18, 2017 02:10 PM
Good morning Enrico.

Why does not this work?

Thank you.

Code (fw): Select all Collapse
#include "Fivewin.ch"

#define HB_ZEBRA_FLAG_DATAMATRIX_RECTANGLE 0x0200

FUNCTION MAIN()

    LOCAL oPrn, cText

    // Original by Enrico,
    // cText := "12345678901234567890123456789012345678901234567890"
    // cText := MemoRead( ".\QRCODE.TXT" )

    // Asi, no funciona.
    cText := "35141146377222003730599000004630001158179941|20141105134922|10.00|61694805808|m+4o8FY1lig1zcy6VU3t7INVwE6kiA/ykLXKDFZfb9gu0g4wl3Fk2HYaRhSt8G+yk9mP/R65m3R7V2IO8CxnmO1oVtlamB6UKA+UZZqDNEqtYlhQzLySNzMG0thaNMZsq5RxmQ3eQLPw8LLez3MqWvUveFXNSSq6AGEX2+KOdavteo3K2L06SQoVIjwkmcgRzqhfHP3y8t2wfr1nw/WAnaCF9ZY/K4dTykk3hsXcan/MKCTBlcSOhNgSh3sdsQHpl2w2tmbLBsYBLFkuvKlwzHarNJQ1RfRznGdojHglQH1KVtbAUXKke54pdRt3JL7nJlR+Lbmtd2tjcT2vRyTepw=="

    PRINT oPrn PREVIEW MODAL
        PAGE
            DATAMATRIX( oPrn, cText, 1000, 1000, HB_ZEBRA_FLAG_DATAMATRIX_RECTANGLE )
        ENDPAGE
    ENDPRINT

RETURN NIL


FUNCTION DATAMATRIX( oPrn, cCod, nWidth, nHeight, nFlags )

    LOCAL hDCDesk := GETDC( GETDESKTOPWINDOW() )

    LOCAL hDCMem := CREATECOMPATIBLEDC( hDCDesk )

    LOCAL hBrush := CREATESOLIDBRUSH( 0 )
    LOCAL hBack  := CREATESOLIDBRUSH( CLR_WHITE )

    LOCAL hBmp := CREATECOMPATIBLEBITMAP( hDCDesk, nWidth, nHeight )

    LOCAL hBmpOld := SELECTOBJECT( hDCMem, hBmp )   

    LOCAL hZebra := HB_ZEBRA_CREATE_DATAMATRIX( cCod, nFlags )

    LOCAL hDib

    FILLRECT( hDCMem, { 0, 0, nHeight, nWidth }, hBack )

    HB_ZEBRA_DRAW( hZebra, { | x, y, w, h | FillRect( hDCMem, { y, x, y +  h, x + w }, hBrush ) }, 0, 0, 20, 20 )

    hDib = DIBFROMBITMAP( hBmp )

    DIBDRAW( oPrn:hDCOut, hDib, , 500, 500 )

    GLOBALFREE( hDib )

    SELECTOBJECT( hDCMem, hBmpOld )

    DELETEOBJECT( hBrush )
    DELETEOBJECT( hBack )

    HB_ZEBRA_DESTROY( hZebra )

    DELETEOBJECT( hBmp )

    DELETEDC( hDCMem )

    RELEASEDC( GETDESKTOPWINDOW(), hDCDesk )

RETURN NIL


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Rectangular Data Matrix barcode
Posted: Fri Aug 18, 2017 02:15 PM

Probably the code is too long.

EMG

Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Rectangular Data Matrix barcode
Posted: Fri Aug 18, 2017 02:17 PM
It does work this way:

Code (fw): Select all Collapse
DATAMATRIX( oPrn, cText, 1000, 1000, 0 )


EMG
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Rectangular Data Matrix barcode
Posted: Fri Aug 18, 2017 02:24 PM
Great Enrico. You are fantastic. Thank you very much.



Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: Rectangular Data Matrix barcode
Posted: Fri Aug 18, 2017 05:30 PM
why here I see it ?

Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: Rectangular Data Matrix barcode
Posted: Fri Aug 18, 2017 05:34 PM

on ctext what we can insert ?
for a sample for a catalog product ?

Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Rectangular Data Matrix barcode
Posted: Sat Aug 19, 2017 09:54 AM
Simplified and added more parameters:

Code (fw): Select all Collapse
#include "Fivewin.ch"


#define HB_ZEBRA_FLAG_DATAMATRIX_RECTANGLE 0x0200


FUNCTION MAIN()

    LOCAL oPrn

    PRINT oPrn PREVIEW
        PAGE
            DATAMATRIX( oPrn,  500, 500, "12345678901234567890123456789012345678901234567890", 1000, 1000, HB_ZEBRA_FLAG_DATAMATRIX_RECTANGLE )
            DATAMATRIX( oPrn, 1000, 500, "12345678901234567890123456789012345678901234567890", 1000, 1000, HB_ZEBRA_FLAG_DATAMATRIX_RECTANGLE )
            DATAMATRIX( oPrn, 1500, 500, "18201106000006117254120000195947121000000010003896", 1000, 1000, HB_ZEBRA_FLAG_DATAMATRIX_RECTANGLE )
        ENDPAGE
    ENDPRINT

    RETURN NIL


FUNCTION DATAMATRIX( oPrn, nRow, nCol, cCode, nWidth, nHeight, nFlags, nCodeWidth, nCodeHeight )

    LOCAL hDCMem := CREATECOMPATIBLEDC( oPrn:hDC )

    LOCAL hBBrush := CREATESOLIDBRUSH( CLR_BLACK )
    LOCAL hWBrush := CREATESOLIDBRUSH( CLR_WHITE )

    LOCAL hBmp := CREATECOMPATIBLEBITMAP( oPrn:hDC, nWidth, nHeight )

    LOCAL hBmpOld := SELECTOBJECT( hDCMem, hBmp )   

    LOCAL hZebra := HB_ZEBRA_CREATE_DATAMATRIX( cCode, nFlags )

    LOCAL hDib

    DEFAULT nCodeWidth  := 10
    DEFAULT nCodeHeight := 10

    FILLRECT( hDCMem, { 0, 0, nHeight, nWidth }, hWBrush )

    HB_ZEBRA_DRAW( hZebra, { | x, y, w, h | FillRect( hDCMem, { y, x, y +  h, x + w }, hBBrush ) }, 0, 0, nCodeWidth, nCodeHeight )

    HB_ZEBRA_DESTROY( hZebra )

    SELECTOBJECT( hDCMem, hBmpOld )

    hDib = DIBFROMBITMAP( hBmp )

    DIBDRAW( oPrn:hDCOut, hDib, , nRow, nCol )

    GLOBALFREE( hDib )

    DELETEOBJECT( hBmp )

    DELETEOBJECT( hBBrush )
    DELETEOBJECT( hWBrush )

    DELETEDC( hDCMem )

    RETURN NIL


EMG

Continue the discussion