Blog Options


<< July 2019 >>



Most Recent Post  |  Next Post  |  Previous Post  |  Index List

FNC Partner Program


Monday, July 29, 2019


Starting from today, the FNC Partner Program goes live, so what exactly is the FNC Partner Program? The FNC Partner Program is a program that allows you, as a developer, create your own FNC controls and sell/offer them on your own website, as a certified FNC Partner. But that is not all, below is a list of benefits the FNC Partner Program has to offer:

  • Direct access to our FNC experts for deep technical insights & questions
  • A free license to all our FNC products
  • Access to FNC product betas
  • Showcase your components on our FNC component partner directory page
  • Our marketing team will happily promote your components


Below is an overview of what FNC has to offer.

TMS FNC Controls can be simultaneously used on these frameworks:

TMS FNC Controls can be simultaneously used on these operating systems/browsers:

TMS FNC Controls can be simultaneously used on these IDE's:

Getting Started

The FNC Partner Program helps you in creating your own FNC component via a 3 step process.

Create your own FNC components and start making money or let others benefit from your work or even contribute to it! Have you created your own FNC components? Let us know! If we assess it as valuable for other FNC developers, we will add it to our directory and add you or your company to the partner program and offer you a free TMS FNC Component Studio license. Develop and sell your component to our and your clients!


Curious on how FNC Components are created? Take a look at the following page, which offers a set of components that we have developed:

The Google Cloud Service components are based on TMS FNC Core and TMS FNC Cloud Pack
The Category List is based purely on the TMS FNC Core

Start developing today!

Pieter Scheldeman


This blog post has not received any comments yet. Add a comment.

macOS 64 bit compile-ready support


Tuesday, July 23, 2019


macOS 64 bit compilation support has been added to our products. Below is a list of products that are currently enabled to compile for macOS 64 bit

We continue adding macOS 64 bit support to our other products, and will mention that in the version history whenever an update is released.

macOS 64 bit compile-ready support?

Our products are prepared to compile for macOS 64 bit, but this is not automatically enabled. Unfortunately, RAD Studio Rio 10.3.2 is an update that uses the same version number as older RAD Studio 10.3.* versions and therefore we have decided to not automatically install for macOS 64 bit, but make it compile-ready. To compile your applications for macOS 64 bit, please follow the steps below.

  1. Install/Update one of the products in the above list
  2. Update the macOS 64 bit library path with the path to the source files
  3. Compile/Deploy your application for macOS 64 bit by changing the target

MapView TMS mCL

TMS mCL originally has a MapView component that was working in a 32 bit macOS operating system and was then removed from the frameworks due to technical reasons. Now, with 64 bit, you will be able to use the MapView component again.


Please provide any feedback regarding macOS 64 bit compilation support so we can further improve our products.

Pieter Scheldeman


This blog post has received 7 comments. Add a comment.

TMS VCL UI Pack is here, the next generation of TMS Component Pack

Bookmarks:  Since we launched TMS Component Pack back in 1998, it has been our flagship product for user interface controls for VCL based Windows application development with Delphi & C++Builder. In the past 21 years, a lot happened. Unicode support was introduced, Win64 support added and more recently, VCL got support for (per monitor) high DPI and VCL Styles (including extra VCL styles from the DelphiStyles company). Embarcadero started offering in 2011 the FMX framework for cross platform development for which we meanwhile also developed a large number of cross platform user interface components and it became crucial to differentiate products by technology, like TMS FMX components, TMS FNC components, ... and more recently also TMS WEB components...

After 21 years, we thought it was time to better align the VCL user interface components with our other product ranges and naming convention and therefore proudly introduce its successor product TMS VCL UI Pack v10.0. But there is much more to it than a name change for aligning it with other product lines. Internally we also completely moved the TMS Component Pack to a new build process that was already in use for our cross-platform FMX & FNC products.

The benefits are:

  • Moved to a new build & installer generation process allowing more frequent releases, faster rollout of improvements and fixes and also beta builds
  • Builds of full trial versions for all supported Delphi & C++Builder versions
  • In short term we will also submit a version for GetIt to facilitate download & install from the IDE itself
  • Faster migration & support to upcoming new Delphi & C++Builder versions
  • Better install/uninstall experience
  • Consistent & clear product naming
  • Focus on improvements for high DPI and VCL styles support across the entire TMS VCL UI Pack components
  • New components: Kanban board UI VCL control and TableView UI VCL control
  • Updated PDF generation library with new features
  • Keep components backwards compatible with TMS Component Pack v9.x components

