Next generation cross-platform components

Our team is very hard at work to continue to extend and improve our products, extend the documentation and make new demos.
We do this on a daily basis to make sure we offer you the best solution for your projects!

In 2019 we focused primarily on our FNC framework. Not only improving our existing components, but also adding new products, such as the TMS FNC Cloud Pack, TMS FNC Dashboard Pack, …

And that because we truly believe that FNC is the next generation cross-platform framework!

Our FNC development originated from our vast experience and deep technical expertise developing FMX components since it first appeared in Delphi in 2011 and as it became available in TMS FMX UI Pack, TMS FMX Chart and TMS FMX Cloud Pack.
We developed it because with our experience, we thought there was a better way to create cross-platform UI controls.

The most important differences between FMX and FNC are:

  • Architecture based on orginal FireMonkey classes
     
  • Not easy to extend/customize
     
  • Performance is hard to achieve when complex UI controls involve many objects
  • Basic design-time integration
  • Supports the FMX framework only
  • New independent architecture built-up from scratch
  • Easily extendible with many customization options/events
  • Faster performance, high quality graphics
  • Enhanced design-time integration
  • Supports multiple frameworks (FMX, VCL, LCL and WEB)
  • High level of compatibility with older FMX code

TMS FNC components can be simultaneously used on these 4 frameworks:

TMS FNC components can be simultaneously used on different operating systems and browsers:

Unique advantages of FNC

  • an easy maintainable single-source cross-framework/cross-platform code base
  • seamless integration in new and existing applications, can be mixed with other regular FMX or VCL controls
  • high performance and high quality graphics
  • intuitive & consistent property layout to smoothen the learning curve
  • only 1 license & only 1 learning curve to create applications for VCL, FMX, LCL and WEB

Large range of FNC controls available

  • TMS FNC Blox: Add diagram and flowchart capabilities to your application.
  • TMS FNC Chart: Fully cross-platform chart for business, statistical, financial & scientific data
  • TMS FNC UI Pack: Powerful, feature-rich UI controls for 4 frameworks and 5+ operating systems
  • TMS FNC Dashboard Pack: Create dashboard applications for Windows, cross-platform and the web
  • TMS FNC Cloud Pack: Seamless access to cloud services from Windows, cross-platform and the web
  • TMS FNC Component Studio: Our time & cost saving bundle of all FNC components

Looking for components to enhance your cross-platform project? We invite you to visit the TMS FNC landing page where more information is provided, including key features, demos and more…

Upgrade your license to TMS FNC components and take advantage of the different possibilities to develop extraordinary projects.

Eager to try out our FNC components?

Contact sales@tmssoftware.com for the best discount upgrade offer depending on your currently purchased products.

Read More

Read More

Delphi Datasnap: How to know the name of the methods called by client in delphi datasnap server?

A great tip from [WayBack] Hi, need help regarding Datasnap. How to know the name of the methods called by client in delphi datasnap server? – sujansiddhi – Google+ that I needed a few months ago: Walter Prins: Inside TDSAuthenticationManager.OnUserAuthorize, inspect the EventObject.MethodAlias property. (Obviously once the method is actually called you implicitly know the methodname.) This was introduced in Delphi XE: [Archive.is] DSAuth.TDSAuthenticationManager.OnUserAuthorize – XE API Documentation [Archive.is] Authentication and Authorization – RAD Studio XE –jeroen
Read More

Curious about our new technologies, new challenges & new products for 2020?

It’s fascinating how everything evolves so incredibly fast in the software world!

So our team is also trying really hard to keep up with the latest developments.
And to give our customers access to all our latest developments we have created our no-nonsense subscription TMS ALL-ACCESS!
Because we want our customers to be able to use all our products with no restrictions or limitations.

And when we say ALL we really mean ALL our products we offer now and also all new products we’ll release in the year of the subscription. Moreover, our all-access users are the first to receive the previews and betas of our non-released products!

