컴포트용 프린터가 3대 있고 스트링그리드의 8번째 칼럼에 어느 프린터로 출력을 할것인가를 지정하는 문자열이 들어 있습니다.(prn1,prn2,prn3,none,all)
-(prn1은 1번 프린터로만, prn2는 2번 프린터로만, prn3은 3번 프린터로만, none은 어느 쪽으로도 출력하지 않는 것이고, all은 1,2,3번 모두로 출력을 하는 것임.)
그러니까 스트링그리드의 8번째 칼럼에서 none만 나오면 프린팅을 아예 하지 말아야 하고, prn1,prn2,prn3이 섞여 나오면 all로 지정된 것과 똑같이 1,2,3번 모두로 출력을 해야 합니다.
문서는 타이틀과 소제목 등으로 이루어진 헤더부분과 스트링그리드의 내용을 합쳐셔 출력하게 됩니다. 물론 헤더부분도 스트링그리드에서 지정된 프린터에 따라 출력이 되어야 겠죠.
제가 궁금한 것은 어느 프린터로 출력할 것인가를 효과적으로 알아낼수 있는 방법입니다.
저는 무식하게 이런 식으로 코딩을 했걸랑요.
function TForm1.printermode:Integer;
var
i:integer;
str:String;
p1,p2,p3,none:Boolean;
begin
p1:=False;p2:=False;p3:=False;none:=False;
with stringgrid1 do begin
for i:=1 to rowcount-1 do begin
str:= Cells[7,i];
if (str='all') or ((p1) and (p2) and (p3)) then begin
Result:=4;
exit;
end
else if str='none' then
none:= True
else if str='p1'then
p1:= True
else if str='p2' then
p2:= True
else if str='p3' then
p3:= True;
end;
end;
if (none) and ((not p1) and (not p2) and (not p3)) then
Result:= 9
else if (p1) and (not p2) and (not p3) then
Result:=1
else if (not p1) and (p2) and (not p3) then
Result:=2
else if (not p1) and (not p2) and (p3) then
Result:=3
end;
procedure TForm1.PrintSheet;
begin
Case Printermode of
1: //1번 프린터만 출력
2: //2번 프린터만 출력
3: //3번 프린터만 출력
4: //1.2.3번 모두 출력
end;
end;
제가 생각해도 넘 무식한 방법인 것 같아서요. 좀더 깔끔하고 효율적인 방법에 대한
고수님들의 조언 부탁드립니다. 즐거운 하루 되세요.