Q&A

  • TPrinter 사용에 대해서요..답변 부탁드려요.
메모 필드에 입력한 내용을..

라인당 박스 하나씩에 출력할려고 하거든요...

아무리 책을 뒤져 봐도.. 머리를 짜봐도..해결이 안되서요.~

고수님들의 도움 부탁드려요...~~



2  COMMENTS
  • Profile
    nilriri™ 2003.06.13 19:38
    샬롬~

    여기 강좌란에 보시면 TPrinter를 이용한 출력에 대해서

    잘 정리되어 있습니다...

    즐프~~

  • Profile
    홍성호 2003.06.13 21:53

    고수님들 제 소스 좀 봐주세요.~~ 박스 하나에 라인 하나씩 출력할려고 하는데. 한 줄만 찍히고 마네여..그럼..부탁드립니다..^^;;

    procedure TForm1.Button2Click(Sender: TObject);

    var
       x, y, i, x2 : Integer;
       Arect : TRect;
    begin
       Printer.PrinterIndex := 0;
       Printer.BeginDoc;
      
       x := 10;
       y := 10;

       //x := GetDeviceCaps(Printer.Canvas.handle, PHYSICALOFFSETX);
       //y := GetDeviceCaps(Printer.Canvas.handle, PHYSICALOFFSETY);
      
      // Edit1.Text := IntToStr(x);

       with Printer.Canvas do
       begin
           SetMapMode(Handle, MM_LOMETRIC);

           //x2 := TextHeight('한');

           font.Name := '굴림체';
           font.size := 8;
          Rectangle(x, y-20, 2000, -87);
           //ARect := Rect( x, y-20, 2000, -87 );
          TextOut(x, y-30, Memo1.Lines[0]);
           //DrawText(Handle, PChar(Memo1.Lines[0]),
           //      Length( Memo1.Lines[0]),ARect, DT_CENTER);
           //with Arect do Rectangle(Left, Top, Right, Bottom);
           //TextRect(ARect, x, y-20, Memo1.Lines[0]);

           For i :=1 to Memo1.Lines.Count -1 do
           begin
               y := y - TextHeight('한') - 20;

               Rectangle(x, y-60, 2000, -87);

               TextOut(x, y-70, Memo1.Lines[i]);
               //ARect := Rect( x, y-20, 2000, -87 );
               //ARect := Rect( x, y-20, Length( Memo1.Lines[i]), -67 );
               //TextRect(ARect, x, y-20, Memo1.Lines[i]);
               //DrawText(Handle, PChar( Memo1.Lines[i]),
               //Length( Memo1.Lines[i]),ARect,DT_CALCRECTor
              //       DT_CENTER);
              //    x2 := Length(Memo1.Lines[i]);
              // with Arect do Rectangle(Left, Top, Right, Bottom);
           end;
        Printer.EndDoc;
        ShowMessage('메시지 출력완료');
        end;

    end;

    두 가지 방식으로 해봤거든요..
    ① 박스 하나를 그리고 좌표를 계산해 박스안에다 문자열 출력하는 방법
    ② 박스에 직접 문자열을 출력하는 DrawText 사용하는 방법

    위 소스는 첫번쨰 방식을 해본건데요..안되네요..
    물론 두번째도 안 되지만요..ㅡㅡ;

    조언 부탁드려요.~~~~