[Gambas-user] Yet another simple printing question !

Vasilis Kanatas vkanatas13 at ...626...
Thu Mar 20 22:55:56 CET 2014


Thanks Rolf-Werner,

I tried
Private $hImage As New Image
and had the same result ! Printing white page!

What I want is to print the labels of a form or ScrollArea!!

I also tried to change the *Printing Example of Gambas 3* to make it work
for my issue. Here's what I did (3 steps):

1......I've changed Form_load as following to Grab the contents of
srcImage.ScrollArea:

Public Sub Form_Open()

  Me.Center

  txtText.Text = File.Load("molly-malone.txt")
  txtFontText.Text = Font["17"].ToString()
  Try $hImage = scrImage.Grab
 ' $hImage = New Image(scrImage.Width, scrImage.Height)

  'scrImage.ResizeContents($hImage.W, $hImage.H)
  'scrImage.Refresh

End

2.......Inside the scrImage.ScrollArea I placed some labels, ie
Label1.label, Label2.label etc.

3.......I commented out the load picture (because the main purpose is to
print the context,ie the Labels that I placed inside, of
srcImage.ScrollArea) as following:

Public Sub btnOpenImage_Click()

 ' Dialog.Title = "Select an image file"
 ' Dialog.Filter = ["*.png;*.jpg;*.jpeg;*.gif;*.xpm", "Image files"]
 ' If Dialog.OpenFile() Then Return

  Try $hImage = Image.Load(Dialog.Path)
  scrImage.ResizeContents($hImage.W, $hImage.H)
  scrImage.Refresh

End

But still got blanc page printed.
(The printing example works fine in its initial form)
Attached is the Changed Code


On Thu, Mar 20, 2014 at 7:27 PM, Rolf-Werner Eilert <
eilert-sprachen at ...221...> wrote:

> Vasilis,
>
> I've got to leave the office now, but at a quick glance:
>
> > Private $hImage As Image
>
> Shouldn't this be As New Image?
>
> >
> >
> > Public Sub Form_Open()
> >      Me.Center
> >      Try $hImage = Me.Grab.Image
> > End
> >
> > Public Sub Printer1_Draw()
> >
> >    Dim hImage As Image
>
> And maybe the same here?
>
> Regards
> Rolf
>
> >
> >    If Not $hImage Then Return
> >    hImage = $hImage
> >    Paint.DrawImage(hImage)
> >
> > End
> >
> > Public Sub PrintButton_Click()
> >
> >    If Printer1.Configure() Then Return
> >
> >    Me.Enabled = False
> >    Inc Application.Busy
> >    Printer1.Print
> >    Dec Application.Busy
> >    Me.Enabled = True
> >
> > End
> > --------------------------------------------------------------------
> >
> > Thank you!
> > Vasilis
> >
> ------------------------------------------------------------------------------
> > Learn Graph Databases - Download FREE O'Reilly Book
> > "Graph Databases" is the definitive new guide to graph databases and
> their
> > applications. Written by three acclaimed leaders in the field,
> > this first edition is now available. Download your free book today!
> > http://p.sf.net/sfu/13534_NeoTech
> > _______________________________________________
> > Gambas-user mailing list
> > Gambas-user at lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/gambas-user
> >
>
>
> ------------------------------------------------------------------------------
> Learn Graph Databases - Download FREE O'Reilly Book
> "Graph Databases" is the definitive new guide to graph databases and their
> applications. Written by three acclaimed leaders in the field,
> this first edition is now available. Download your free book today!
> http://p.sf.net/sfu/13534_NeoTech
> _______________________________________________
> Gambas-user mailing list
> Gambas-user at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user
>
-------------- next part --------------
' Gambas class file

Private $hImage As Image

Public Sub Form_Open()

  Me.Center

  txtText.Text = File.Load("molly-malone.txt")
  txtFontText.Text = Font["17"].ToString()
  Try $hImage = scrImage.Grab
 ' $hImage = New Image(scrImage.Width, scrImage.Height)

  'scrImage.ResizeContents($hImage.W, $hImage.H)
  'scrImage.Refresh


End

Private Sub GetText() As String
  
  Dim sText As String
  
  sText = txtText.Text
  If Not btnRichText.Value Then sText = Replace(Html(sText), "\n", "<br>")  
  Return sText
  
End

