Stay in touch

Add your e-mail address here to receive the monthly TMS Software alerts.


Product releases
Product articles
Technical articles
Website changes
Software development


<< >>
September 2014

Friday, August 29, 2014

TMS Day in Denmark on November 4th

We are excited to announce that Jens Fudge, Embarcadero MVP for Denmark, and TMS software are planning a TMS day in Denmark on November 4th.

All day, sessions will be spent on TMS VCL components, TMS cloud components and TMS FireMonkey components with also sufficient session time allocated to handle your specific questions on TMS components. The sessions will be given by Bruno Fierens, Embarcadero MVP in Belgium and CTO from

Tentative session program:

  • 9h00-9h30 : Registration & coffee
  • 9h30-10h30 : Getting the most out of TMS VCL grids
  • 10h30-11h00: Coffee break
  • 11h00-12h00: Embracing the cloud with TMS cloud components
  • 12h00-12h30: Q&A
  • 12h30-13h30: Lunch
  • 13h30-14h30: TMS FireMonkey components including TMS grid for FireMonkey
  • 14h30-15h00: Coffee break
  • 15h00-15h30: An introduction to TMS iCL & TMS mCL
  • 15h30-16h00: Tricks with TMS VCL components
  • 16h00-17h00: Q&A and round-table discussion on Delphi components & Delphi development with TMS components in general

Sign-up now for the TMS Day in Denmark in Videnpark Trekanten, Fredericia, Denmark on November 4, 2014. The cost of the TMS Day is only a small fee 20EUR (150DKK) for the food during this day. The price of food will be deductible from any future purchase from TMS software. Don't delay your registration as the number of seats is limited. During sign-up please also express your interests for topics during this day and possibly questions you might have so we can fine-tune the session program as much as possible to your needs. A few weeks in advance, we will then present the final session program.

Signup here via the online registration form


Bruno Fierens

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

Monday, August 25, 2014

Visualize TMS Planner event relations with arrows

It's already for a longer time that our Planner scheduling components supports linking events. That means that when the start time or end time or both times of an event is changed, the start or end time of a linked event will also change. The change in start or end time of linked event will have the same delta as the source event. The link action of choice can be selected with PlannerItem.LinkType and offers following choices:

  • ltLinkFull: when start time and end time of the event is changed, the start and end time of the linked item also changes.
  • ltLinkBeginEnd: when the start time of an event is changed, the end time of the linked event also changes.
  • ltLinkEndBegin: when the end time of an event is changed, the start time of the linked event also changes.
  • ltLinkBeginBegin: when the start time of an event is changed, the start time of the linked event also changes.
  • ltLinkEndEnd: when the end time of an event is changed, the end time of the linked event also changes.
Now, it may not always be desirable that any type of linking will affect the start or end time of the linked item, a visualization might be sufficient. For this case, we have added the link type: ltNone. At the same time, a better visualization of linked items will also benefit "classic" linked items. Therefore, in the latest version of the TMS Planner, we went one step further and have now optionally visual connections with lines with arrows between linked events. To see how easy it is to set this up, imagine two events were created with the code:
  plit1,plit2: TPlannerItem;
  plit1 := Planner1.CreateItem;
  plit1.ItemStartTime := EncodeTime(10,0,0,0);
  plit1.ItemEndTime := EncodeTime(12,0,0,0);
  plit1.ItemPos := 0;
  plit1.CaptionType := ctText;
  plit1.CaptionText := 'item 1';
  plit1.Text.Text := 'link from';
  plit2 := Planner1.CreateItem;
  plit2.ItemStartTime := EncodeTime(14,0,0,0);
  plit2.ItemEndTime := EncodeTime(16,0,0,0);
  plit2.ItemPos := 1;
  plit2.CaptionType := ctText;
  plit2.CaptionText := 'item 2';
  plit2.Text.Text := 'link to';

When applying one link with code:
  plit1.LinkedItem := plit2;
  plit1.LinkType := ltLinkFull;
then moving or resizing the event "item 1" will result in event "item 2" also moving or resizing. Moving or resizing event "item 2" will not cause changes to event "item 1". When we'd want a bidirectional link, we'd initialize the link with:
  plit1.LinkedItem := plit2;
  plit1.LinkType := ltLinkFull;
  plit2.LinkedItem := plit1;
  plit2.LinkType := ltLinkFull;
In a next step, we'll visualize the link between items with arrow lines. To enable link visualization in the TMS Planner globally, set Planner.ShowLinks = true and set Planner.LinkArrowShape = asFilled when you want fully filled arrows instead of just arrows (asNormal). To have two events that are linked with an arrow line from one event to the other event without specific link relationship, setup the items with:
  plit1.LinkedItem := plit2;
  plit1.LinkType := ltLinkNone;
  plit1.LinkArrow := laFromTo;
  plit1.LinkColor := clGreen;
