안녕하세요. 어려운 난관에 봉착하여 이렇게 구원의 손길을 간절히 기다려봅니다.
다름이 아니옵고 ActiveX를 사용하여 mainform(ActiveForm)에서
printform을 불러 인쇄하려 하는데 자꾸 access violation이 발생합니다.
일반 Application으로는 에러 안 나거든요.
ActiveX로는 quickreport를 사용할 수 없는 건가요?
mainform의 스트링그리드의 RowCount갯수만큼의 장수를 출력해야 거든요.
폼은 quickreport를 사용하였구요.
소스는 이하와 같습니다.
고수님들 살펴보시고 도와주세요.
-----------------------------------------< main >---
unit mainunit; //mainform의 unit
....
implementation
uses ComObj, ComServ, PrintUnit;
.........
procedure TMainForm.PrintBtnClick(Sender: TObject);
var
PrintForm : TPrintForm;
begin
PrintForm := TPrintForm.Create(self); // print폼을 생성
PrintForm.QRep1.Preview; // preview보여주기
PrintForm.Free;
end;
-----------------------------------------------------< sub >-----
unit PrintUnit; //print할려는 폼의 unit
.....
var
PrintForm : TPrintForm;
i : integer;
implementation
uses mainunit;
........
procedure TPrintForm.DetailBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
QRLabel3.Caption := MainForm.SG1.Cells[2, i]; // mainform에 있는 StringGrid의
QRLabel4.Caption := MainForm.SG1.Cells[9, i]; // 내용을 각각 label에 넣기
inc(i);
end;
procedure TPrintForm.QRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
i := 1;
end;
procedure TPrintForm.QRep1NeedData(Sender: TObject; var MoreData: Boolean);
begin
MoreData := i < MainForm.SG1.RowCount;
end;