Since version 3.9.15 nuget packages of Reportman are availble also a new repository for .net development have been created
Bidi complex languages support is implemented sinc 3.9.15 version using DirectWrite in Windows and ICU-Harfbuzz in Linux. Since version 3.9.15
Bidi complex languages support is implemented sinc 3.9.15 version using DirectWrite in Windows and ICU-Harfbuzz in Linux. Since version 3.9.15
TRpDataset (rpdataset.pas) is a TClientDataset to buffer all the datasets passed to the engine that can feature grouping, so the main dataset go forward only (support for unidirectional datasets like SQLExpress), but the engine can remember at least two records to do grouping.
The method to implement TRpDataset is duplicate fields of new Dataset to a
newly created TClientDataset (rpdataset)
Then assign fields and post the record in memory...
for i:=0 to fieldcount-1 do
fields[i].Assign(fielddefs[i]);
It's a bit more complex because needs freeing memory (garbage old records)
This worked fine inclusive passing opened datasets to the engine until I updated to Delphi 7, where blob fields assignements are broken, I added the function AssignField(Source,Destination), and a compiler define, active for Delphi 7 (BLOBSTREAMBUG) so assignement for blobfields are patched in this function.
If you find an assignment fails using a particular type (like BCD) you can patch the assignment there, send me the bugfix so I will add a compiler define for the bug and add to the main tree.
BCD is a problematic type, see for example FormatVariant function in rptypes.pas.
Borland have changed the way it stores WideStrings because Utf8 support.
(TFiler,TWriter,TReader) since Delphi 6, so because the engine can be compiled
with any version of Delphi/Builder/Kylix, WideStrings properties are written
in a custom way, really they are written in the Delphi 4/5 way.
WideString properties are TRpLabel text, Font names, etc.
From classes.pas
procedure TWriter.WriteWideString(const Value: WideString);
var
L: Integer;
Utf8Str: UTF8String;
begin
Utf8Str := Utf8Encode(Value);
if Length(Utf8Str) < (Length(Value) * SizeOf(WideChar)) then
WriteMinStr(Value, Utf8Str)
else
begin
WriteValue(vaWString);
L := Length(Value);
Write(L, SizeOf(Integer));
Write(Pointer(Value)^, L * 2);
end;
end;
This causes a incompatibility with earlier versions of Delphi.
The workaround is a to store all the widestring properties as
special properties defined in DefineProperties of each report
streamable component, and write and read the widestrings using the
old Delphi 5 method.
This problem was fixed in 1.2 version.
Delphi 7 has a horrible bug, when you place a TCombobox in a form, with a empty selectable item (csDropDownList), at run time, selecting this item the application will crash (Win9x), or raise an exception in ntdll (WinNT) or work correctly (WinXP).
A patch for this issue is expected in a service pack, but for now all the empty selectable items of comboboxes are replaced with a a space (' ') to solve this issue. For your convenience the engine also includes a patch unit (D7GetComboBoxStringsPatch.pas) for your projects
The Open/Save dialog Windows CLX bug since Delphi 7
Delphi 7 has another horrible bug in CLX Open/Save Dialogs, a 'Drive C: not found' exception is raised if you try to select a file that is not in the root dir, but only in Win9x systems, in WinNT/XP works ok. Because for windows a pure VCL version is provided (repmandxp.exe) I don't worry about this issue but if you find a workaround feel free to send me it. You can reproduce it compiling repmand.exe for Windows and saving files in Windows 9x OS.