- Dark-light themes for IDE
- The IDE includes some of Andreas Hausladen’s “IDE Fix Pack” fixes and improvements (FINALLY!)
- High resolution timer caused by using Virtual Treeview.
- Findhinstance optimisations.
- Debugger using CREATE_DEFAULT_ERROR_MODE when creating the process.
- Tstringlist indexof and Name optimizations.
- High DPI Image List Support. Can fully support multi-resolution, pixel perfect images on all controls, as well as any custom drawing requiring scaled images for multiple resolution monitors.
- Tvirtualimagelist is fully compatible with and is a drop-in replacement for traditional image lists, including providing a HIMAGELIST handle, and can be used by both VCL controls and any code using Windows API image list calls.
- Timagecollection supports images with alpha channels, including pngs. You can also load old-style color-keyed transparency bitmaps and there are migration tools to assist converting traditional timagelists to the new image collection and virtual image list.
- Per Monitor V2 support. This allows VCL applications to scale correctly for all Windows scaling, and to respond to DPI scaling changes between different screens.
- Data Structures Growth Strategy. Several data structures (tstringlist, tlist, tlist <T>, tqueue<T>, tstack<T>) have now a flexible growth strategy when they are full and need to be expanded, compared to the x2 strategy of the past. The growth strategy can be replaced. The new growth strategy is implemented in a shared global function, declared in sysutils.pas: function growcollection(oldcapacity, newcount: Integer): Integer;
- Tstringbuilder Changes – improving its performance. The tstringbuilder enumerator has been optimized. New tostring method.
- Float32 and Float64 aliases added in System unit.
- Tmeminifile – 50 to 100% faster
- Inline variable declaration:
procedure Test1; begin var i: Integer := 22 + I; ShowMessage (i.ToString); end;
- Type Inference for Inline Variables:
- Inline Constants
const M: Integer = (L + H) div 2; // single identifier, with type specifier const M = (L + H) div 2; // single identifier, without type specifier
- For Loops With Inline Loop Variable Declaration
for var i: Integer := 1 to 10 do ... for var Item: TItemType in Collection do...
or with inference:
for var i:= 1 to 10 do ... for var Item in Collection do ...