Here is a small overview of the new products we added in 2019:

  • April 2019:
    TMS FNC Cloud Pack: Seamless access to cloud services from Windows, cross-platform and the web. Included in the TMS FNC Cloud Pack is the ability to create/implement your own REST service client(s).
  • June 2019:
    TMS WEB Core Padua: New additions on many levels:
    Object Pascal to JavaScript compiler improvements, new web frameworks & controls support, new UI components, improved IDE integration.

  • July 2019:
    TMS VCL UI PACK: TMS Component Pack became TMS VCL UI Pack!
    All components were revised for high DPI & VCL Styles support and internally the TMS Component Pack completely moved to a new build platform that was already in use for our cross-platform FMX & FNC products.

  • November 2019:
    Introduction of a new groundbreaking product: “TMS WEB Core for Visual Studio Code”

    At the TMS Training Days in Düsseldorf, Germany as well as at the Be-Delphi conference in Belgium, José León Serna (creator of Delphi for PHP & former Embarcadero IDE lead architect) presentated the preview of TMS WEB Core for Visual Studio Code. After more than a year of hard work & intensive collaboration with the TMS team, this technology preview, with an almost complete feature set for the first release, was presented to the audiences.

  • December 2019:
    TMS WEB Core Ferrara:
    20 new features were added to TMS WEB Core v1.3.

  • December 2019:
    TMS FNC Blox:
    With FNC we aim for reusable code and when bringing TMS FNC Blox to the WEB we wanted to maintain compatibility with FMX, LCL and VCL as much as possible. By rewriting the persistence part of TMS FNC Blox and integrating it into TMS FNC Core it is possible to load blox files that have been saved in a VCL, LCL or FMX application into a TMS WEB Core client application. The code for creating and registering custom blocks in VCL, LCL or FMX is also compatible with TMS WEB Core.
  • January 2020:
    Coming up in January 2020: TMS WEB Core for Visual Studio Code BETA will be available for TMS ALL-ACCESS users!

And we have a long list of new component and new product ideas for 2020!

One of our many commitments for 2020: make user experience more pleasant!

Use the TMS Subscription Manager with a single login to get instant access to all products in your TMS ALL-ACCESS subscription.

  • TMS Subscription Manager categorizes the products per technology : VCL, WEB, FMX, BIZ, FNC, DEV, .NET, IntraWeb and LCL.
  • Per product, you get a description, link to the product webpage, info on latest available version and release date, info on your last download version and download date and info on your last product install version and date.
  • You can mark specific TMS products as your favourite products.
  • It allows you to start multiple downloads.
  • Behind the scenes, TMS Subscription Manager keeps a backup of any product versions you have downloaded. Right-click on the downloaded version number cell per product and from the context menu you can see all available versions (if there are any) and activate another version for install.
  • The TMS Subscription Manager keeps you always informed about the validity of your subscription and will guide you to the renewal order upon expiry.
  • From the TMS Subscription Manager there is a comprehensive list of links to interact with us, via email, social media, forums, RSS, Youtube videos …

So cover 2020 now with your TMS ALL-ACCESS license and you don’t have to do anything else for the rest of the year!
BTW did you know that the renewal price after 1 year is just 495 EUR ?!

Find out more about our products included in TMS ALL-ACCESS.

Read More

Read More

When You Don’t Know, What You Don’t Know

I've been in a rut for about the past six months. Not just a Delphi programming rut but a "life rut". What's worse, I knew I was in a rut and thought I was trying to get out of it only to realize I wasn't. Then this morning came and... I now know what I didn't know."I knew I was in a rut and thought I was trying to get out of it..."I was fascinated by a post in the Delphi Developer group on FaceBook written by a long-time VCL developer who is frustrated with making something work on an Android device. Admittedly, this person is not a GUI guy nor an OOP fundamentalist. I can totally relate to this. I have been using Delphi since it was Turbo Pascal 3. I am a traditional "top-down procedural" programmer who has been struggling to wrap my head around OOP fundamentals.One of the comments on this post stopped me dead in my tracks. It simply stated... "Put your login form in a TFrame" and gave a link to a GitHub repository of FMX Cross-Platform-Samples.https://github.com/FMXExpress/Cross-Platform-SamplesI've seen some of this FMXExpress stuff before but never knew about this GitHub repository. At the time of this writing there are 99 well organized Cross Platform Samples available. I've been looking for an excuse to rededicate myself to learning FMX cross application development in Delphi and this GitHub repository looks like the perfect spot for me to learn."I really don't know what GitHub is or how to use it."Now, I've heard of GitHub before and I've been to a few different GitHub repositories, but I really don't know what GitHub is or how to use it. This was the my first acknowledgement of YDKWYDK. So I jumped on lynda.com and looked for a course about GitHub and found this one called "Learning GitHub".About ten minutes into the course the instructor says "Projects allow you to visualize your work with Kanban-style boards." I've never heard of Kanban. What is Kanban? (More YDKWYDK)."What is Kanban?"I do another search within lynda.com and discoverd a course called "Stay Lean with Kanban".Wow, this Kanban stuff is really cool. In it's simplest form Kanban is a way to visualize and prioritize the workload. You visually see what you are doing and what needs to get done. You also eliminate waste by focusing on what's most important. This is done by limiting the work in progress.I'm about a third of the way through this tutorial and paused it to write this blog because of another YDKWYDK episode.As I was getting to understand this Kanban stuff it hit me. Why can't I use Kanban for my personal life?"Why can't I use Kanban for my personal life?"I can and I intend to do just that. There's a website for "Personal Kanban". There's also a book called "Personal Kanban: Mapping Work | Navigating Life".It's safe to say I have climbed out of my rut and I'm getting back at it. What a journey today has been...FB Delphi Developer > FMXExpress > GitHub > KanbanSemper Fi,Gunny Mike
Read More

