Page 2 of 3

PostPosted: Sun Dec 24, 2006 6:28 am
by Richard Chidiak
:D

Excellent , it works very nicely. Saving the say dc fixes definitely the problem.

Thank you Bill

Merry Christmas.

PostPosted: Sun Dec 24, 2006 7:20 am
by Richard Chidiak
Question to Antonio

nHdc := GetDC( oSig:hWnd )

Will the Dc be automatically released at the end of the function or do we have to releasedc() ?

Thanks for reply

I made some minor changes to Bill's sample, setting locals variables instead of public , quitting after signature, here is mine

#include "C:\FWPPC\INCLUDE\FWCE.ch"
#include "C:\FWPPC\INCLUDE\DLL.ch"

function Main()
local oMain, oSig, nHdc, ;
nOldX := -1, ;
nOldY := -1

DEFINE WINDOW oMain TITLE "Signature"

@40,5 SAY oSig PROMPT "" SIZE 230,150 PIXEL BORDER

@15, 5 BUTTON "Effacer" SIZE 50,20 PIXEL ACTION oSig:refresh(.t.)
@15,60 BUTTON "Sauver" SIZE 50,20 PIXEL ACTION ( oSig:saveToBmp( CurDir() + "\MySig.BMP" ), oSig:refresh(.t.), OMAIN:END() )

nHdc := GetDC( oSig:hWnd )

oSig:bLButtonUp := { |x,y,z| DoDraw( nHdc, y+1, x+1,@noldx,@noldy ), nOldX := -1, nOldY := -1 }
oSig:bMMoved := { |x,y,z| DoDraw( nHdc, y, x ,@noldx,@noldy) }
oSig:bLClicked := { |x,y,z| DoDraw( nHdc, y, x ,@noldx,@noldy) }

ACTIVATE WINDOW oMain

return nil

STATIC Function DoDraw( hDc, x, y, noldx, noldy )

If nOldX == -1 .And. nOldY == -1
nOldX := x
nOldY := y
MoveToEx( hDc, x, y )
Else
LineTo( hDc,x,y )
EndIf

RETURN Nil

DLL STATIC FUNCTION MoveToEx( hWnd AS HDC, nX AS _INT, nY AS _INT, NULL AS _INT ) AS BOOL PASCAL LIB "coredll.dll"

PostPosted: Sun Dec 24, 2006 9:18 am
by Enrico Maria Giordano
Richard Chidiak wrote:nHdc := GetDC( oSig:hWnd )

Will the Dc be automatically released at the end of the function or do we have to releasedc() ?


You have to release it.

EMG

PostPosted: Sun Dec 24, 2006 9:43 am
by Richard Chidiak
Enrico

Thank you

Richard

PostPosted: Sun Dec 24, 2006 10:07 am
by Antonio Linares
Bill,

You may use FWPPC built-in MoveTo() function instead of DLL FUNCTION MoveToEx(), this way you eliminate the call to an external DLL and your code will be faster:

MoveTo( hDC, nCol, nRow )

PostPosted: Sun Dec 24, 2006 10:09 am
by Antonio Linares
Richard,

ReleaseDC( oSig:hWnd, oSig:hDC )

PostPosted: Sun Dec 24, 2006 10:20 am
by Antonio Linares
Bill,

Yes, it works nicer and better using a SAY control, thanks! :-)

PostPosted: Sun Dec 24, 2006 10:25 am
by Richard Chidiak
This is the final test that works excellent. Thank you all for the help.

#include "C:\FWPPC\INCLUDE\FWCE.ch"
#include "C:\FWPPC\INCLUDE\DLL.ch"

function Main()

local oMain, oSig, nHdc, ;
nOldX := -1, ;
nOldY := -1

LOCAL DFILE := CURDIR() + "\MYSIGN.BMP"

DEFINE WINDOW oMain TITLE "Signature"

@40,5 SAY oSig PROMPT "" SIZE 230,150 PIXEL BORDER

@15, 5 BUTTON "Clear" SIZE 50,20 PIXEL ACTION oSig:refresh(.t.)
@15,60 BUTTON "Save" SIZE 50,20 PIXEL ACTION ( oSig:saveToBmp( DFIle ), oSig:refresh(.t.), ReleaseDC( oSig:hWnd, oSig:hDC ), OMAIN:END() )

