FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Printer metafile
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Printer metafile
Posted: Thu Nov 29, 2007 11:23 AM

I need a one to one copy.
Is it possible to print from one preview a original and a copy and to mark the copy with a watermark or a text as copy I mean can you add text or graphics to the metafile.

For example:
I print an invoice the preview remains on the screen. Then the
invoice get paid. On the copy I would like to have the way how it is paid (cash, Card, …).
But I wouldn’t like to recreate the metafile I would like to add this to the original so that I am sure it is the same.

Regards,
Otto

Posts: 3107
Joined: Fri Oct 07, 2005 06:28 PM
Printer metafile
Posted: Thu Nov 29, 2007 11:27 AM

yes you must load a bitmaps on the metafile
there is an sample on \sample\reports

Best Regards, Saludos



Falconi Silvio
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Printer metafile
Posted: Thu Nov 29, 2007 11:28 AM

Thanks Silvio could you tell me which one.

Posts: 3107
Joined: Fri Oct 07, 2005 06:28 PM
Printer metafile
Posted: Thu Nov 29, 2007 11:37 AM
ACTIVATE REPORT oReport ON STARTGROUP oReport:NewLine() ;
ON STARTPAGE StartPage()

STATIC Function StartPage()

oReport:Box(0.1, ;
0.1, ;
oReport:PhyHeight()-0.1, ;
oReport:PhyWidth() -0.1 )

oReport:Line(0.9, 0.55, 2, 0.55, 2 )
oReport:Line(0.55, 0.9, 0.55, 2, 2 )
oReport:SayBitmap(3,2,"CONFIDEN.BMP",4,4)

RETURN NIL


you must create this CONFIDEN.BMP gray effect and rotate it
and you can create the effect watermark
Best Regards, Saludos



Falconi Silvio
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Printer metafile
Posted: Thu Nov 29, 2007 12:46 PM

Thank you, Silvio. But this way you have the bmp on the original and on the copy.
What I would like is only on the copy.
Regards,
Otto

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Printer metafile
Posted: Thu Nov 29, 2007 01:40 PM

Otto,

You could paint the watermark and before ending the page, print the metafile on top of it. I haven't tried it myself, but maybe it works

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Printer metafile
Posted: Thu Nov 29, 2007 03:22 PM

Hello Antonio,

I found this description on google.

But I think this is by fare to complicated.

What I saw by searching our forum (http://fivetechsoft.com/forums/viewtopi ... t=metafile)is a thread where you show the import and export to clipboard from metafiles.
Do you think one could export a metafile to clipboard and then save as bmp to memory add a transparent bmp – but how? - and re-import the bmp
to clipboard and then back to metafile.

Regards,
Otto

Windows GDI
Editing an Enhanced Metafile
To edit a picture stored in an enhanced metafile, an application must perform the tasks described in the following procedure.
To edit a picture stored in an enhanced metafile
1. Use hit-testing to capture the cursor coordinates and retrieve the position of the object (line, arc, rectangle, ellipse, polygon, or irregular shape) that the user wants to alter.
2. Convert these coordinates to logical (or world) units.
3. Call the EnumEnhMetaFile function and examine each metafile record.
4. Determine whether a given record corresponds to a GDI drawing function.
5. If it does, determine whether the coordinates stored in the record correspond to the line, arc, ellipse, or other graphics element that intersects the coordinates specified by the user.
6. Upon finding the record that corresponds to the output that the user wants to alter, erase the object on the screen that corresponds to the original record.
7. Delete the corresponding record from the metafile, saving a pointer to its location.
8. Permit the user to redraw or replace the object.
9. Convert the GDI functions used to draw the new object into one or more enhanced-metafile records.
10. Store these records in the enhanced metafile.

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Printer metafile
Posted: Thu Nov 29, 2007 04:15 PM

Otto,

The modification of a metafile file is very complicated task thats why we should avoid that way.

If you review Class TMetaFile Method Paint() you will see a call to PlayEnhMetaFile( ::hDC, ::hMeta, ::hWnd, .f. ). You could paint the bitmap on the ::hDC just after that function call:

PlayEnhMetaFile( ::hDC, ::hMeta, ::hWnd, .f. )
Eval( ::Cargo, ::hDC, Self ) // Use cargo or add a new DATA to the class

where ::Cargo may contain:
{ | hDC | If( lWaterMark, PalBmpDraw( hDC, nRow, nCol, oBitmap:hBitmap, oBitmap:hPalette, nWidth, nHeight ),) }

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Printer metafile
Posted: Thu Nov 29, 2007 04:30 PM

Otto,

The same way you could search for PlayEnhMetaFile() call in source\classes\rpreview.prg and place an optional call there to paint the bitmap after that function call

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Printer metafile
Posted: Thu Nov 29, 2007 06:22 PM
Thank you, Antonio. All works perfectly.
Here you see the preview= original and the CC made from 1 metafile.


[/img]
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Printer metafile
Posted: Thu Nov 29, 2007 07:24 PM

Otto,

Excellent :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Printer metafile
Posted: Thu Nov 29, 2007 08:01 PM

Antonio, what would be the syntax to send text
oPrn? but how with hDC?
Thanks in advance
Otto

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Printer metafile
Posted: Thu Nov 29, 2007 08:55 PM

Otto,

oPrn:Say( nRow, nCol, cText, oFont, nWidth, nClrText, nBkMode, nPad )

There is also a method CmSay() and InchSay()

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Printer metafile
Posted: Thu Nov 29, 2007 10:13 PM

Thank you. If I use printer-class it does not work.
What I find out is that printer-class uses GetPrintDC( GetActiveWindow()...
but the function TextOut works.

TextOut( oDevice:hDC, 100, 100,"Does work , horizontal printing" )

Now I can do what I wanted - the real CC.

Continue the discussion