To have the arrows go in both directions, simply set the property LinkArrow to laBoth as in this sample:
  plitA.LinkedItem := plitB;
  plitA.LinkType := ltLinkNone;
  plitA.LinkArrow := laBoth;
  plitA.LinkColor := clRed;

We hope you'll find this new feature useful and you can benefit from it to create better applications for your customers. Check out this and more in the TMS Planner.


Bruno Fierens

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

Friday, August 22, 2014

TMS iCL native iOS peer 2 peer communication

We've created a short (8 minute) presentation / demo video to show you how our newest native iOS peer 2 peer communication component in TMS iCL works. It shows how you can send an object and text via Bluetooth or local WiFi to nearby peers. Underlying, everything is done via 100% native iOS APIs, so, no Indy or other libraries are being used.

Check out the video here:


Bruno Fierens

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

TMS software at Delphi Tage 2014 in Bonn, Germany

We're looking forward to be present at the Delphi Tage 2014 in Bonn, the community event for Delphi enthusiasts.

For Delphi Tage 2014, TMS software will:

1) Sponsor the community evening on Friday 5 Sept, so you can have more drinks & food.

2) Exhibit on the conference day on Saturday 6 Sept.

3) Bruno Fierens will present a session on using TMS Pack for FireMonkey UI components and TMS Cloud Pack for FireMonkey to create feature-rich cloud enabled cross platform applications.

4) We'll show our latest developments at the booth.

5) Four TMS team members will be present to guide you through our components and assist you when you have questions.

6) We're working on a "social-enabled" prize-draw app all attendees will be able to follow via Twitter. Follow @tmssoftwarenews at Delphi Tage 2014 and see what you have won.

7) We're putting together lots of prizes to win: licenses, T-shirts and several kinds of beer that was locally brewed in our region.

In short, we're excited to be at Delphi Tage 2014 and hope you'll be numerous to join us for this community event! See you in Bonn, Germany in September.


Bruno Fierens

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

Tuesday, August 19, 2014

TMS XData v1.0 released

We're pleased to introduce today TMS XData, another important part in the TMS Business Subscription line-up of tools & components to let you write better & faster business logic for local, Windows-only, cross-platform and multi-tier solutions, in short, the entire spectrum of Delphi applications you can develop.

TMS XData is a full-featured Delphi framework that allows you to create HTTP/HTTPS servers that exposes TMS Aurelius, our Delphi ORM, objects through REST/JSON calls. With JSON being the defacto language for data communication via internet, these objects can be consumed by Delphi desktop or mobile clients but also any other client written in other languages.

TMS XData builds upon TMS Sparkle, the framework that offers classes for high performance HTTP/HTTPS client and server services for Windows, Mac-OSX, iOS, Android. TMS Sparkle is fully cross-platform but uses behind the scenes platform native APIs for the best possible performance.

To see how TMS XData can help you build multi-tier applications that consume TMS Aurelius ORM objects, suppose you have an Aurelius class mapped like the following.
[Entity, Automapping]
  TCustomer = class
  strict private
    FId: integer;
    FName: string;
    FTitle: string;
    FBirthday: TDateTime;
    FCountry: TCountry;
    property Id: Integer read FId write FId;
    property Name: string read FName write FName;
    property Title: string read FTitle write FTitle;
    property Birthday: TDateTime read FDateTime write FDateTime;
    property Country: TCountry read FCountry write FCountry;
With just a few lines of code you can create an XData layer to expose those objects. Creating the XData HTTP server module is explained here. You could retrieve an existing TCustomer with id equals to 3 using the following HTTP request, for example:
GET /tms/xdata/Customer(3) HTTP/1.1
Host: server:2001
And the JSON representation the customer will be returned in the body of HTTP response:
  "$id": 1,
  "@xdata.type": "XData.Default.Customer",
  "Id": 3,
  "Name": "Maria Anders",
  "Title": "Sales Representative",
  "Birthday": "1980-05-20",
  "Country": null

You can perform changes to objects through the REST interface, using POST method to create new objects, DELETE to remove objects, and PUT or PATCH to update the objects. The following example will change the value of Title property of the customer resource specified in previous example:
PATCH /tms/xdata/Customer(1) HTTP/1.1
Host: server:2001
  "Title": "Marketing Manager" 
You can also perform queries on existing objects. The following example will retrieve all customers with country name equals to "USA", ordered by customer's name.
GET /tms/xdata/Customer?$filter=Country/Name eq 'USA'&$orderby=Name&$top=10 HTTP/1.1
Host: server:2001
And server will return with a JSON array of objects containing all the filtered objects. You can use query paging to restrict the number of objects returned in each request.

There is much more to explore in this exciting new framework. You can get started by downloading the trial version for Delphi XE2.. XE6 at and check out the full documentation


Bruno Fierens

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

Previous  |  Next  |  Index

Copyright © 1995 - 2014 TMS Software v4.0