nHdc := GetDC( oSig:hWnd )

oSig:bLButtonUp := { |x,y,z| DoDraw( nHdc, y+1, x+1,@noldx,@noldy ), nOldX := -1, nOldY := -1 }
oSig:bMMoved := { |x,y,z| DoDraw( nHdc, y, x ,@noldx,@noldy) }
oSig:bLClicked := { |x,y,z| DoDraw( nHdc, y, x ,@noldx,@noldy) }

ACTIVATE WINDOW oMain

return nil

STATIC Function DoDraw( hDc, x, y, noldx, noldy )

If nOldX == -1 .And. nOldY == -1
nOldX := x
nOldY := y
MoveTo( hDC, x, y )
Else
LineTo( hDc,x,y )
EndIf

RETURN Nil

PostPosted: Sun Dec 24, 2006 2:12 pm
by Bill Simmeth
Richard, very nice! Thanks for cleaning up my code. Antonio, thanks for the info on the built-in FW functions. I'm still learning the FW syntax and functions.

Also, Antonio thank you for the incredible tool that FWPPC is. It has enabled us to deploy a Mobile app in very short time!

Merry Christmas to all!

Monochrome bitmap

PostPosted: Fri Jul 18, 2008 9:08 am
by ChrisMillard
Thankyou Richard and Bill this code works very well.

The resulting BMP is 256 colours. I have a printer attached to my device and a DLL that will except the following.

PrintGraphic("MYSIG.BMP")

But you guessed it will only work if the BMP is 2 colours. Does anyone have a technique for converting the colour bit depth in FWPPC.

PostPosted: Fri Sep 12, 2008 4:58 pm
by Wolfgang Ciriack
Hi All, specally Maurizio,
i must send the signature over Cell phone to a Webserver, so the data must be as small as possible (max. 1k packages). So i like the idea of Maurizio, only to send the array data. I already have implemented this and get filesizes of 1200 to 1500 Byte, which i can split into 2 files.

Questions: Is there a better solution for packing the data ?

If not, can someone point me to how to rebuild the signature from the array data or have a sample code for this ?

PostPosted: Mon Sep 15, 2008 10:17 am
by Maurizio
Hello Wolfang

#include "report.ch"

Static Function PrintBmp(cFileBmp)
Local aDati := {}
Local oPrn,oPen,oFont
Local cTxt := ""
LOCAL nX
Local n1 := 0
Local n2 := 0
local nRow := 0, nCol := 0
Local nMaxRow := 0
Local nZoom := 2
IF file(cFileBmp)
cTxt := memoread(cFileBmp)
aDati := aRead(cTxt)
ELSE
Return FALSE
ENDIF

DEFINE PEN oPen WIDTH 3
PRINT oPrn NAME "Test" TO cStampante // "Comanda_1" // PREVIEW // TO "PDFCreator" //PREVIEW
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, -12 OF oPrn

PAGE
FOR nX := 2 TO len(aDAti) - 1
IF n1 > 0
IF aDati[nX,1] < 1000
oPrn:Line(nRow + aDAti[nX,1]*nZoom,aDati[nX,2]*nZoom,nRow + n2*nZoom,n1*nZoom,oPen )
IIF( nMaxRow < nRow + aDAti[nX,1]* nZoom , nMaxRow := nRow + aDAti[nX,1]*nZoom , )
ELSE
n1 := 0
n2 := 0
loop
ENDIF
ENDIF
n1 := aDAti[nX,2]
n2 := aDAti[nX,1]
NEXT

ENDPAGE
ENDPRINT
oFont:End()

Return TRUE



Regards MAurizio

PostPosted: Tue Sep 16, 2008 2:44 pm
by Wolfgang Ciriack
Hello Maurizio,
thank you very much, now i only must convert this to XBase++ :)

PostPosted: Wed Oct 08, 2008 3:52 pm
by reinaldocrespo
Would this piece of code work with fwh?


Reinaldo.

PostPosted: Thu Oct 09, 2008 7:40 am
by Antonio Linares
Reinaldo,

Yes, it should work fine with FWH :-)