Исправления в импорте из 2.2.17 и в Demo
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.
надо подправить чтобы тот не утаскивал вконце строк знаки перевода строки
Сделал следующее
{$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.