Q&A

  • 퀵레포트에서 그림 출력
퀵레포트에서 그림을 출력 하는데 잘 되지 않아 질문을 올립니다.
저번에도 한번 올렸는데 해결을 못해 다시 한번 올림니다.

InterBase 6.0 에 델5를 사용 하고 있습니다.
이력 카드를 출력 하는 프로그램 입니다.
관리카드에 사진이 2장 출력 됩니다.
데이타베이스에 그림은 BLOB 타입으로 저장 하여
불러와서 표시 하는 방식을 사용 하였습니다.

미리보기에서는 그림이 표시 되는데 프린트 하면
그림이 출력 되지 않습니다.
그래서 사용한것이 먼저 저장해서 이것을
다시 불러와 출력 했더니 그림이 다 출력 되지 않지만
출력량을 100장 정도 하니 출력이 됩니다.
그런데 문제가 발생 했습니다...이번에는
미리보기 화면에 나온 순서대로 출력 되어야 하는데
어떤 순서 없이 출력 됩니다..........

아마 그림을 불러와 표시 되면서 발생되는 문제인거 같은데
그림이 들어 있지 않은 이력 카드에서는 정상적으로 표시 됩니다.

원인을 아직도 못 찾고 있습니다...고수님에 내공이 필요 합니다.

소스는   CustomerPrint.QRBand1BeforePrint 에 다음과 같이 넣었습니다.

<!--CodeS-->

var
  My_imgSize : String;
  Jpg : TJPEGImage;
  Mem : TMemoryStream;

begin
  Jpg := Nil; Mem := Nil;

  jpg := TJPEGImage.Create;
  mem := TMemoryStream.Create;

  QRImage1.Picture := nil; // .Assign(nil);
  QRImage2.Picture := nil; //.Assign(nil);

  // =========================================
  if not TBlobField(CustomerPrintQuery.Fields[22]).IsNull then
  begin
    TBlobField(CustomerPrintQuery.Fields[22]).SaveToStream(mem);
    mem.Position := 0;
    jpg.LoadFromStream(mem);
    QRImage1.Picture.Graphic := jpg;

    My_imgSize := image_SizeStream(Jpg.Height,Jpg.Width,480,300);

    QRImage1.Height := StrToint(PasString(My_imgSize,',',1));
    QRImage1.Width := StrToint(PasString(My_imgSize,',',2));
    QRImage1.Top := StrToint(PasString(My_imgSize,',',3)) + 466;
    QRImage1.Left := StrToint(PasString(My_imgSize,',',4)) + 40;

    QRImage1.Refresh;
    Application.ProcessMessages;
  end else begin
    QRImage1.Picture.Assign(nil);
  end;


  //========================================
  if not TBlobField(CustomerPrintQuery.Fields[23]).IsNull then
  begin
    Mem.Clear;

    TBlobField(CustomerPrintQuery.Fields[23]).SaveToStream(mem);
    mem.Position := 0;
    jpg.LoadFromStream(mem);
    QRImage2.Picture.Graphic := jpg;

    My_imgSize := image_SizeStream(Jpg.Height,Jpg.Width,480,300);

    QRImage2.Height := StrToint(PasString(My_imgSize,',',1));
    QRImage2.Width := StrToint(PasString(My_imgSize,',',2));
    QRImage2.Top := StrToint(PasString(My_imgSize,',',3)) + 466;
    QRImage2.Left := StrToint(PasString(My_imgSize,',',4)) + 390;

    QRImage2.Refresh;
    Application.ProcessMessages;

  end else begin
    QRImage2.Picture.Assign(nil);
  end;

    Jpg.Free;
    Mem.Free;


<!--CodeE-->


0  COMMENTS