A glimpse at what is new:

In TMS VCL UI Pack v10.0, we have not only 2 new VCL components but also several improvements to existing components:

  • TAdvKanbanBoard component, a highly configurable workflow visualization component

  • TAdvTableView component, a versatile & modern supercharged list control

  • PDF generation library improvements such as the capability to add rotated text
  • Support for VCL Styles

What does it practically mean?

Let there be no misunderstanding. We paid the utmost importance to make the step for you as easy as possible while moving the TMS Component Pack to our new build platform. Normally, it should be as simple as uninstalling TMS Component Pack + download and install TMS VCL UI Pack and recompile your applications with the new version. Some notes though:

  • If you use runtime packages, you will need to change the package name dependencies
  • If you use TAdvTreeView, we moved this component from using TCanvas to TAdvGraphics. When opening form files using TAdvTreeView, ignore possible property errors, save the form file and recompile.
  • If you use C++Builder, you will need to change the linked library name references in your project
We have summed up these steps in detail in a file migrate.txt that is included in the TMS VCL UI Pack install folder.

Moving to TMS VCL UI Pack

TMS VCL UI Pack v10.0 is the new product name for TMS Component Pack v10.0. This means all users entitled to get TMS Component Pack v10.0 automatically receive TMS VCL UI Pack v10.0. Also, users with an active subscription to TMS ALL-ACCESS, TMS VCL Subscription or TMS Component Studio receive TMS VCL UI Pack v10.0 automatically.

For your convenience, for a while we will simultaneously keep offering access to TMS Component Pack v9.x. So, users with an active TMS Component Pack license will get both TMS Component Pack v9.x and TMS VCL UI Pack v10.x and users purchasing a TMS VCL UI Pack license or upgrading to TMS VCL UI Pack will also still get access to TMS Component Pack v9.x. Of course, as it concerns mostly the same components, these cannot be simultaneously installed in the IDE. But if, for one of the reasons above, a migration would require some work on your side to change package name references for example, you can freely chose when to plan this change and continue to use TMS Component Pack v9.x till you have time and are ready to switch to TMS VCL UI Pack.

What's next

First of all, with our processes streamlined here, we will be even more efficient & productive to roll out new TMS VCL UI Pack versions with new features, new components and improvements more frequently and faster. The new naming convention should bring more clarity as to what technology the product can be used with. Similar work has been started here already for other TMS VCL products and all will get the TMS VCL xxx productname nomenclature in the coming months.


Still having questions, comments or feedback? Don't hesitate to leave a comment here on the blog or contact support for all questions and suggestions or sales for questions related to upgrading to TMS VCL UI Pack from older TMS Component Pack licenses or smaller VCL component bundles. We look forward to hear from you!

Bruno Fierens


This blog post has received 18 comments. Add a comment.

FNC Code Gems: Helpers for Base64 encoding and decoding


Friday, July 19, 2019

In the last post, I looked at methods to help you get information about connected displays and determine the path name for common folders. Let’s look at something very valuable when you want to convert binary data into a string: Base64 encoding.This is somewhat tricky if you have to consider all the different platforms and frameworks. FNC makes it very easy!

Again, the class TTMSFNCUtils offers awesome methods to get results quickly:

class function FileToBase64(const AFile: TTMSFNCUtilsFile): string;
class function Decode64(const AValue: string; 
                        const AURL: Boolean = False): string;
class function Encode64(const AValue: string; 
                        const AURL: Boolean = False): string; overload;
class function Encode64(const AValue: TBytes; 
                        const AURL: Boolean = False): string; overload;  

Not only are there methods to encode and decode strings, there is also FileToBase64 which allows you to retrieve the Base64 string for a file using a single line of code:

LBase64String := TTMSFNCUtils.FileToBase64( 'mydata.bin' );

Ignore the data type of AFile to specify the filename. In VCL and FMX the type TTMSFNCUtilsFile it is mapped to a string. However, for web applications you cannot specify a local file name and the method has to be invoked differently. There is no inverse function for this as it is already a one-liner in Delphi now to store a string or a byte array into a file using TFile from System.IOUtils.

