Thursday, October 01, 2015
TMS All-AccessWe introduced the TMS All-Access subscription which is an easy no-nonsense subscription to simply ALL our products. ALL products means all products we offer now but also all new products we'll release in the year of the subscription. It gives you also access to betas, previews and of course our priority support services. So, with TMS All-Access, you never have to worry again if you will miss something or if you have to take budget in account for future products. TMS All-Access has you covered for VCL, FMX, .NET, IntraWeb and new frameworks we'll start to support in the coming months.
TMS Component Pack v8.0A major update of our popular UI suite, featuring meanwhile over 400 components was released. Highlight of this new release is TAdvTreeView. TAdvTreeView is a high-performance & feature-rich, multi-column treeview that easily handles millions of nodes. TAdvTreeView can be used in virtual & normal modes. Other new components are TAdvMultiInputQueryDialog and TAdvScrollMenu and as always, there are numerous extensions to existing components in the suite.
TMS VCL Cloud Pack, TMS FMX Cloud PackThe goal of our TMS Cloud products is to make consuming popular cloud services from your client applications as seamless as possible. Be it from Windows VCL apps, FMX cross platform apps, .NET Windows or web apps or IntraWeb web apps, with our cloud components, access to these cloud services is plug & play. In new versions of the cloud packs is now also support for Google Analytics, GMail, Google Sheets, Trello & Stripe payments.
TMS Hands-on training dayOur team also started the planning of a new focused hands-on training day on using our components. In a small group, we aim to give you as much as possible insights, tips & tricks in using our VCL, FMX, Cloud components. Number of attendees is kept small to have as much interaction as possible and have the ability to look at your specific questions. A few places are still available, so register quickly if you want to participate.
TMS Flexcel DLLWe're proud to have released a new product this month, which is TMS Flexcel DLL. With TMS Flexcel DLL, the power of the Flexcel library to natively handle .XLS, .XLSX files becomes available to any programming language for Windows that is able to use DLLs.
TMS Pack for FireMonkey v3.2Also for TMS Pack for FireMonkey, we released a major update. Our flag-ship suite of FMX controls features grids, planner, rich-text/html editor, syntax highlighting memo and with this new release from now on also a powerful treeview control. This high-performance, editable, optionally multi-column treeview deals with millions of nodes in a regular or virtual way. Also new is a virtual keyboard for touchscreens on Windows and Mac OS X.
RAD Studio 10 Seattle supportOur entire product suite got support for RAD Studio 10 Seattle. All active registered users get free updates of our products with now included RAD Studio 10 Seattle support.
New developmentsAnd if this was not enough, our team was meanwhile also busy with research on new developments on VCL, FMX components as well as new products in the area of cloud, node.js, embedded C++, IoT, mobile, remoting, replication and more... Watch this space for announcements soon.
This blog post has not received any comments yet. Add a comment.
Wednesday, September 23, 2015Application Transport Security feature that enforces a secure network connection. This means that in a default RAD Studio 10 Seattle project, the default TWebBrowser but also our TTMSFMXWebBrowser, TTMSFMXWebGMaps,
TTMSFMXWebOSMaps components and the TMS Cloud Pack for FireMonkey cloud services can no longer make a connection to the web. A solution for this issue is to add the following key to the Info.plist file: <key>NSAppTransportSecurity</key>
</dict> As the Info.plist is automatically generated based on the project options, there is no option to specify a boolean key in a dictionary. To make sure the Info.plist file contains the correct keys in order to link against iOS 9 we have created an iOS9Fix command line executable and a post-build command. 1) Copy the iOS9Fix.exe & iOS9Fix_config.txt files to the project directory. 2) Add the following post-build command to your project options. call "$(PROJECTDIR)iOS9Fix.exe" "$(OUTPUTPATH).info.plist" If the above steps are executed correctly, your application should then be able to make a connection with one of the components mentioned in this blog post. The solution with the above instructions can be downloaded at http://www.tmssoftware.net/public/iOS9Fix.zip
Monday, September 14, 2015
- TMS VCL UI components for Windows application development.
- TMS FireMonkey UI components for cross-platform FireMonkey application development.
- TMS components to access cloud services from Windows and FireMonkey applications.
In tentative program
- 09h00-09h30: Registration & coffee
- 09h30-10h30: In depth with TMS VCL components pt 1
- 10h30-10h45: Q&A
- 10h45-11h15: Coffee break
- 11h15-12h15: In depth with TMS VCL components pt 2
- 12h15-12h30: Q&A
- 12h30-13h30: Lunch
- 13h30-14h30: In depth with TMS FireMonkey components pt 1
- 14h30-14h45: Q&A
- 14h45-15h15: Coffee break
- 15h15-16h15: In depth with TMS FireMonkey components pt 2
- 16h15-16h30: Q&A
- 16h30-17h30: In depth with TMS Cloud components
- 17h30-17h45: Q&A
We also suggest to bring your laptop if you want to follow the samples live or if you want one of our experts to have a look at your implementations. For a maximum interactivity, the number of seats will be limited to 20 persons.
Registrations until October 31stThe cost of the TMS training day is 75 EU + VAT. This includes a full day access to the sessions and coffee/drinks during this day. A hot meal is served for lunch.
- Signup here via the online registration form.
- Kennedy Hotel, Pres. Kennedypark 1, B-8500 Kortrijk
- Free parking
- Nearby highway (E17) exit
- Facilities for hotel rooms at the event are available for international attendees
Wednesday, August 12, 2015TMS XData is its powerful querying capabilities. With no extra line of code in your server, clients can choose how to retrieve the server objects, filter them, set an order, etc..
For example, you can perform a GET request to get Customer objects but filter only those which name is John:
http://server:2001/tms/xdata/Customer?$filter=Name eq 'John'
You can also filter by properties of associated objects, at any level. The next example gets all customers which associated country name is "USA":
http://server:2001/tms/xdata/Customer?$filter=Country/Name eq 'USA'
You can use order, top and skip to get paged results (get next 20 orders from 41st one):
And, of course, you can combine all those with parenthesis and relational operators to build really complex queries:
http://server:2001/tms/xdata/Customer?$filter=(Name eq 'John' or Name eq 'Jack') and Country/Name eq 'USA'
But the purpose of this post is to tell about the new built-in functions introduced in version 1.5. They increase flexibility of the queries even more. Functions that extract part of of a date/time property were added, so now you can for example filter invoices for year 2014:
http://server:2001/tms/xdata/Invoice?$filter=year(IssueDate) eq 2014
There are of course similar functions to extract Month, Day, Hour, Minute and Second.
String-related functions were also added. Upper and Lower were introduced:
http://server:2001/tms/xdata/Customer?$filter=lower(Name) eq 'paul'
You can also use length function to retrieve the length of a string in characters:
http://server:2001/tms/xdata/Customer?$filter=length(Name) eq 15
And Position and Substring functions can also be used to retrieve the position of a substring in a string (Position) or to retrieve part of a string (Substring). They would be the equivalent of Delphi functions Pos and Copy, respectively:
http://server:2001/tms/xdata/Customer?$filter=substring(CompanyName, 2, 4) eq 'oogl'
http://server:2001/tms/xdata/Customer?$filter=position('jr', Name) gt 0
And it's worth to remember that having TMS Aurelius working behind the scenes, all those queries will work the same way regardless of the database your are using at the server side, be it MS SQL Server, MySQL, Oracle, or any supported database you want. Best part is that it's not going to stop here, stay tuned for future releases that will bring even more querying features!
This blog post has not received any comments yet. Add a comment.
Sunday, June 07, 2015
Step 1: getting Apache up and running
If Apache is already setup on your device, skip this step, otherwise, from the command line, execute:
$ sudo apt-get install apache2
The Raspberry Pi 2 LED flashes for a short while and when completed, verify it is working by opening a browser on a machine in the network and navigate to the IP address of the Raspberry Pi 2 like http://192.168.1.100. When install was successful, you'll be greeted with an "It works!" page.
Step 2: install PHP and tools
In case you had Apache already configured with PHP 5, you can also skip this step.
To install, execute following commands:
$ sudo apt-get install php5 $ sudo apt-get install php5-gd $ sudo apt-get install sqlite $ sudo apt-get install php5-sqlite $ sudo apt-get install php5-curl
After some more LED flickering, these steps will also be executed and the Apache environment with PHP 5 is ready.
Step 3: install ownCloud
To install ownCloud, start by downloading the latest distribution. At this time, this is v8.0.3 and is downloaded with:
$ sudo wget https://download.owncloud.org/community/owncloud-8.0.3.tar.bz2
Next step is to unpack the ownCloud distribution and install it under Apache.
$ sudo mv owncloud-8.0.3.tar.bz2 /var/www $ cd /var/www $ sudo bunzip2 owncloud-8.0.3.tar.bz2 $ sudo tar xf owncloud-8.0.3.tar
Step 4: setting up ownCloud
To finalize, the data folder for ownCloud must be created and an admin account added.
The data folder is created with following steps:
$ sudo mkdir /var/www/owncloud/data $ sudo chown www-data:www-data /var/www/owncloud/data $ sudo chmod 750 /var/www/owncloud/data
At this time it is more convenient to continue the setup from a browser. Either start the graphical shell on the Raspberry Pi 2 or connect from a browser on an external machine and navigate to http://localhost/owncloud or from external machine http://192.168.1.100/owncloud/
The first screen that appears is to create an admin account, so add the credentials for an admin account on this page. With this account added, owncloud is up and running and ready for use.
Step 5: Connecting from Delphi to ownCloud
Now Delphi kicks in and with a little help from the TMS Cloud Pack, let's start using ownCloud from a Delphi app.
Start your IDE, make sure TMS Cloud Pack is installed and drop the component TAdvCalDAV on the form. Configure the TAdvCalDAV component to access your ownCloud. Verify the ownCloud primary CalDAV address by opening the calendar app within ownCloud via: http://192.168.1.100/owncloud/index.php/apps/calendar/ and in the bottom left corner, click on settings where this primary address is shown. By default, this should be:
So, now we can configure the TAdvCalDAV component to connect to ownCloud on Raspberry Pi 2:
try AdvCalDav1.URL := 'http://192.168.1.100/owncloud/remote.php/caldav/'; AdvCalDav1.Username := 'tms'; AdvCalDav1.Password := 'tmsrocks!'; AdvCalDav1.Active := true; except Exit; end;
After a successful connect, the calendars and their events available on ownCloud can be retrieved, here by filling the info in a listview:
var i: integer; cdi: TCalDavItem; li: TListItem; begin // get events for i := 0 to AdvCalDav1.Items.Count - 1 do begin cdi := AdvCalDav1.Items[i]; if cdi.vCalendar.vEvents.Count > 0 then begin li := ListView1.Items.Add; li.Caption := cdi.vCalendar.vEvents.Summary; li.SubItems.Add(FormatDateTime('dd/mm/yyyy hh:nn',cdi.vCalendar.vEvents.DTStart)); li.SubItems.Add(FormatDateTime('dd/mm/yyyy hh:nn',cdi.vCalendar.vEvents.DTEnd)); li.SubItems.Add(cdi.vCalendar.vEvents.Location); li.SubItems.Add(cdi.vCalendar.vEvents.Description.Text); li.Data := cdi; end; end; end;
Adding a new calendar item is equally easy:
var cdi: TCalDavItem; li: TListItem; begin // set the calendar for the event cdi := AdvCalDav1.Items.Insert('Personal'); // add item to the "Personal" calendar cdi.vCalendar.vEvents.Add; cdi.vCalendar.vEvents.Summary := 'Schloss Dyck Classic Days'; cdi.vCalendar.vEvents.Location := 'Jüchen, Deutschland'; cdi.vCalendar.vEvents.Description.Text := 'Automobile Kulturgeschichte auf der Museums-Insel'; cdi.vCalendar.vEvents.DTStart := EncodeDate(2015,7,31); cdi.vCalendar.vEvents.DTEnd := EncodeDate(2015,8;2); cdi.Post; end;
or modifying an existing item
var cdi: TCalDavItem; li: TListItem; begin cdi := ListView1.Selected.Data; cdi.vCalendar.vEvents.Summary := 'Schloss Dyck Classic Days 2015'; cdi.Update; end;
Similar to accessing the calendars of ownCloud, you can also access the contacts with the TAdvCardDAV component in a very similar way. And this rounded up my little weekend fun experiment. With so much ubiquitous computing power around and wonderful technology, aren't we living in very exciting times?
Previous | Next | Index