Archive<< July 2019 >>
- FNC Partner Program
- macOS 64 bit compile-ready support
- FNC Code Gems: Helpers for Base64 encoding and decoding
- TMS FNC Core 1.4 update with 2 new components
- FNC Code Gems: Display information and common folders
- FNC BETA with 2 new components
- One Codebase - Multiple Targets
- TMS WEB Core: Integrating the Froala Editor
- Ate too much candy? Calculate and export your BMI to PDF with FNC for the WEB!
- Free Books to Learn more about Web Development
- TMS VCL UI Pack is here, the next generation of TMS Component Pack
- Using Bootstrap themes and runtime theme selection in TMS WEB Core applications
- Adrian Gallero (21)
- Bart Holvoet (2)
- Bernard Roussely (1)
- Bruno Fierens (226)
- Gjalt Vanhauwaert (1)
- Holger Flick (15)
- Marcos Douglas B. Santos (5)
- Masiha Zemarai (12)
- Nancy Lescouhier (32)
- Pieter Scheldeman (21)
- Roman Yankovsky (1)
- Tunde Keller (3)
- Wagner R. Landgraf (63)
Most Recent Post | Next Post | Previous Post | Index List
Monday, July 29, 2019
IntroStarting 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
FNC?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 StartedThe 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?Curious on how FNC Components are created? Take a look at the following page, which offers a set of components that we have developed: http://www.tmssoftware.com/site/fncpartners.asp
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!
This blog post has not received any comments yet. Add a comment.
Tuesday, July 23, 2019
IntromacOS 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
- TMS FMX UI Pack
- TMS FMX Chart
- TMS FMX Cloud Pack
- TMS FMX WebGMaps
- TMS FMX WebOSMaps
- TMS mCL
- TMS FNC Core
- TMS FNC Cloud Pack
- TMS FNC UI Pack
- TMS FNC Blox
- TMS FNC Chart
- TMS FNC Dashboard Pack
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.
- Install/Update one of the products in the above list
- Update the macOS 64 bit library path with the path to the source files
- Compile/Deploy your application for macOS 64 bit by changing the target
MapView TMS mCLTMS 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.
FeedbackPlease provide any feedback regarding macOS 64 bit compilation support so we can further improve our products.
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
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.
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!
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. Lets 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.
This blog post has not received any comments yet. Add a comment.
Wednesday, July 17, 2019
IntroWe 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 ProductWe 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!
This blog post has not received any comments yet. Add a comment.
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.
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:
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:
WebPanel.ElementBodyClassName = 'card-body' WebPanel.ElementClassName = 'card'
Dialogs will also automatically pickup the Bootstrap style when used on a form with CSSLibrary = cssBootstrap. Standard, the call:
begin MessageDlg('Do you like the new Bootstrap capabilities?',mtInformation, [mbYes, mbNo]); end;
When Bootstrap is used, it automatically becomes:
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="https://cdnjs.cloudflare.com/ajax/libs/mdbootstrap/4.8.5/css/mdb.min.css" 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: https://bootstrap.themes.guide/
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 https://bootstrap.themes.guide/ , 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); begin WebListcontrol1.ItemIndex := AListItem.Index; if WebListcontrol1.ItemIndex = 0 then Application.RemoveCSS('themecss') else Application.InsertCSS('themecss',AListItem.Text+'/theme.css'); end;
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!
Most Recent Post | Next Post | Previous Post | Index List