Вставка картинки в FastReport
FastReport 2.51, Delphi 5, БД Paradox.
Переношу все отчеты с QuickReport на FastReport. И бьюсь со вставкой картинки (фото сотрудника) в FR. Изначально фотография вставляется в карточку сотрудника по кнопке "добавить фото". На форме присутствует TImage, названный как IFot, TOpenPictureDialog, называнный Op.
Есть таблица State.db с данными сотрудника и где в поле Foto хранится тектовое название картинки. Вот так добавляю фото (FCard - карточка сотрудника):
procedure TFCard.SpeedButton13Click(Sender: TObject);
begin
if not DM.StateFoto.isNull then
Op.FileName:=ExtractFileDir(Application.ExeName) + '\Foto\'+DM.StateFoto.AsString;
if Op.Execute then
begin
if Sed.Enabled then
begin
DM.State.Edit;
DM.StateFoto.AsString:=ExtractFileName(Op.FileName);
DM.State.Post;
end
else DM.StateFoto.AsString:=ExtractFileName(Op.FileName);
If not DM.StateFoto.IsNull then
begin
try
IFot.Picture.LoadFromFile(Op.FileName);
except
IFot.Picture:= nil;
if MessageDlg('Файл '+ Op.FileName +
' не найден или не соответствует формату bmp или jpeg. Очистить поле?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
DM.State.Edit;
DM.StateFoto.Clear;
DM.State.Post;
end;
end;
end
else IFot.Picture:= nil;
end;
end;
В QuickReport выводятся все поля карточки сотрудника и должна подключаться фотка. Подключаю таким образом:
QRImage1.Picture:=Fcard.Ifot.picture;
Но теперь переношу все отчеты в FastReport, и все хорошо, кроме этой фотки.
Если вставлять через переменную вот так:
procedure TFcrdprn.frRSimpleCardGetValue(const ParName: String;
var ParValue: Variant);
begin
if ParName = 'Foto' then
ParValue := Fcard.Ifot.picture;
Ничего не выходит. А если через поле, где в FR пишу [DM.State."Foto"], то естесственно, мне выводится только текстовое название фото, которое хранится в данном поле. А если через объект Picture... то тут вообще у меня затык.
Помогите, пожалуйста, а то я третий день не могу эту проблему решить. Только, пожалуйста, не отсылайте меня к Help, я его перепахала вдоль и поперек...
Переношу все отчеты с QuickReport на FastReport. И бьюсь со вставкой картинки (фото сотрудника) в FR. Изначально фотография вставляется в карточку сотрудника по кнопке "добавить фото". На форме присутствует TImage, названный как IFot, TOpenPictureDialog, называнный Op.
Есть таблица State.db с данными сотрудника и где в поле Foto хранится тектовое название картинки. Вот так добавляю фото (FCard - карточка сотрудника):
procedure TFCard.SpeedButton13Click(Sender: TObject);
begin
if not DM.StateFoto.isNull then
Op.FileName:=ExtractFileDir(Application.ExeName) + '\Foto\'+DM.StateFoto.AsString;
if Op.Execute then
begin
if Sed.Enabled then
begin
DM.State.Edit;
DM.StateFoto.AsString:=ExtractFileName(Op.FileName);
DM.State.Post;
end
else DM.StateFoto.AsString:=ExtractFileName(Op.FileName);
If not DM.StateFoto.IsNull then
begin
try
IFot.Picture.LoadFromFile(Op.FileName);
except
IFot.Picture:= nil;
if MessageDlg('Файл '+ Op.FileName +
' не найден или не соответствует формату bmp или jpeg. Очистить поле?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
DM.State.Edit;
DM.StateFoto.Clear;
DM.State.Post;
end;
end;
end
else IFot.Picture:= nil;
end;
end;
В QuickReport выводятся все поля карточки сотрудника и должна подключаться фотка. Подключаю таким образом:
QRImage1.Picture:=Fcard.Ifot.picture;
Но теперь переношу все отчеты в FastReport, и все хорошо, кроме этой фотки.
Если вставлять через переменную вот так:
procedure TFcrdprn.frRSimpleCardGetValue(const ParName: String;
var ParValue: Variant);
begin
if ParName = 'Foto' then
ParValue := Fcard.Ifot.picture;
Ничего не выходит. А если через поле, где в FR пишу [DM.State."Foto"], то естесственно, мне выводится только текстовое название фото, которое хранится в данном поле. А если через объект Picture... то тут вообще у меня затык.
Помогите, пожалуйста, а то я третий день не могу эту проблему решить. Только, пожалуйста, не отсылайте меня к Help, я его перепахала вдоль и поперек...
Комментарии
A: а) используйте обработчик события TfrReport.OnBeforePrint:
if View.Name = 'Picture1' then
TfrPictureView(View).Picture.LoadFromFile(...) or
.Assign or
.everything_what_you_want
б) в скрипте (объекта или его бэнда) напишите:
begin
Picture1.LoadFromFile(filename)
end
Достаточно положить в отчет пустую картинку с именем Picture1, и создать вышеописанный обработчик. Т.е.
if View.Name = 'Picture1' then
TfrPictureView(View).Picture.Assign(Fcard.Ifot.picture);
Спасибо большое, все получилось! И чем я только думала, когда писала...