안녕하세요, 이번에 델파이를 공부하게 되어 몇번 찾아 왔었는데, 이렇게 계시판에 무언가를 쓴다는 건 처음이군요, 것두 질문이라 넘 죄송하게 생각 되네요.
문제는 다름아니라, 디버거를 통해서 한줄한줄 따라가 보면 textout 문장이 모두 맞게 돌아가는데, 이상하게도 프린트 출력은 되지 않습니다.
왜 프린트 출력이 되지 않는 건지 이유와 해결방법을 알려 주셨으면 합니다.
아래는 문제가 된 부분의 소스입니다.
DATABASE IV 파일을 사용하며, Axx, Bxx 등은 개별 필드이며 그외의 변수들은 모두 longint형 입니다.
cnt := 1;
while not(prn_query.Eof) do begin
cnt_j := 1;
printer.BeginDoc;
setmapmode(printer.handle,MM_LOMETRIC);
y := 300;
with printer.canvas do begin
font.Height := 50;
textout(500,100,'[ * 보증수리 집계 * ]');
font.Height := 37;
y := y+80;
textout(800,y,'+---------+---------+--------+---------+--------+');
y := y+80;
textout(800,y,'| 담 당 | 주 임 | 부 장 | 부사장 | 사 장 |');
y := y+80;
textout(800,y,'+---------+---------+--------+---------+--------+');
y := y+80;
textout(800,y,'| | | | | |');
y := y+80;
textout(100,y,' 기계정비 '+ edit15.Text + ' <-> ' + edit16.text +' | | | | | |');
y := y+80;
textout( 80,y,'+--------------------------------------------------------------------------------------------------------------+');
y := y+80;
textout( 80,y,'| | R/O 번 호 | 수리청구 | 수리입금 | 부품청구 | 부품입금 | 차 액 |');
y := y+80;
textout( 80,y,'+--------------------------------------------------------------------------------------------------------------+');
end;
while (cnt_j < 24) and not(prn_query.eof) do begin
with prn_query do begin
susum := fieldbyname('B15').asinteger + fieldbyname('B25').asinteger + fieldbyname('B35').asinteger + fieldbyname('B45').asinteger;
busum := fieldbyname('A14').asinteger + fieldbyname('A24').asinteger + fieldbyname('A34').asinteger + fieldbyname('A44').asinteger
+ fieldbyname('A54').asinteger + fieldbyname('A64').asinteger + fieldbyname('A74').asinteger + fieldbyname('A84').asinteger;
end;
cha := prn_query.fieldbyname('suin').asinteger + prn_query.fieldbyname('buin').asinteger
- susum - busum;
temp_str := format('| %3d | %9s | %-9d | %-9d | %-9d | %-9d | %-9d |',[cnt,
prn_query.fieldbyname('code').asstring,susum,prn_query.fieldbyname('suin').asinteger,
busum,prn_query.fieldbyname('buin').asinteger, cha]);
y := y+80;
showmessage(temp_str);
printer.Canvas.TextOut(80,y, temp_str);
y:=y+80;
printer.canvas.textout( 80,y,'+--------------------------------------------------------------------------------------------------------------+');
cnt_j := cnt_j +1 ;
cnt := cnt +1;
prn_query.Next;
end;
if prn_query.Eof then begin
// 아래 항목들을 계산해야 함.
// tot_susum, tot_busum; tot_cha; tot_suin; tot_buin, t_cha
// : longint;
temp_str := format('| | 합 계 | %-9d | %-9d | %-9d | %-9d | %-9d |',[
tot_susum, tot_suin, tot_busum, tot_buin, tot_cha]);
with printer.canvas do begin
y:= y+80;
textout(80,y,temp_str);
y:= y+80;
textout(80,y,'+--------------------------------------------------------------------------------------------------------------+');
end;
end;
printer.EndDoc;
end;
그럼, 꼭 부탁드립니다.
좋은 시간 되세요.