?
Solved

printing from delphi

Posted on 2004-04-08
6
Medium Priority
?
420 Views
Last Modified: 2010-04-05
hi how to print info from the access database or from the grid in delphi


to either a network printer or local printer
0
Comment
Question by:zgeorge_2
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
6 Comments
 
LVL 11

Expert Comment

by:shaneholmes
ID: 10789049
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 ?

Shane
0
 

Author Comment

by:zgeorge_2
ID: 10789055
have delphi7

well i have Rave Raports Component (george(at) unip(os.com)

(forgot about the tables




thank you


0
 
LVL 11

Expert Comment

by:shaneholmes
ID: 10789072
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

Shane
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:zgeorge_2
ID: 10789078
ok can we print
 

the grid

0
 
LVL 11

Expert Comment

by:shaneholmes
ID: 10789091
Yes,
Go back to yahoo

Shane
0
 
LVL 11

Accepted Solution

by:
shaneholmes earned 2000 total points
ID: 10789172
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 );
  Var
    topMargin, bottomMargin, leftMargin, rightMargin: Integer;
    x,y: Integer;
    maxLineLength: Integer;
    linecounter: Integer;
    lineheight : Integer;
  Begin
    { 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.BeginDoc;
    try
      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 }
        Else
          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
            Printer.NewPage;
            y:= topMargin;
          End;
        End; { If }
      End; { For }
    finally
      Printer.EndDoc;
    end;
  End; { PrintMemo }

Shane
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …
Suggested Courses
Course of the Month7 days, 23 hours left to enroll

765 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question