Private Sub RefreshText()
  
  Dim hFont As Font = Font[txtFontText.Text]
  Dim sText As String = GetText()
  
  scrText.ResizeContents(scrText.ClientW, hFont.RichTextHeight(sText, scrText.ClientW - 16) + 16)
  scrText.Refresh
  
End

Public Sub scrText_Draw()

  Dim sText As String = GetText()
  
  Draw.FillRect(0, 0, Draw.W, Draw.H, Color.TextBackground)
  Try Draw.Font = Font[txtFontText.Text]
  Draw.Translate(- scrText.ScrollX, - scrText.ScrollY)
  Draw.RichText(sText, 8, 8, scrText.ClientW - 16, scrText.ClientH - 16, Align.TopNormal)

End

Public Sub btnRichText_Click()

  RefreshText

End

Public Sub txtText_Change()

  RefreshText

End

Public Sub txtFontText_Click()

  Dialog.Title = "Select a font"
  Dialog.Font = Font[txtFontText.Text]
  If Dialog.SelectFont() Then Return
  txtFontText.Text = Dialog.Font.ToString()
  RefreshText

End

Public Sub scrText_Arrange()

  RefreshText

End

Public Sub btnOpenText_Click()

  Dialog.Title = "Select a text file"
  If Dialog.OpenFile() Then Return
  Try txtText.Text = File.Load(Dialog.Path)

End

Public Sub btnPrintText_Click()

  If prtText.Configure() Then Return

  Me.Enabled = False
  Inc Application.Busy
  prtText.Print
  Dec Application.Busy
  Me.Enabled = True

End

Public Sub prtText_Begin()
  
  Dim PRINT_MARGIN As Float = Paint.Width / prtText.PaperWidth * 10
  Dim hExtents As PaintExtents
  
  Paint.Font = Font[txtFontText.Text]
  hExtents = Paint.RichTextExtents(GetText(), Paint.Width - PRINT_MARGIN * 2)
  prtText.Count = Ceil(hExtents.Height / (Paint.Height - PRINT_MARGIN * 2))
  
End

Public Sub prtText_Draw()

  Dim PRINT_MARGIN As Float = Paint.Width / prtText.PaperWidth * 10
    
  Debug "Printing page";; prtText.Page
  
  Paint.Font = Font[txtFontText.Text]
  Paint.Rectangle(PRINT_MARGIN / 2, PRINT_MARGIN / 2, Paint.Width - PRINT_MARGIN, Paint.Height - PRINT_MARGIN)
  Paint.LineWidth = Paint.Width / prtText.PaperWidth * 0.5
  Paint.Stroke
  Paint.Rectangle(PRINT_MARGIN, PRINT_MARGIN, Paint.Width - PRINT_MARGIN * 2, Paint.Height - PRINT_MARGIN * 2)
  Paint.Clip
  Paint.DrawRichText(GetText(), PRINT_MARGIN, PRINT_MARGIN - (prtText.Page - 1) * (Paint.Height - PRINT_MARGIN * 2), Paint.Width - PRINT_MARGIN * 2, Paint.Height * prtText.Count, Align.TopNormal)
  Paint.ResetClip
  
End

Public Sub btnOpenImage_Click()

 ' Dialog.Title = "Select an image file"
 ' Dialog.Filter = ["*.png;*.jpg;*.jpeg;*.gif;*.xpm", "Image files"]
 ' If Dialog.OpenFile() Then Return
  
  Try $hImage = Image.Load(Dialog.Path)
  scrImage.ResizeContents($hImage.W, $hImage.H)
  scrImage.Refresh

End

Public Sub scrImage_Draw()
  
  If $hImage Then Draw.Image($hImage, - scrImage.ScrollX, - scrImage.ScrollY)
  
End

Public Sub btnPrintImage_Click()

  If prtImage.Configure() Then Return

  Me.Enabled = False
  Inc Application.Busy
  prtImage.Print
  Dec Application.Busy
  Me.Enabled = True

End

Public Sub prtImage_Draw()
  
  Dim PRINT_MARGIN As Float = Paint.Width / prtText.PaperWidth * 10
  Dim hImage As Image
  Dim W, H As Float
  
  If Not $hImage Then Return
  
  hImage = $hImage
  If hImage.Width > hImage.Height Then hImage = hImage.Rotate(Pi(0.5))
  
  W = Paint.Width - PRINT_MARGIN * 2
  H = W * hImage.Height / hImage.Width
  Paint.DrawImage(hImage, PRINT_MARGIN, (Paint.Height - H) / 2, W, H)
  
End


More information about the User mailing list