Исправления в импорте из 2.2.17 и в Demo

LVMLVM
отредактировано 03:05 Раздел: FreeReport
1. В FR_Utils.pas
надо подправить чтобы тот не утаскивал вконце строк знаки перевода строки
Сделал следующее
{$IFDEF FREEREP2217READ}
function frReadString2217(Stream: TStream): String;
var
I: Integer;
begin
Stream.ReadBuffer(I, SizeOf(I));
SetLength(Result, I);
Stream.ReadBuffer(PChar(Result)^, I);
(*kill bad 0D 0A symbols from end*)
if (I > 1) and (Result[I-1] = #13) and (Result = #10) then begin
SetLength(Result, I-2);
end;
end;
{$ENDIF}
Для чтения всех атрибутов помогло кроме Memo там почему-то все равно остается строка как она пришла из ReadBuffer. Подскажите в чем дело????

2. В "Demos\CNVREPS\MainF.pas"
чтобы оно вообще работало надо также вокруг всего что связанно с статической переменной класса FRE_COMPATIBLE_READ закрыть в
{$IFDEF FREEREP2217READ}
иначе оно не компилится (D9)
Так фнукция FRELoadFromStream должна выглядеть следующим образом
procedure FRELoadFromStream(Report: TfrReport; Stream: TStream);
var
VersionB: Byte;
Len1, Len2: Word;
OldPosition: Longint;
begin
try
{$IFDEF FREEREP2217READ}
FRE_COMPATIBLE_READ := False;
{$ENDIF}
OldPosition := Stream.Position;
Stream.ReadBuffer(VersionB, SizeOf(VersionB));
if VersionB = 23 then
begin
Stream.Seek(4, soFromCurrent);
Stream.ReadBuffer(Len1, SizeOf(Len1));
Stream.ReadBuffer(Len2, SizeOf(Len2));
{$IFDEF FREEREP2217READ}
if (Len1 >2) and (Len1 <= 255) and (Len2 = 0) then
FRE_COMPATIBLE_READ := True;
{$ENDIF}
end;
Stream.Position := OldPosition;
Report.LoadFromStream(Stream);
finally
{$IFDEF FREEREP2217READ}
FRE_COMPATIBLE_READ := False;
{$ENDIF}
end;
end;
3. В "Demos\CNVREPS\MainF.pas"
Прилелал в демку созранение в новый формат fr3 TForm1.ConvertFile

if chbSaveFr3.Checked then begin
Filename:= ChangeFileExt(Filename,'.fr3');
frReport1.SaveToFR3File(Filename);
end
else
frReport1.SaveToFile(Filename);

Единственное кроме переводов строки почему-то картинки после конвертирования не показываются.

Исходников fr3 у меня нет поэтому разбираться дальше не стал

4. Также сделал простейшее конвертирование всего списка проходом по всем выделенным
(там еще в форме надо поправить атрибут множественного выделения чтобы работало)

procedure TForm1.sbConvertClick(Sender: TObject);
var
i: Integer;
begin
if lbFiles.SelCount = 1 then
ConvertFile(lbFiles.FileName)
else
begin
if lbFiles.SelCount > 1 then begin
for i := 0 to lbFiles.Items.Count-1 do
if lbFiles.Selected then
ConvertFile(lbFiles.Items);
end;
end;
lbFilesChange(lbFiles);
end;

PS Очень надеюсь, что данные исследования пригодятся.

Наконец небольшой оффтопик
To:Модераторы простите меня грешного, но действительно горят все сроки и нужна подмога (может вы кого посоветуете).
Отконвертированные формы (штук 7) надо подправить приделать к новой базе данных (Firebird) - модель печати подготовдленной документации.
Предпочтительная среда Cbuilder иначе как модуль Delphi. Наверное FR3 (при необходимости куплю :-) ). Срок 2 нед. Денег сколько договоримся (но сколько-то сотен у.е).
Я нахожусь в москве.

Владимир 7297419 в любое время или icq 9815422.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.