안녕하세요~~
저희 회사에서는 한달에 두번 약 만여명의 회원에게 우편물을 발송하고 있습니다.
우편물 발송을 위한 봉투를 출력하려고 하는데 퀵리포트로 했더니
100장을 채 출력하지 못하고 에러가 나버렸습니다.
아무런 에러도 없는데 말이죠... -.-;;
여러가지로 해보다가 안되서 양병규님께서 글을 올리신 TPrinter를
따라서 만들어 보았습니다.
아래 보이는게 그 소스구요...
처음 몇번은 잘 되는데 하다가보면~ 프린트가 안되구 프린트 출력내용을 보면
컴퓨터가 프린트 할 것을 삭제하고 있더라구요....
다시 컴퓨터를 껐다가 켜면 다시 되구요~
그렇게 또 몇번 하다보면~ Spool Error이라는게 떠요...
아래 소스는 데이터를 가져온 다음 인쇄를 시작하고 닫고 다시 데이터를 가져오도록 되어있어요
인쇄 시작을 알리고 데이터를 가져와서 인쇄하고 다시 데이터를 가지고 오려고 하니까
한번만 출력하고 서 버리구요...
고수님들~~ 이거~~ 어떻게 해야하는지 좀~ 알려주시겠어요?
with DM.qMLable do
begin
while Not Eof do
begin
// 데이터 가져오기
// 주소
Address := FieldByName('Sido').AsString+' '+FieldByName('Gugun').AsString+' '+
FieldByName('Dong').AsString+' '+FieldByName('Note').AsString;
// 이름
if FieldByName('MagazineCd').AsString = '900' then
Tmp := ' 귀하('+FieldByName('Memo').AsString+')'
else
Tmp := ' 귀하';
if FieldByName('dvsn').AsString = '1' then
begin
if copy(FieldByName('Position_$chrp').AsString,1,1) <> '1' then
MemberNm := FieldByName('Name').AsString+Tmp
else
MemberNm := FieldByName('Name').AsString+FieldByName('ChrpNm').AsString+Tmp;
end
else MemberNm := FieldByName('Name').AsString+Tmp;
// 인쇄 시작
Printer.BeginDoc;
with Printer.Canvas do
begin
//현재 매핑모드를 oldMap에 저장하고 새로운 매핑모드(0.1mm)를 적용한다
OldMap := SetMapMode( Printer.Handle, MM_LOMETRIC );
//현재의 기준점을 OldOrg에 저장하고 새로운 기준점(20mm)을 적용한다
OldOrg := SetOrgPoint( Point( 100, 150 ) );
try
Brush.Style := bsClear;
Font.Name := '굴림';
case rgWay.ItemIndex of
0:begin // 큰 봉투
Len := 1400;
Wid := -1200;
Font.Height := 45;
Step := -100;
end;
1:begin // 작은봉투
Len := 900;
Wid := -600;
Font.Height := 32;
Step := -80;
end;
end;
TextOutBase(Len, Wid, Address);
Inc(Wid, Step);
TextOutBase(Len, Wid, MemberNm);
Inc(Wid, Step);
Inc(Len, 400);
case rgWay.ItemIndex of
0:Font.Height := 53; // 큰 봉투(우편번호)
1:Font.Height := 43; // 작은봉투(우편번호)
end;
TextOutBase(Len, Wid, FieldByName('PostNo').AsString);
Next;
Finally
//기준점을 원래대로 복구한다
SetOrgPoint( Point( OldOrg.cx, OldOrg.cy ) );
//매핑모드를 원래대로 복구한다
SetMapMode( Printer.Handle, OldMap );
Printer.EndDoc;
end;
end;
end;
end;