[Gambas-user] Paint.Begin(<object>) and printer.print

Benoît Minisini gambas at ...1...
Wed Jan 9 10:03:35 CET 2013


Le 09/01/2013 08:59, Rolf-Werner Eilert a écrit :
>
>
> Am 08.01.2013 22:46, schrieb Karl Reinl:
>> Salut,
>>
>> is that logical?
>> For Paint.Begin(<object>) I need a device object.
>> But if i start a printer with .print, Paint hijacks the printer as
>> device.
>> Had some day with blanc pages, while  setting Paint.Begin(<printer>) in
>> printer_Begin().
>> What worked when project is started as executable, but not when used as
>> library.
>>
>
> Salut Karl,
>
> This has caused me some headache before I finally understood that the
> printer thing now runs completely in its own event loop, but graphics do
> not.
>
> As far as I understand the mechanism, for graphics you still need to
> point to a device and Paint (or Draw) into it. So you have to define a
> Begin and End for it within your code. For printers, you simply set the
> defaults and then start the event loop by saying Printer.Start. The
> event loop will then touch the appropriate parts in the code by itself.
>
> This cleans up code, but it requires you to keep track of the page you
> are currently in so you can print each content. I'm still working on
> this one.
>
> The drawback is that you cannot simply re-use the same code parts for
> either printing OR painting into a preview window for example. I haven't
> solved this problem yet.
>
> But maybe I misunderstood your question completely, then simply ignore
> this :-)
>
> Rolf
>

I don't see the problem. Why don't you proceed the following way?

------------------------------------------------------------

' Real printing
' The printer object is stored in the prnPrint variable

Public Sub btnPrint_Click()

   prnPrint.Print

End

...

Public Sub prnPrint_Begin()

   ' Set the number of pages
   prnPrint.Count = ...

End

Public Sub prnPrint_Draw()

   ' Scale the preview so that you use the same coordinates for
   ' printing and drawing
   Paint.Scale(...)
   DrawPage(prnPrint.Page)

End

------------------------------------------------------------

' Preview
' Drawn inside a DrawingArea named dwgPreview.
' A SpinBox control named spnPage represents the current page to view.

Public Sub dwgPreview_Draw()

   ' Scale the preview so that you use the same coordinates for
   ' printing and drawing
   Paint.Scale(...)
   DrawPage(spnPage.Value)

End

------------------------------------------------------------

' The common drawing routine

Public Sub DrawPage(Page As Integer)

   Paint.DrawText("Hello world", 100, 100)
   ...

End

-- 
Benoît Minisini




More information about the User mailing list