In order to encode a string, call Encode64; call Decode64 to decode a string:

LMyBase64String := TTMSFNCUtils.Encode64( 'testtest', false );
LMyTestString   := TTMSFNCUtils.Decode64( LMyBase64String, false );

Remember, these methods are available for VCL, FMX, LCL, and TMS Web Core.

Holger Flick


This blog post has not received any comments yet. Add a comment.

TMS FNC Core 1.4 update with 2 new components


Wednesday, July 17, 2019


We are happy to announce TMS FNC Core 1.4 is available for all active and registered customers! It includes 2 new components and a lot of smaller improvements and fixes.

  • TTMSFNCPDFLib: Non-visual component for creating rich content PDF documents.
    • HTML formatted text support
    • Drawing primitives such as lines, rectangles, ellipses and custom paths
    • Support for horizontal and vertical linear gradients
    • Separate Fill and Stroke implementation
    • URL support
    • Unicode character support
    • Cross platform
    • Support for images drawing with optional stretching, aspect ratio
    • Text flow in multiple columns
    • Overflow detection and calculation
    • Numerous predefined page sizes
    • Optional page header and footer

  • TTMSFNCGraphicsPDFIO: Non-visual component based on TTMSFNCPDFLib to export UI controls such as TTMSFNCGrid, TTMSFNCPlanner, TTMSFNCChart as well as the complete dashboard controls set and many more.

There is an accompanying guide (PDF) that can help get your application set up with these 2 new components.

Separate Product

We are also excited to announce that TMS FNC Core will be available as a separate product. As already mentioned in the intro, TMS FNC Core has received a major update with 2 new components, but has already been the heart and soul for all FNC products for a long time. It includes a lot more "hidden" functionality that can be used separately from any other FNC product. Below is a list of some of the most important features.

  • JSON reading, writing and parsing functionality
  • Base64 and URL encoding and decoding
  • Component persistence
  • Undo/Redo Manager
  • Verification of numeric, alphanumeric character sets
  • Message, file open and save dialogs
  • Easy access to application and documents folder
  • Open files and URLs
  • Bitmap container for storing JPEG, PNG, ICO, GIF and many more image formats with optional automatic URL downloading mechanism

Coming Up!

Making TMS FNC Core available as a separate product doesn't change anything for your current subscription, we only want to make this available as we are planning partnership opportunities, with you as a customer, in the future. Developing your own controls, libraries based on TMS FNC Core will allow you to write the code once and target multiple frameworks/operating systems. Stay tuned for more news coming up in the near future!

Pieter Scheldeman


This blog post has not received any comments yet. Add a comment.

Using Bootstrap themes and runtime theme selection in TMS WEB Core applications

Without a doubt, Bootstrap is one of the most popular CSS libraries for web applications. Using Bootstrap, you can easily create a consistent and modern looking web application. Since its inception, TMS WEB Core is designed to be totally open with respect to using a CSS library like Bootstrap or any other CSS library.

Basically, using HTML templates for your form files, you have the full HTML/CSS power to your disposition but also when building forms via the Delphi form designer there is help to use and integrate CSS.

Every TMS WEB Core UI control has at least the ElementClassName property from where you can set CSS classname(s) for the main HTML elements in the control. Where multiple HTML elements are used in UI controls, often multiple Element*ClassName properties exist. The Eleent*ClassName property editor in the IDE is smart, as it provides automatically lookup of possible CSS class names. This lookup is based on CSS libraries you might have added manually or via a library to your application.

But, back to Bootstrap! Given this is such a popular & powerful library, we've gone an extra step from TMS WEB Core v1.2.4.0 facilitating the ease of use to use it from the IDE and also to allow runtime Bootstrap theme selection.. To get started with Bootstrap in your project, select from the project context menu in the Project Manager under "Managing JavaScript Libraries" jQuery 3.3.1 (since Bootstrap 4 uses jQuery) and Bootstrap 4.3.1.

Now, at form level you have a new property TWebForm.CSSLibrary = (cssNone, cssBootstrap). Default this is cssNone but when you set it to cssBootstrap, this is picked up by UI control when these are added to the form so these new UI controls get optimally preset for Bootstrap.

To illustrate this, when we add a new checkbox to a form with CSSLibrary = cssNone, this becomes:

