If you are following what’s happening around RAD Studio, you’ve likely seen our announcement in terms of a renewed C++ language focus, What’s Coming for C++Builder: An Amazing Preview. As a follow-up to our exciting C++Builder updates, we wanted to share some specifics on what we have planned for the other parts of the product, in particular our VCL and FireMonkey UI libraries.
A New Foundation For FireMonkey: Skia
RAD Studio’s multi device, cross-platform UI library is based on the concept of abstracting the actual rendering of the UI elements, using styles. Styles are implemented using some primitive graphical objects and elements, mapped by FireMonkey to different graphic drivers, from DirectX to Metal.
Over recent years, a library has emerged in this space, which offers a higher level of abstraction with more complex primitives while working on top of the same platform native drivers FireMonkey supports. This library is called Skia and it provides incredible power for 2D graphic applications of all kinds, along with a significant performance focus. Skia powers some of the most successful multi device applications today, starting with Google’s Chrome browser.
It is possible to use Skia to power FireMonkey applications today, by using the Skia4Delphi library, which is also available directly in GetIt. What’s coming along in future versions of RAD Studio is a deep and out-of-the-box integration of Skia and Skia4Delphi: By making it part of the product, we’ll offer a smoother experience and we’ll make it a first class citizen in the FireMonkey ecosystem. The advantages will include faster rendering, specifically on Android, but also a number of additional features and components available when using a Skia-based driver.
Notice that as part of the Skia support, we don’t just plan to use it as a FireMonkey GPU driver, but plan also including specific UI controls for FireMonkey and even for the VCL library.
(The SkLabel control supports multiple sections of a single label with different text attributes, as you can see in the Object Inspector)
VCL Modernization: The Return of MDI
On a totally different front, we know that a lot of our customers have existing VCL applications they want to keep active and modernize. The VCL library has continuously provided strong support for application modernization, such as HighDPI support, a sophisticated styling architecture, the use of newer versions of the platform controls, the integration of WinRT API, the support of MSIX deployment, and the integration of the WebView2 control (the Chromium-based engine of the Edge browser).
Over the past several years we have moved away from the support for the MDI model (the Multiple Document Interface). This is a relatively outdated UI paradigm, based on having multiple windows (showing the same type of content or different types) hosted in a container main window. As much as it is old-style, the MDI model can be effective and a lot of our customers have used it for a long time, have trained their users around it, and for these reasons they would rather keep using it. One of the downsides of using the VCL MDI model is that it’s a wrapper around the Windows platform support – and that support has many issues on HighDPI monitors, for example.
(above) An MDI Application with full styling support on High DPI, shown using the Glow VCL style (on the left) and the Aqua Light Slate VCL style (on the right)
After extensive research and engineering review, we have decided it was worth making an attempt to work around all of the main platform issues, and rework the VCL MDI model. While still based on the core platform API, we have worked around and addressed most platform issues. Additionally, we are introducing a new option for hosting MDI forms (or any form in general) in a tab based UI, as you can see below. For any of our customers using the MDI UI, the next release will offer a breath of fresh air – injecting some new life in applications. In particular we have focused on both HighDPI support and VCL styles support, so you can embrace all existing VCL modernization features also for MDI applications.
(above) The new tabbed based MDI model
And Much More
There is much more Embarcadero R&D is currently working on, in terms of libraries, IDE, compilers, platform updates and database access. The next release of RAD Studio will be a huge release for C++ developers, but it will be a very significant release also for Delphi developers, with enhancements in all of the product areas.
Stay tuned for more information in the coming months and early beta access, starting with our customers with an active Premium subscription.
Disclaimer: All new features and improvements discussed in this blog post for future versions of RAD Studio are not committed until completed, and GA released.
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition
The most important info, when it cames?
I assume you mean “when will it be available?”
Right now we are not at the stage where we can share any dates, even approximate ones. What I can tell you is that there is a lot of work going into this release and it is planned to include a super selection of new features and functionality (remember our disclaimer, nothing is definite until the release goes to General Availability) – and this kind of work takes time to integrate and get right. I know the team are working extremely hard on this and we’re all excited to see what is coming. Everyone wants it as soon as possible, I’m sure, and that’s the thing: it will be available as soon as we possibly can.
OpenCV integration?
Not sure what you mean by ‘integration’ as such. There are libraries out there for OpenCV -> https://github.com/Laex/Delphi-OpenCV-Class
Did you mean “OpenAI integration”? If so, right now, it’s very much a moving target plus I am sure there would be legal things to consider to include something like ChatGPT into the IDE permanently (Microsoft can get away with it since they have a sponsorship deal worth bazillions with OpenAI). There are plenty of developers who have created third-party OpenAI ChatGPT plug-ins though, available in GetIt:
We also have some articles on that too: https://blogs.embarcadero.com/is-powerful-ai-really-going-to-steal-our-jobs/
If you are interested in OpenCV, then I was able to build opencv-4.7.0 with all the additions and use it. The only problem in the latest version of the compiler was that SSE3 support was cut out. It is necessary to use the previous release of Embarcadero C++ if you want to use it.
👍
Fine
Great news!
Hi Marco,
Do you plan also to migrate IDE, compiler and DelphiLSP to 64bit ?
With huge projects, we have a lot of “out of memory” …
Thanks
That is the plan, but not ETA for now
That would be really good
I believe you should give more priority to a 64-bit IDE
Understood, and we’ve noted your comment about a 64bit IDE. It might not always seem like it, but we really do listen to everything we can – comments, questions, suggestions – everything – and try to act on things within the constraints of business and time. We want you to have the very best development tools possible and I promise you, it’s not just empty words and placations, everybody here at Embarcadero takes that goal to heart.
Please support rigth-to-left for tabbed MDI 🙂
I assume you mean RTL languages? Or do you mean the tab alignment?
tab alignment in vcl for MDI applications.
There is some specific attention being paid to MDI applications. While we can’t promise anything until a release becomes GA (generally available) we hope that there will be some significant – and welcome – improvements in MDI. Some of the issues do relate to widely documented problems with Microsoft’s MDI implementation but, that said, we recognize that MDI is still a UI paradigm which remains very popular with some developers and markets, and we intend to address some of those issues head-on.
What would be nice is in the past a form could be debugged as a app. later used in bigger app by setting that debugged form/codebase into another app by using a tabsheet as the client or Parent at runtime. So with a little threading work have the child forms running in the IDE. Like custom components this helps break the project up into smaller units.
The D11 is huge improvement! thanks
I’m not 100% sure what you mean by debugging a form as an app. Did you mean the FireUI tool? You can read about it here: https://docwiki.embarcadero.com/RADStudio/Alexandria/en/FireUI_Live_Preview. If that’s not what you meant could you explain a little more and I’ll see if I can help some more.
What is the ETA on the MDI issues like https://quality.embarcadero.com/browse/RSP-39899? It is a real issue in our migration from Delphi 2007 to D11.3 Will this be fixed before this MDI push? If not before I can only assume it will be deployed with?
Addressing that issue and many similar ones required a significant redesign of our MDI support, to work around actual bugs in the underlying Windows support. The issue should get addressed by this work, coming in the next release
Yes, this issue prevents us from using Styles to modernize our MDI application too.
The links in the e-mails from embarcadero is blocked by my internet provider due to security issues. Could you please make certain that all certificates are current and updated so the links are not blocked?
I just checked the Embarcadero domains via MX ToolBox and it doesn’t appear that we have any problems and all our DMARC type entries and applicable certificates are up to date. Not sure why you’re having problems receiving emails from us, it could be an issue with your own provider?
You can check MX records and many other useful settings for yourself here: https://mxtoolbox.com
OpenCV is What I mis, I have to use Visual Studio To build my apps with OpenCV. And thats not wat I want.
Not sure why you need VS for OpenCV – there are perfectly capable libraries for using OpenCV with Delphi: https://github.com/Laex/Delphi-OpenCV-Class
To what extent will existing VCL MDI based applications need a rewrite to take advantage of this new MDI architecture
The plan is to require almost no change in the code, for a regular MDI update, but even to move to a tabbed architecture.
Skia4delphi support Right To Left rendering correctly.Is it possible merging skia into product solve right to left typing in fmx?
Currently you can add the Skia4Delphi project to RAD Studio and you can then display text correctly with RTL orientation.
For controls the solution is more complicated and right now there’s not a perfect solution for FMX apps. For VCL apps BiDi text support is handled.
There is more on the subject of BiDi text in FMX here: https://www.fmxexpress.com/right-to-left-bidi-library-fmxrtl-for-delphi-10-2-firemonkey-on-android-and-ios/
Having “web” as a firemonkey platform would be a HUGE improvement. That’s one area that Flutter still has an advantage and Firemonkey could be the true one stop solution that everyone is looking for. If this feature is on the roadmap, please give us a hint, just to keep our hopes alive.
Thank you.
Using Pascal more than 30 years (from Delphi4) I always lack one feature in JIT debugger: switching frames during navigation through callStack window. Ones about 2 decades ago I’ve solved such a problem developing Whatch-Locals block for VS6-like C++ debugger in NeuroMatrix project. That time I was restricted in publications with my eployer secutity considerations. I wasn’t too upset as the solution seemed pretty simple and could be easily implemented by someone else. Now I’m too old to be hired and I code for fun only. But I continue to lack the feature so I want it to appear in RAD11+ Delphi and C-builder. I can participate providing I have the set of current version sources enough to compile the test configuration (main form, LDB for C and Pascal, make stuff – you know better). If you refuse my solution I will enjoy using it myself.
Interesting offer. Thanks for your comment Alex. You’re never too old to be hired (at least I hope not, I’m no youngster myself!)
Have you looked at the Parallel Debugger? https://blogs.embarcadero.com/new-ide-plugin-parnassus-parallel-debugger/. It sounds like it offers the same functionality?
Following your advice I’ve got acquainted with Dave and his great project. Isn’t it the best demonstration of ToolsAPI use? Encouraged, I tried to find there means for wrapping evaluator with context pointer and scopes for any call point in current stack. I failed. But the presence of (new/remove)sourcebreakpoint methods in IOTADebuggerServices interface make me suspect some ‘breakpoint’ class existance. IOTABreakpoint.DefaultTrigger method seems to check all conditions to stop/continue process, so it has to link to the stack of current thread. More, this method is a nice place to notify evaluator users (watches, locals, editor’s hint) of context change.
Having the source of this class you can derive the ‘fakebreakpoint’ descendant, instantiate it on callstack window doubleclick and destruct instance on another line click. In create you can save and set to restore on destroy thread’s context pointer (EBP value in IOTAThread.[get/set]OTAThreadcontextex methods) with the value found unwinding stack’s dynamic chain to selected level. Your call point context is ready (scopes were constructed in inherited create).
Some notifications may change (e.g. steps and run have to be disabled for all but top stack levels). You need to prevent or discard including these auxiliary objects to breakpoints container.
Not very large task, it took me a month or two to complete in 2003. And I was restricted with the place to work: the debug hardware (RS232 connected NeuroMatrix machine) was available only at office and was shared between several developers.
Don’t you know, what compile units am I to steal from Embarcadero?
Best wishes, Alex.
Really looking forward to the MDI updates! – please make sure it is properly tested with Styles, maximising and minimising, etc and Hi-DPI, and thank you for continuing to support all the investment in existing code, one of Delphi’s unique selling points!
When will arm be supported on the Linux platform,
Hi Joan, unfortunately right now we have no further news on Linux ARM availability at the moment. It is a very interesting topic, particularly due to the involvement of things like Raspberry PI loaded with a Linux O/S and other SBC form factors.
I’m hoping that the MDI rework will allow any form (not just the main form) to be an MDIForm. I have an app that has three different forms that are MDIForm and none of them are the first form in the app. I had to do some fairly tricky stuff to make it work.
If it doesn’t support any form as MDIForm, I at least hope it doesn’t stop my work-around from working.
Good evening everyone.
Are there any plans to compile directly for the web? Using WebAssembly for example?
Right now, we don’t have any specific plans we can share. WASM (Web Assembly) is a very interesting technology and it’s one of several that have some real benefits that are worth exploring. Currently. apart from our own built-in web components, there are also a number of really great third-party options for creating web apps using RAD Studio with a variety of approaches.