Delphi RTL: Generic vs. Traditional Collections

Since Delphi got generic types, in the 2009 version, its runtime library (RTL) has a generic collections unit. The RTL however, still has the classic collections. Recently I got some requests about which is recommended to use, and while the discussion can go a bit deeper, I wanted to blog a high level overview. Classic Container Classes The most basic collection class in the RTL is the TList class (in the System.Classes unit), which represents a general list of pointers (or object references). The container classes (in the System.Contnrs unit) includes the following: TObjectList, which is a TList for TObject references and includes ownership support TComponentList, which adds to the ownership also the notification support all components have TClassList TOrderedList TStack and TQueue with TObjectStack and TObjectQueue Various bucket lists When you are using these containers you often need to cast from the type of the objects you are managing to the fixed type the list supports. This introduced the possibility of errors and causes some runtime delay if you continuously check the type of the objects extracted from the list with dynamic casts (like "as"): myList: TList; myList.Get(3) as TMyObject Generic Collection Classes Along with generic types in the language Delphi added a set of basic generic collections. These are defined in the System.Generics.Collections unit and offer a generic blueprint for containers tied to the specific data type you need. Generic collections include: TList, a basic generic list including support for sorting and enumerations TThreadList, a more thread-safe list with locking support TQueue and TStack TDictionary, a fairly powerful dictionary with customizable key and value types TObjectList which has ownership support for can be used only for object types, similarly to the other following containers TObjectQueue and TObjectStack TObjectDictionary TThreadedQueue Advantages of Generic Collections Generics collections offer the ability to define specific containers for given data types you need to use, and let the compiler check the data type compatibility, rather than doing the same at runtime. This results in cleaner and more readable code, more robust applications, and faster execution -- given the reduced need ot runtime checks: myList: TList ; myList.Get(3); // returns TMyObject All of the new libraries and subsystems in Delphi use the new collections, for example FireMonkey leverages them a lot rather than using the traditional coding style. Any Reason not to Use Generic Collections? There are basically two reasons for not using the new collections. One is that if you have existing working code, you might not want to change it. Even more if the code is in a library (like VCL) changing it could cause incompatibility in code that uses the library. The other reason is that generics in Delphi cause a significant code bloat, because for any data type used by the collection the class methods are replicated, even if almost identical. In very large applications, this has a negative effect on compile and link time and on executable side. Additional Generic Collections Finally, I want to mention that if you use generic collections heavily, you should consider those available in the Spring4D library, which extends what we have in the RTL. See the documentation at https://bitbucket.org/sglienke/spring4d/wiki/Collections Again this is meant to be a short summary and I know I could have been more extensive and precise, hope it is helpful to some of the old developers not fully aware of our generic collections -- which was the goal of the blog post.
Read More

Sylt App für den Urlaub (バケーションアプリ) – クールアプリセレクション

本日のクールアプリセレクションは、Rolf Eschenbach氏の「Sylt App für den Urlaub(バケーションアプリ)」です。このアプリセットは、バケーション情報のワンストップ・リソースで、役に立つツールや情報がいっぱい詰められています。FireDACとFMXコンポーネントを使ってDelphiによって構築されており、AndroidとiOSプラットフォームで利用できます。(read more)
Read More