printing from delphi

hi how to print info from the access database or from the grid in delphi

to either a network printer or local printer
Who is Participating?
Um, for what you need, a simple solution of sending the info from your Receipt in your POS app to a modal form with a Memo will be suffice.

Then utilizing this procedure below to print.

procedure TfrmMainPOS.PrintMemo( aMemo: TMemo;
                     centerVertical, centerHorizontal: Boolean );
    topMargin, bottomMargin, leftMargin, rightMargin: Integer;
    x,y: Integer;
    maxLineLength: Integer;
    linecounter: Integer;
    lineheight : Integer;
    { Set the default margins to 1 inch for top, bottom, 0.75 inch
      for left and right margins. GetDeviceCaps is used to get the
      printers resolution (dots per inch). The margin variables
      contain the position of the margin on paper, in dots, not the
      distance from the border of the printing region! }
    topMargin := GetDeviceCaps( Printer.Handle, LOGPIXELSY );
    bottomMargin := Printer.PageHeight - topMargin;

    leftMargin := GetDeviceCaps( Printer.handle, LOGPIXELSX ) * 3 div 4;
    rightMargin := Printer.PageWidth - leftMargin;

    { Start the print job, assign the memo font to the printer canvas.
      Note that we have to make sure the print job is closed properly,
      thus the try finally block. }
      Printer.Canvas.Font.PixelsPerInch :=
        GetDeviceCaps( Printer.Canvas.Handle, LOGPIXELSY );
        { This is really only necessary for Delphi 1, due to a
          buglet. }
      Printer.Canvas.Font:= aMemo.Font;

      { Determine the height of a line in pixels }
      lineHeight := Printer.Canvas.TextHeight('Ay');

      If centerHorizontal Then Begin
        { Iterate once over all lines of the memo and determine the
          length, in pixels, of the longest line. We need that to
          adjust the leftMargin to center the text. }
        maxLineLength := 0;
        For linecounter := 0  To aMemo.Lines.Count-1 Do Begin
          x:= Printer.Canvas.TextWidth( aMemo.Lines[linecounter]);
          If x > maxLineLength Then
            maxLineLength := x;
        End; { For }

        { Adjust the leftMargin to center the text into the
          available space between the current margins. }
        x := leftMargin +
             (rightMargin-leftMargin-maxLineLength) div 2;
        If x < leftMargin Then Begin
          { Problem, longest line does not fit into the available
            space! We leave the margin untouched, the line will
            be truncated. }
        End { If }
          leftMargin := x;
      End; { If }

      If centerVertical Then Begin
        { Calculate the vertical space needed to print all lines,
          adjust the topMargin to center the text as needed. }
        y := lineHeight * aMemo.Lines.Count;
        If y < (bottomMargin - topMargin) Then Begin
          topMargin :=
            topMargin + (bottomMargin - topMargin - y) div 2;
        End; { If }
        { Else
            space needed is larger than the height of a page,
            so ignore the center request. }
      End; { If }

      { Margins have been calculated, so we are finally set up
        to start printing lines. In the following code x and y
        hold the starting position of the next line. }
      x:= leftMargin;
      y:= topMargin;
      For linecounter := 0  To aMemo.Lines.Count-1 Do Begin
        Printer.Canvas.TextOut( x, y, aMemo.Lines[linecounter]);
        y := y + lineHeight;
        If y >= bottomMargin Then Begin
          { Eject the page and start a new one, but only if
            the line we have just printed is not the last line
            anyway. EndDoc will eject the current page. }
          If linecounter < (aMemo.Lines.Count-1) Then Begin
            y:= topMargin;
        End; { If }
      End; { For }
  End; { PrintMemo }

You will need a Report component

You can use either Rave Reports or quick reports or a ton of other ones

WHat version of Delphi Do you use?

Do you have Rave Components ?

zgeorge_2Author Commented:
have delphi7

well i have Rave Raports Component (george(at) unip(

(forgot about the tables

thank you

Cloud Class® Course: MCSA MCSE Windows Server 2012

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

yes forget about the tables. If you want to draw me up a NICE (well thought out)  specification on how that works, then i will work on it for you, until then -  im gonna stay away

zgeorge_2Author Commented:
ok can we print

the grid

Go back to yahoo

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.