Question
“How can I use the DBImage.OnGetPicture event to conditionally display a default image? For example, some records in my dataset have any empty image field.”
Solution
The following examples uses the DBImage.OnGetPicture event to conditionally display a default image.
Download: UseDBImageOnGetPictureEvent.zip
Delphi code sample:
procedure TForm1.FormCreate(Sender: TObject);
begin
FDefaultPicture := TPicture.Create;
// load the default image
// FDefaultPicture.Bitmap.LoadFromFile('c:\myDefaultImage.bmp');
// for this example, we will create a simple bitmap
FDefaultPicture.Bitmap.Width := ppDBImage1.spWidth;
FDefaultPicture.Bitmap.Height := ppDBImage1.spHeight;
FDefaultPicture.Bitmap.Canvas.Font.Size := 14;
FDefaultPicture.Bitmap.Canvas.TextOut(10, 10, '(No Image Available)');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FDefaultPicture.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ppReport1.Print;
end;
procedure TForm1.ppDBImage1GetPicture(Sender: TObject; aPicture: TPicture);
var
lPicture: TPicture;
begin
// call DataPipeline.GetFieldAsPicture method
lPicture := plBioLife.GetFieldAsPicture('Graphic');
if lPicture <> nil then
aPicture.Assign(lPicture)
else
aPicture.Assign(FDefaultPicture);
// for this example, replace the third image on each page
if ppReport1.DetailBand.Count = 3 then
aPicture.Assign(FDefaultPicture);
end;