Lazreport. Картинка не грузятся.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Lazreport. Картинка не грузятся.

Сообщение zozuliar » 03.03.2014 21:46:07

Создал в отчёте переменную picture. В отчёте на датабенд поместил компонент picture2. В Memo объекта picture2 поместил переменную picture так:
Код: Выделить всё
[[picture]]

Рядом положил Memo и в него тоже прописал
Код: Выделить всё
[[picture]]

Значение пременной picture присваиваю в коде вызывающей отчёт формы так:
Код: Выделить всё
fn := 'd:\projects\images\' + qProject.ParamByName('id').AsString + '.jpg';
  if (fileexists(fn)) then
  begin
     frVariables['picture']:=fn;
  end
  else
     frVariables['picture']:='d:\projects\images\0.jpg';     

В результате в поле Мемо отчёта попадает значение
d:\projects\images\606.jpg

А картинка не отображfется вообще.
Обратите внимание. что сам jpg-файл есть и он виден моей программе. иначе бы в мемо попадало значение 'd:\projects\images\0.jpg'.
Что я делаю не так?
Lazarus 1.0.14
FPC 2.6.2
Win7 32-bit
zozuliar
новенький
 
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Re: Lazreport. Картинка не грузятся.

Сообщение alexs » 03.03.2014 23:57:45

Он так не умеет пока.
Я буквально сегодня решал аналогичную задачу - отображение изображений, которые находятся не в БД (для картинок из таблиц всё просто).
Пока решение таково:
У frReport перепределяешь событие OnEnterRect и в нём определяешь загрузку изображения в объект:

Вот мой код:
Код: Выделить всё
procedure TMainDM.frMainReportEnterRect(Memo: TStringList; View: TfrView);
var
  S:string;
  ID:integer;
  MS: TStream;
begin
  if Assigned(View) and (View is TfrPictureView)  then
  begin
    S:=Trim(Memo.Text);
    if UTF8Copy(S, 1, 6) = 'PASPQ_' then
    begin
      UTF8Delete(S, 1, 6);
      id:=frParser.Calc(S);

      MS:=ImageLib.OpenImage(3, 0, ID);
      if not Assigned(MS) then exit;


      try
        if MS.Size > 0 then
        begin
          try
            TfrPictureView(View).Picture.Graphic:=TJPEGImage.Create;
            (TfrPictureView(View).Picture.Graphic as TJPEGImage).LoadFromStream(MS);
          except
            TfrPictureView(View).Picture.Graphic:=nil;
            MS.Position:=0;
            TfrPictureView(View).Picture.Bitmap.LoadFromStream(MS);
          end;
        end;
      finally
        MS.Free;
      end;
    end;
  end;
end;


А из отчёта в свойстве объекте TfrPictureView.Memo я передаю уже параметры изображения.
ImageLib.OpenImage - у меня хралище, которое возвращает поток с изображением.
В твёом случае вместо этого поставь TFileStream.Create
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Lazreport. Картинка не грузятся.

Сообщение zozuliar » 04.03.2014 12:02:38

А в каком файле я должен прописать этот код. чтобы переопределить событие OnEnterRect? В Unit2, где у меня описана форма, из которой вызывается отчёт? Или нужно что менять в исходниках lazreport'а и потом его пересобирать?

Добавлено спустя 3 минуты 47 секунд:
Просто непонятно, что такое
Код: Выделить всё
TMainDM
zozuliar
новенький
 
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Re: Lazreport. Картинка не грузятся.

Сообщение Little_Roo » 04.03.2014 12:09:29

zozuliar писал(а):Просто непонятно, что такое

Код: Выделить всё
TMainDM


видимо DataModule
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Lazreport. Картинка не грузятся.

Сообщение zozuliar » 04.03.2014 12:40:52

понятно, что дата модуль. Непонятно, в какой он программе или в каком пакете.
zozuliar
новенький
 
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Re: Lazreport. Картинка не грузятся.

Сообщение alexs » 04.03.2014 12:52:19

Это обработчи на твой frReport.OnEnterRect
У меня frMainReport находится в модуле TMainDM. Соответсвенно и код такой.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Lazreport. Картинка не грузятся.

Сообщение zozuliar » 04.03.2014 13:38:42

alexs писал(а):А из отчёта в свойстве объекте TfrPictureView.Memo я передаю уже параметры изображения.

А это как? Имя файла прописано руками в свойствах изображения? Или я что-то не понял?

Добавлено спустя 2 минуты 22 секунды:
Возникла проблема в том, что у меня в переменную S попадает значение "[[picture]]", а не значение переменной picture :(

Добавлено спустя 7 минут 37 секунд:
А-а-а-а-а. Понял.
Вместо
Код: Выделить всё
S:=Trim(Memo.Text)

нужно было писать
Код: Выделить всё
S:=frVariables['picture'];
zozuliar
новенький
 
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Re: Lazreport. Картинка не грузятся.

Сообщение alexs » 04.03.2014 16:06:47

Я вычисляю код изображения следующей строкой:
Код: Выделить всё
id:=frParser.Calc(S);
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 216

Рейтинг@Mail.ru