|
안녕하세요.. ^^
아무래도.. itHeight 부분에서 문제가 생긴것 같네요. Memo의 Text가 너무 길어 Height 계산이 잘못 되는것 같네요. 아니면 다른 부분에서 문제가 생긴것 같고요. itHeight 계산이 stString 대입보다 나중에 있지는 않나요~? 아니면 혹시 전체에서는 itHeight 가 없는게 아닐까요?
한줄에 겹쳐 나오신다면.. 거의 Height 지정 문제인것 같네요.
그리고.. 아래처럼 글자가 삐뚤삐뚤 나오는것은, 폰트를 가변폭폰트를 사용하셔서 그렇습니다. 원래 Default값이 가변폭 글꼴이라서 그럴꺼예요. 한글에서는, 굴림 굴림체 등의 이름에서, 뒤에 '체' 라는것이 들어가면 고정폭 글꼴로, ColWidth가 딱딱 맞아 떨어지는 글꼴입니다.
그래서 아래 소스는.. 프린터의 글자 소스 교정까지 포함되어 있습니다. 혹시 몰라서 itHeight 계산 부분을 TEST 라는 문자열로 넣었구요.. 김백일님의 소스를 보시면 [Text Print] 문자열로 계산을 하시는데, 아마도 이런 문제가 있기 때문일지도 모르겠네요.
//---------------------------------------------------------------------------
#include <vcl.h>
#include <printers.hpp>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TPrinter *tpPrinter = Printer();
TStrings *tsList = new TStringList;
String stString;
int itCount, itHeight;
tpPrinter->BeginDoc();
tpPrinter->Canvas->Font->Name = "굴림체";
tpPrinter->Canvas->Font->Size = 10;
if(RichEdit1->SelText.Trim() != "") stString = RichEdit1->SelText;
else stString = RichEdit1->Lines->Text;
tsList->Text = stString;
itHeight = tpPrinter->Canvas->TextHeight("TEST");
for(itCount = 0; itCount < tsList->Count; itCount ++)
tpPrinter->Canvas->TextOut(1, itHeight * itCount, tsList->Strings[itCount]);
tpPrinter->EndDoc();
delete tsList;
}
//---------------------------------------------------------------------------
위 소스는 만약, 마우스로 선택되어 있는 부분이 있으면 선택된 부분을, 선택되어있지 않으면, 전체를 출력하는 소스입니다. 프린터에서 나오는것까지 확인을 했으니.. 아마 잘 될꺼예요..
//---------------------------------------------------------------------------
#include <vcl.h>
#include <printers.hpp>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TPrinter *tpPrinter = Printer();
int itCount, itHeight;
tpPrinter->BeginDoc();
tpPrinter->Canvas->Font->Name = "굴림체";
tpPrinter->Canvas->Font->Size = 10;
itHeight = tpPrinter->Canvas->TextHeight("TEST");
for(itCount = 0; itCount < RichEdit1->Lines->Count; itCount ++)
tpPrinter->Canvas->TextOut(1, itHeight * itCount, RichEdit1->Lines->Strings[itCount]);
tpPrinter->EndDoc();
}
//---------------------------------------------------------------------------
그리고 위의 소스는 RichEdit1 을 직접 프린트 하는 방법입니다. RichEdit1의 Line의 Count를 얻고, 그 다음 돌리는거죠. 델파이와는 다르게 스트링을 뽑아오는 방식이 Lines->Strings[행] 이런 식으로 사용이 됩니다~
김상훈 님이 쓰신 글 :
: if(PrintDialog1->PrintRange == prSelection)
: stString=RichEdit1->SelText;
:
: else if(PrintDialog1->PrintRange ==prAllPages )
: stString=RichEdit1->Lines->Text;
:
: 영인님이 설명한신 데로..이렇게 코딩을 햇는데..전혀 되지가 않습니다. 일단 선택 영역은 잘되는데...그렇지 않은 상태에서는 계속 첫번째 라인에 겹쳐서 인쇄가 됨니다..
:
:
:
: 그리고 이 질문은 좀 상관은없는데...제가 궁금해서 물어 보는것입니다.for돌릴때...Count값은 스트링으로 변환할때는 tsList->Count를 사용하는데...
: 이걸 리치에디트에서는 어떻값이 쓰이는지.....요.....
:
:
:
:
: 그리고 제가 프린터를 하면 글자가.제 칸데로 인쇄가 되지 않습니다.리치에디터의 폰트는 Fixdays입니다..
: 예를 들면
:
: vocmux H 1478 3:244: 3. 5 voc_config( 16 )
: vocm2 H 2310 3:244: 3. CODEC SELECTED (OFF) = 0 by 104355c
: vocmux H 1797 3:244: 3. 4 MUX:2 DOUT:0 RATE:0
: vocm2 H 5638 3:244: 3. 5 vocm2_config( 16 )
: vocm2 H 5464 3:244: 3. 1 Can't set Tx mute while offline.
:
: 이렇게 인쇄가 되어야 하느데....
:
: 인쇄를 하면
:
: vocmux H 1478 3:244: 3. 5 voc_config( 16 )
: vocm2 H 2310 3:244: 3. CODEC SELECTED (OFF) = 0 by 104355c
: vocmux H 1797 3:244: 3. 4 MUX:2 DOUT:0 RATE:0
: vocm2 H 5638 3:244: 3. 5 vocm2_config( 16 )
: vocm2 H 5464 3:244: 3. 1 Can't set Tx mute while offline.
:
: 이런식으로 배치가 흩어러집니다..
:
:
: 귀찮을실텐데...자세히 가르켜 주심은 다시 한번 진심으로 감사 합니다....
:
: 다음에 기회가 있다면 만남의 자리가 있으면 많은 배움의 잘도 될수잇고........기타등등....
:
: 그럼 이만...
|