Now, when we set the form.CSSLibrary to cssBootstrap and add a checkbox, you can notice that a number of the TWebCheckBox properties got preset for optimal rendering with Bootstrap.

WebCheckBox.ElementButtonClassName = 'custom-control-input'
WebCheckBox.ElementClassName = 'custom-control custom-checkbox'
WebCheckBox.ElementFont = efCSS
WebCheckBox.ElementLabelClassName = 'custom-control-label'

When rendered, the result is:

Of course, we can further fine-tune CSS classnames after adding UI controls on the form and the form will not override any custom settings you might have done.
For example, below you can see a TWebPanel with a default style, a Bootstrap style and customized Bootstrap style:

The panel Bootstrap style is:

WebPanel.ElementBodyClassName = 'card-body'
WebPanel.ElementClassName = 'card'
But, if we further customize the WebPanel.ElementClassName and make it a Bootstrap style 'card shadow p-3 mb-5 bg-white rounded' it will render as:

Dialogs will also automatically pickup the Bootstrap style when used on a form with CSSLibrary = cssBootstrap. Standard, the call:

  MessageDlg('Do you like the new Bootstrap capabilities?',mtInformation, [mbYes, mbNo]);
results in:

When Bootstrap is used, it automatically becomes:

Bootstrap themes

Now, we have used the standard Bootstrap CSS style and while some like it because it is so recognizable and consistent, other people prefer to create something that stands out. There are various possibilities. Given the standarization the Bootstrap CSS class names, it is easy to use libraries that build on Bootstrap like mdbootstrap for example. When we add the mdbootstrap cdn reference <link href="" rel="stylesheet"> to a TMS WEB Core project, it becomes:

And there is more, on the internet you will find lots of Bootstrap themes, many of which are free and open source. A nice collection can be found at:

We have added a new demo that shows how you can use such themes and even how you can change the theme of your TMS WEB Core web application at runtime easily.
Basically, to use a Bootstrap theme from , we need to add a theme.css after including the Bootstrap CSS library. To switch such theme at runtime, we can use the TApplication methods ChangeCSS(), InsertCSS(), RemoveCSS().
So, from the demo we have included several such theme.css files to the project

To perform the theme selection at runtime, we have added a TWebListControl that lists the available themes and from the list OnClick event, switching the theme is as easy as:

procedure TForm3.WebListControl1ItemClick(Sender: TObject;
  AListItem: TListItem);
  WebListcontrol1.ItemIndex := AListItem.Index;

  if WebListcontrol1.ItemIndex = 0 then

In the other panel, you can see a radiogroup and a way to show messageboxes, so you can see the effect of the selected theme also on these controls and dialogs.

Something else noteworthy in the demo is the easy of use to create a responsive design. This is achieved with the TWebResponsiveGridPanel. This grid panel is used to show the two panels under each other on small devices like smartphones or portrait tables and next to each other on desktop browsers or landscape tablets.

The use of TWebResponsiveGridPanel to create such responsive design is really easy. When we double-click it, we can see the two possible layouts. When the device screen width is smaller than 700, the style is "1fr", meaning one full width column is used and for the screen width larger than 700, style is "1fr 1fr", meaning the screen width is divided in two equally wide full column widths.

The TWebResponsiveGridPanel.WidthStyle is configured here as ssPercent and TWebResponsiveGridPanel.WidthPercent is 100%, so the TWebResponsiveGridPanel always takes the full screen width. The TWebResponsiveGridPanel.HeightStyle is set to ssAuto. This means that the height of the panel automatically adapts to the content of the panel. This means the height will be the height of the panel child controls when two columns are used and twice the height of the child panels when the panels are rendered under each other on smartphone screens.

Well, what is easier than let you see and play with the demo live from your favorite browser?
Go here for the themes demo!

Excited to go ahead and discover these and more fascinating features in TMS WEB Core that let you create web client applications with unprecedented capabilities?

You can download the trial version, go ahead with the standalone version you purchased or with TMS WEB Core and additional tools that are all included in TMS ALL-ACCESS. Our team looks forward to all your comments, feedback, feature-requests to help steering the development of TMS WEB Core to the next stages!

Bruno Fierens


This blog post has received 3 comments. Add a comment.

Most Recent Post  |  Next Post  |  Previous Post  |  Index List