::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-07 20:08:00, Hit : 2792, Vote : 699
 TMemo 를 화면크기로 인쇄하기

{+------------------------------------------------------------
| Procedure PrintMemo
|
| Parameters:
| aMemo: memo to print
| centerVertical: true if output should be centered vertically
| centerHorizontal: true if output should be centered horizontally
| Call method:
| static
| Description:
| Prints the contents of a memo on the currently selected
| printer, using the memos Font. The output can be centered
| vertically and/or horizontally. Default margins will be used.
| If the text does not fit onto one page the centerVertical
| parameter is ignored.
| Error Conditions:
| none
| Note:
| requires Printers in the Uses clause.
|Created: 27.10.97 13:16:46 by P. Below
+------------------------------------------------------------}
Procedure TPostForm.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 }





491   [일반/컴포넌트] TRichEdit 의 선택된 영역만 인쇄하기  김영대 2003/03/07 4514 736
490   [시스템] CPU 종류 구하기  김영대 2003/03/07 4832 1206
489   [시스템] 사운드파일 없이 PC 스피커로 음악연주  김영대 2003/03/07 4683 926
488   [네트웍/인터넷] 프로그램으로 네트워크 드라이브 연결/해제  김영대 2003/03/07 6780 1258
487   [일반/컴포넌트] 윈도우즈 종료와 같은 그늘진 화면 만들기  김영대 2003/03/07 3166 843
486   [일반/컴포넌트] 아이콘 사이트  김영대 2003/03/07 3639 1079
485   [시스템] 윈도우즈 시스템 표준 폰트 구하기  김영대 2003/03/07 3033 853
484   [네트웍/인터넷] RS232 통신  김영대 2003/03/07 6974 1856
483   [일반/컴포넌트] 주어진 영역의 화면 캡처  김영대 2003/03/07 3577 1010
482   [일반/컴포넌트] 숫자를 영문 표기로 바꾸기  김영대 2003/03/07 4265 898
481   [일반/컴포넌트] 숫자를 한글 표기로 바꾸기  김영대 2003/03/07 3635 934
480   [일반/컴포넌트] RichEdit 의 내용을 Bitmap 으로 만들기 2  김영대 2003/03/07 3819 990
479   [COM/OLE] MS-WORD 종료시키기  김영대 2003/03/07 2683 753
478   [윈도우즈 API] 시스템 사운드 연주하기  김영대 2003/03/07 4826 1307
477   [일반/컴포넌트] Algorithm to sort a TStringGrid #2  김영대 2003/03/07 4799 1208
476   [윈도우즈 API] 외부 프로그램의 좌표,상태 구하기  김영대 2003/03/07 3181 1017
475   [윈도우즈 API] 윈도우즈 Telnet 으로 호스트 접속하기  김영대 2003/03/07 4079 1117
474   [일반/컴포넌트] 특정한 폴더로 이동한 DOS 창 띄우기  김영대 2003/03/07 4125 1135
473   [시스템] DOS 명령어 실행하고 결과 받아오기  김영대 2003/03/07 6560 1549
472   [윈도우즈 API] NT의 현재 user가 administrative privilege 를 가지고 있는지?  김영대 2003/03/07 3009 816
471   [일반/컴포넌트] 두개의 StringGrid sync 마추기  김영대 2003/03/07 3715 1017
470   [일반/컴포넌트] 윈도우의 title bar 폰트 바꾸기  김영대 2003/03/07 3255 850
469   [네트웍/인터넷] 네트워크 공유 설정/해제 하기 (Windows 9x)  김영대 2003/03/07 4414 1081
468   [네트웍/인터넷] 네트워크 공유 정보 읽어오기 (WIndows 9x)  김영대 2003/03/07 3671 1006
467   [일반/컴포넌트] 눌려진 키보드 키의 명칭 구하기  김영대 2003/03/07 7399 1441
466   [윈도우즈 API] Windows98 에서의 SetForegroundWindow  김영대 2003/03/07 5765 1494
465   [윈도우즈 API] Task bar 에 나타나지 않는 프로그램 만들기  김영대 2003/03/07 5179 1513
464   [COM/OLE] Outlook 사용하기  김영대 2003/03/07 3488 1096
463   [시스템] 지정한 drive가 CD-ROM 인지 검사하기  김영대 2003/03/07 6317 1652
462   [시스템] 어떤 어플리케이션이 시작 되는지 hook으로 알아내기  김영대 2003/03/07 5175 1543
461   [윈도우즈 API] 윈도우즈 탐색기의 아이콘 뽑아내서 사용하기  김영대 2003/03/07 8051 1889
460   [윈도우즈 API] System Images  김영대 2003/03/07 7919 1832
459   [윈도우즈 API] 컴퓨터/파일/폴더 찾기 화면 띄우기  김영대 2003/03/07 7787 1483
458   [일반/컴포넌트] Unix-format time 을 TDateTime 로 바꾸기  김영대 2003/03/07 4109 1123
457   [일반/컴포넌트] 실행시 component 를 Move/Resize 시키기  김영대 2003/03/07 3328 959
  [일반/컴포넌트] TMemo 를 화면크기로 인쇄하기  김영대 2003/03/07 2792 699
455   [일반/컴포넌트] SpeedButton 에 OnMouseEnter/OnMouseExit 이벤트 넣기  김영대 2003/03/07 3975 1042
454   [윈도우즈 API] 키보드의 Scroll Lock 켜기/끄기  김영대 2003/03/07 4195 1135
453   [데이터베이스] table packing 하기  김영대 2003/03/07 3507 1006
452   [윈도우즈 API] reboot Windows  김영대 2003/03/07 3901 1124

[이전 10개] [1]..[11][12] 13 [14][15][16][17][18][19][20]..[25] [다음 10개]
 

Copyright 1999-2022 Zeroboard / skin by zero