Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Передача Metafile в элемент управления image1 на полосе masterdata в FastReport

Delphi , Базы данных , Отчеты

Передача Metafile в элемент управления image1 на полосе masterdata в FastReport

В процессе работы с FastReport иногда возникает необходимость передать графический файл (Metafile) в элемент управления image1 на полосе masterdata для каждого напечатанногоrecords. К сожалению, метод LoadFromFile не может быть использован в событии OnBeforePrint, так как metafile является частью другого файла и должен быть извлечен перед передачей в элемент управления на полосе masterdata.

В этом случае можно воспользоваться пользовательской функцией, но она использует тип Variant, что делает невозможной передачу metafile. Существует ли другой способ решить эту проблему?

Решение:

Для решения этой проблемы можно определить пользовательскую функцию, принимающую имя объекта picture и любые другие параметры, необходимые из отчета.

frxReport1.AddFunction(
  'procedure MyTest(const APicViewName : string)',
  'CustomFunctions',
  'This is the description of the MyTest function'
);

Далее, определите функцию:

procedure TForm1.MyTest(const APicViewName : string);
var
  Pic : TfrxPictureView;
  Stream : TStream;
begin
  Pic := TfrxPictureView(frxReport1.FindObject(APicViewName));
  if(not Assigned(Pic)) or (not Pic.ClassType.InheritsFrom(TfrxPictureView)) then
    Exit;

  Stream := TMemoryStream.Create;
  try
    // загрузите и обработайте ваше изображение и загрузите его в поток
    // ...
    Stream.Position := 0;
    Pic.LoadPictureFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

В событии OnUserFunction отчета frxReport1:

function TForm1.frxReport1UserFunction(const MethodName: string; var Params: Variant): Variant;
begin
  if(MethodName = 'MYTEST')
  then MyTest(Params[0]);
end;

Примечания:

Сперва спасибо. Решение работает наполовину. Всегда печатается одно и то же изображение. Имя процедуры такое же, как и имя файла. Я не понимаю, что такое TmpCurReport, это ли TfrxReport класс отчета? Мы почти там. Что можно сделать? @BartolomeoGiorgio: Моя ошибка, TmpCurReport - это объект TfrxReport, я обновил ответ. Но почему процедура вызывается только один раз? (Я установил точку останова) В предварительном просмотре одно и то же изображение. Спасибо еще раз. @BartolomeoGiorgio: Как вы определяете, какое изображение загрузить? (Есть ли Id, имя файла... в наборе данных?) @BartolomeoGiorgio: Если да, убедитесь, что изображение находится внутри полосы отчета, и что полоса отчета связана с набором данных, который содержит ключевую информацию для загрузки изображения (Id, имя файла... или что-то, что вы используете для определения правильного изображения для загрузки). Отчет работает хорошо. Все поля меняют свои значения, и поле filename тоже. Только поле picture не меняется. Фактически, приложение останавливается только один раз на точке останова в моей процедуре. @BartolomeoGiorgio: Как вы определяете, какое изображение загрузить? (Есть ли Id, имя файла... в наборе данных?) Каждая запись имеет поле, содержащее имя файла, который необходимо обработать. Я передаю значение этого поля в мою процедуру @BartolomeoGiorgio: Хорошо, попробуйте: 1) убедитесь, что изображение находится внутри полосы. 2) убедитесь, что полоса связана с тем же набором данных, что и имя файла. 3) убедитесь, что свойство DataSet элемента управления изображением отчета оценивается тем же набором данных, что и полоса. 4) вызовите свою пользовательскую функцию из обработчика события OnBeforePrint элемента управления изображением отчета Спасибо, я решил проблему. Былproblem с событием OnBeforePrint; оно было написано неправильно. Спасибо еще раз @BartolomeoGiorgio: Отлично! Примите ответ, если он вам помог.

Создано по материалам из источника по ссылке.

Контекст: Необходимо передать Metafile в элемент управления image1 на полосе masterdata в FastReport для каждого напечатанного records, но стандартные методы не работают.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Отчеты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:27:55/0.014178037643433/1