Вставьте другой объект изображения после каждой строки печати в быстром отчете

#delphi #delphi-xe5 #fastreport #firemonkey-fm2

#дельфи #delphi-xe5 #быстрый отчет #firemonkey-fm2

Вопрос:

Я разрабатываю приложение в Firemonkey (Delphi XE5), где я использую Fast report 4 для печати данных. Я использую TFrxUserDataSet для хранения данных и для их печати я использую группу MasterData в быстром отчете.

Теперь мне также нужно напечатать TBitamp с каждой строкой, так что здесь растровое изображение для каждой записи будет разным.

Есть ли у кого-нибудь идеи, как я могу это сделать?

Комментарии:

1. Является ли это растровое изображение частью вашей записи или загружено из внешнего файла?

2. Это загружается из некоторого файла, но во время выполнения. я думаю, что невозможно сохранить изображение или TBitmap в поле TFrxUserDataSet.

3. @PadamJain возможно, вам не удастся сохранить изображение или TBitmap в поле TFrxUserDataSet, но вы можете сохранить имя файла, предполагая, что все изображения находятся в одной папке.

Ответ №1:

Вы можете загрузить внешний файл изображения в элемент управления изображением в вашем отчете. Я делаю это с помощью скрипта, который является частью самого отчета, используя событие OnBeforePrint следующим образом:

 PROCEDURE Data2OnBeforePrint(Sender: TfrxComponent);
VAR
  lFN               : STRING;
  lFP               : STRING;
BEGIN
  // Use the filename as found in the Media dataset fields
  lFP := Trim(< Media."ImagePath">);    // Images folder below Image Root Path
  lFN := Trim(< Media."FileName1">);    // Actual Image File Name

  WITH Picture2 DO BEGIN

    // NB: There is no checking in this example, it may be useful to do a 
    //     couple of checks before trying to load the image, especially if 
    //     the data is user entered
    LoadFromFile(ImageRootPath   IncludeTrailingSlash(lFP)   lFN);

    // Do whatever manipulations you want to with the loaded image...
    AutoSize := False;
    Width := 1620;
    Height := 1080;
    Top := 0;
    Left := (1920 - Width) / 2;

    HightQuality := True;    // Note the typo in the property name... HighQuality?
    KeepAspectRatio := True;
    Transparent := True;
    Stretched := NOT Picture3.AutoSize;
  END;
END;
 

Обратите внимание, что я добавил несколько пользовательских функций, таких как ImageRootPath IncludeTrailingSlash(), чтобы упростить сценарий. Вы могли бы сделать то же самое, чтобы проверить наличие действительного файла перед попыткой загрузки, чтобы избежать исключений.

Моя среда разработки — Delphi XE5 с FastReport FMX, и она работает просто отлично. Я нахожусь в процессе перехода на XE6 и FR FMX 2, но я почти уверен, что это будет работать нормально.