Excellent , it works very nicely. Saving the say dc fixes definitely the problem.
Thank you Bill
Merry Christmas.
![]()
Excellent , it works very nicely. Saving the say dc fixes definitely the problem.
Thank you Bill
Merry Christmas.
![]()
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
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"
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() ?
Enrico
Thank you
Richard
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 )
Richard,
ReleaseDC( oSig:hWnd, oSig:hDC )
Bill,
Yes, it works nicer and better using a SAY control, thanks! ![]()
This is the final test that works excellent. Thank you all for the help.
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
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!
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.
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 ?
Hello Wolfang
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 + n2nZoom,n1nZoom,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
Hello Maurizio,
thank you very much, now i only must convert this to XBase++ ![]()
Would this piece of code work with fwh?
Reinaldo.
Reinaldo,
Yes, it should work fine with FWH ![]()