Printing Memos from a database using TMemoBuf

Category

Code Based - General

Question

How do you print Memos from a database using TMemoBuf?

Solution

The following example prints the "Notes" memo field of the current record from Table1. This is accomplished by using TMemoBuf and is quite easily done.

Delphi Example:

uses
  RPMemo;

procedure TForm1.ReportSystem1Print(Sender: TObject);

var
  MemoBuf: TMemoBuf;
  Stream: TMemoryStream;

begin
  with Sender as TBaseReport do begin
    MemoBuf := TMemoBuf.Create;
    Stream := TMemoryStream.Create;
    try
      TBlobField(Table1.FieldByName('Notes')).SaveToStream(Stream);
      Stream.Position := 0;
      MemoBuf.LoadFromStream(Stream, Stream.Size);
      MemoBuf.PrintStart := 1.0; // Set memo left margin position
      MemoBuf.PrintEnd := 4.0; // Set memo right margin position
      PrintMemo(MemoBuf, 0, false);
    finally
      MemoBuf.Free;
      Stream.Free;
    end; { tryf }
  end; { with }
end;

C++Builder Example:

#include "RPMemo.hpp"

void __fastcall TForm1::ReportSystem1Print(TObject *Sender)
{
  TMemoBuf* MemoBuf;
  TMemoryStream* Stream;
  TBlobField* BlobField;
  TBaseReport* bp = dynamic_cast(Sender);

  MemoBuf = new TMemoBuf();
  Stream = new TMemoryStream();
  try {
    BlobField = dynamic_cast(Table1->FieldByName("Notes"));
    BlobField->SaveToStream(Stream);
    Stream->Position = 0;
    MemoBuf->LoadFromStream(Stream, Stream->Size);
    MemoBuf->PrintStart = 1.0; // Set memo left margin position
    MemoBuf->PrintEnd = 4.0;   // Set memo right margin position
    bp->PrintMemo(MemoBuf, 0, false);
  }
   __finally {
      delete MemoBuf;
      delete Stream;
   };
}