Noutați

Coming in TMS WEB Core v1.7: Miletus

When it comes to bringing web applications to a desktop enviroment the choice falls on Electron as it’s the most popular framework among web developers. We offer support for Electron applications already, but the downside is always there: it’s a 3rd party solution that we have no control over. At the end of the last year we asked ourselves if we can provide an alternative that fits us better. A few months later here we are about to release a beta version of TMS WEB Core v1.7 with Miletus! What is Miletus exactly? Named after Thales of Miletus, Miletus is a framework that enables TMS WEB Applications to run as desktop applications and it also provides access for native features. In a nutshell, you can fully reuse code created for a web application, take advantage of HTML/CSS for creating a modern & spectacular responsive user interface, access local files & local databases or closely integrate with operating system capabilities and still easily deploy the application as standalone executable. Our colleague Holger Flick explains it in more detail how one could create such Miletus application with TMS WEB Core: Let’s take a look at the available classes, functions and components that will enable you to interact with native operating system functionalities! Classes and functions TMiletusStringList: Read and write local text files. TMiletusBinaryDataStream: Similarly to TMiletusStringList this enables you to write and read local binary files. It also provides multiple formats to access the data. TMiletusClipboard: Read from and write to the OS clipboard. TMiletusShell: Exposes some shell functionalities: open a file with its default application, open an external URL with the default browser, move files to the trash and show files in the containing folder. GetCursorPos: Returns the position of the cursor. GetMiletusPath: Returns the common paths. StartFileDrag: Start dragging a file from your application to any destination where the file is accepted. Components TMiletusOpenDialog: Displays a native open dialog and returns the selected path(s). TMiletusSaveDialog: Similarly to TMiletusOpenDialog, it displays a native save dialog and returns the selected path. TMiletusMessageBox: Shows a native message dialog. The labels, the dialog type, the buttons and the verification checkbox are all customizable. TMiletusErrorBox: Shows a native error message dialog. TMiletusMainMenu: Creates and appends a native main menu to the form where it’s dropped. TMiletusPopupMenu: Creates and displays a native popup menu  TMiletusNotificationCenter: Allows you to show notifications on the operating system.  TMiletusWindow: Allows the creation of multiple application windows which can be linked to forms or other sources. TMiletusTrayIcon: Creates a tray icon on the OS tray. An optional popup menu can be assigned to it. TMiletusFileWatcher: Monitors a list of files for changes. Each file has its own event handler which will be triggered when the file has changed. TMiletusGlobalShortcuts: Add a list of keyboards shortcuts that will be recognized even when the application is not in focus.  What about database support? We also added support for local databases! The component TMiletusClientDataSet makes it easy for a Miletus application to create and use local databases by a familiar syntax of using TClientDataSet. It also allows a seamless integration of multiple types of databases with data-aware components like TWebDBGrid, TWebDBTableControl, TWebDBEdit etc… All the database operations can be done in the standard Delphi way through the TMiletusClientDataSet component.  We prepared 5 database drivers to […]

Read More

Sneak preview of what’s coming in FNC

Intro There are a lot of things going on in the TMS labs at the moment. We announced a lot of great improvements and new features for the upcoming TMS WEB Core 1.7 (https://tmssoftware.com/site/blog.asp?post=772) as well as a couple of past and future platforms FNC runs on (April Fools’ Day joke …). Today we are proud to announce a new platform is coming for FNC. (NOT an April Fools’ Day joke !). Sneak preview Before we want to announce exactly which platform is going to be supported in all it’s glory, here is a sneak preview. What’s coming? FMXLinux official support is coming in the near future! We are currently working hard to make all FNC components compatible with FMXLinux which means there will be a TTMSFNCWebBrowser based on WebKit (https://webkitgtk.org/), a REST based TTMSFNCCloudBase working with Curl (https://curl.se/), PDF export based on our own implementation and much much more! Of course, you can also expect all components that are working based on TMS FNC Core to have FMXLinux support. Stay tuned for more info coming real soon!

Read More

Discover The Powerful Custom ModernListView Library For Cross-Platform Development in Delphi FireMonkey

The website www.fmxexpress.com has an article with some really detailed information about the ModernListView Library. Lets check what they are saying. “Developer rzaripov1990 has a custom ListView component over on Github for Firemonkey in Delphi 10 Berlin. The ListView is the central component for every mobile application, and as a developer you should always choose the one that can be heavily customizable and very easy to use/implement. This modern ListView component is available for Delphi 10 Berlin with FireMonkey on Android, IOS, OSX, and Windows”. What are the features of the ModernListView Library? One nice feature is that it has both horizontal and vertical mode. Thus, using ListView.Horizontal := true ListView.Horizontal := true enables the list to display the cells (items) in a horizontal perspective, while ListView.AutoColumns := true // (default behavior) ListView.AutoColumns := true   // (default behavior) displays the items vertically. If you are an artist when designing your look and feel of the application, this component can customize every graphic aspect such with available events such as: SetColorItemSelected, SetColorItemFill, SetColorBackground, SetColorItemSeparator, SetColorText, SetColorTextSelected, SetColorTextDetail, SetColorHeader, SetColorTextHeader, and many other properties. The properties are self-explanatory, no need to cover them here. With the AutoColumns and ColumnWidth properties, the component will automatically calculate the best fit appearance and position for the items when populating the list (very useful when dealing with large number of items). Apart form the standard behavior events, you have OnColumnClick listener for the ListView. You also have the option to hide/show the scroll bars (ListView.ShowScrollBar), set indent for items separators (ListView.SeparatorLeftOffset and ListView.SeparatorRightOffset). How much does the ModernListView Library cost? The component is free and has some nice demos with it as well. For the moment it is available only for Delphi Berlin using FireMonkey, very useful too if you build multi-device applications. Using ModernListView Library Let’s get a better view of what is this all about. We will now go through some of the components, their design and what they do. Colorizer ListView1.SetColorItemSelected(TAlphaColorRec.Orangered); ListView1.SetColorItemFill(TAlphaColorRec.Whitesmoke); ListView1.SetColorItemFillAlt(TAlphaColorRec.Lightgrey); ListView1.SetColorBackground(TAlphaColorRec.Whitesmoke); ListView1.SetColorItemSeparator(TAlphaColorRec.Red); ListView1.SetColorText(TAlphaColorRec.Darkmagenta); ListView1.SetColorTextSelected(TAlphaColorRec.Blueviolet); ListView1.SetColorTextDetail(TAlphaColorRec.Darksalmon); ListView1.SetColorHeader(TAlphaColorRec.Crimson); ListView1.SetColorTextHeader(TAlphaColorRec.Whitesmoke); ListView1.SetColorTextHeaderShadow(TAlphaColorRec.grey); ListView1.SetColorPullRefresh(TAlphaColorRec.Lime); ListView1.SetColorPullRefreshIndicator(TAlphaColorRec.Limegreen); ListView1.SetColorStretchGlow(TAlphaColorRec.Limegreen); set custom color for item if ListView1.IsCustomColorUsed(ListView1.ItemIndex) then ListView1.SetDefaultColorForItem(ListView1.ItemIndex) else ListView1.SetCustomColorForItem(ListView1.ItemIndex, TAlphaColorF.Create(random(255) / 255, random(255) / 255, random(255) / 255, random(255) / 255).ToAlphaColor);   if ListView1.IsCustomColorUsed(ListView1.ItemIndex) then     ListView1.SetDefaultColorForItem(ListView1.ItemIndex)   else     ListView1.SetCustomColorForItem(ListView1.ItemIndex, TAlphaColorF.Create(random(255) / 255, random(255) / 255, random(255) / 255, random(255) / 255).ToAlphaColor);   Horizontal Mode ListView1.Horizontal := true; Columns Mode (only vertical) ListView1.ColumnWidth := 160; ListView1.AutoColumns := true; Events event for AutoColumn mode procedure OnColumnClick(const Column: Integer; const X, Y: Single; const AItem: TListViewItem; const DrawebleName: string);   procedure OnColumnClick(const Column: Integer; const X, Y: Single; const AItem: TListViewItem; const DrawebleName: string);   called when end of list procedure OnScrollEnd(Sender: TObject);   procedure OnScrollEnd(Sender: TObject);   Methods Style for ListView Columns Mode ListView1.ShowScrollBar – hide/show scrollbar ListView1.ItemsClearTrue – correct delete items ListView1.OffsetTop – indent of the first element ListView1.OffsetBottom – indent of the last element ListView1.getFirstVisibleItemIndex – first visible ItemIndex ListView1.getVisibleCount – amount of visible items ListView1.getLastVisibleItemindex – first visible ItemIndex + amount of visible items ListView1.SeparatorLeftOffset – indent for separator line ListView1.SeparatorRightOffset – indent for separator line ListView1.EnableTouchAnimation – enable/disable touch animation The list is long, so if you want to see all of it and try the library, just go to Github, download and test this package: https://github.com/rzaripov1990/ModernListView Note that the screen shots and some of the text in this article are drawn from the above GitHub repository.

Read More

The Excellent Windows Ribbon Framework For Delphi

The Windows Ribbon framework is a magnificent command presentation system that implements a fresh option to the layered menus, toolbars, and task panes of common Windows applications. This Delphi library allows Delphi developers to utilize the Windows Ribbon Framework in their Delphi applications. This library uses the native Windows Ribbon Framework library to implement the ribbon functionality. It does not emulate the Ribbon user interface as other Delphi component sets do and that’s a good thing. Windows Ribbon Framework Features This Delphi library is much more than a simple header translation. It has the following features: Complete translation of the UI Ribbon header files.  A class library that provides higher-level access to the Ribbon API.  A control for dropping on any existing VCL form that automatically loads the ribbon and maps ribbon commands to equally named VCL Actions. Delphi-versions of the UI Ribbon Samples from the Windows SDK.  A feature-complete semi-visual Ribbon Designer.  The Ribbon Designer comes with a WordPad template that lets you quickly create a Ribbon that looks virtually identical to the WordPad accessory that comes with earlier versions of Microsoft Windows. Check out the Ribbon Framework for Delphi here!

Read More

Incredible Workflow Automation Mobile App For Loggers

This great Android and iOS workflow automation app allows company or third party loggers / loaders to logon to a corporate LIMS database and create loads while loading it to trucks in forest. How does this Delphi app help with workflow automation? According to the developer, “Load can be created by scanning a predefined trip ticket. Each load is then associated with GPS location and along with load information is sent to Central server using Data line or WiFi connection. Loader Loads can then be sent to receiving station which can be matched to received loads for full Chain of Custody.” Using the app allows loaders and loggers to enter and manage details on their load slips without using a pen.  The company also says this “ensures truck loads are shipped and properly tracked“.  Delph’s cross-platform capabilities really help companies like 3Log with this kind of workflow automation and modernization. What sort of workflow automation does “LoaderWiz” provide? Here’s a brief extract from the company’s website.  LoaderWiz can: Create loads and barcoded trip tickets in the woods even when there is no internet connectivity.  load data is stored in local database on device. Synchronize bidirectionally with your corporate LIMS system when connectivity is available to conveniently download sources, trucks, trip tickets, and other key information needed.  You can then create loads and synchronize completed loads back to LIMS. Prove chain of chain of custody using GPS stamp. Print tickets with QR barcodes to portable Zebra printers and hand it to truck drivers. Electronically transfer a ticket with barcode to a truck driver’s device (if driver is using WeighWiz Mobile) which can then be used to expedite weighing in and out at scale site without him/her leaving truck. Lookup and review processed and delivered loads using a smartphone as well as run real-time reports.  Users can also manage trip tickets and scale data faster with less paperwork, more detail, and greater accuracy. Website 3LOG LoaderWiz Google Play 3LOG LoaderWiz Screenshot Gallery

Read More

Learning Programming In Delphi: Use This Astounding App

The developer says in their description that this application will teach learning programming in Delphi together with developing application using the RAD Studio Delphi IDE. How is this app helpful for learning programming in Delphi? There are over 50 Delphi lessons – Delphi.uz articles, a Delphi Programming Tutorial Module, eBooks in addition to free video tutorials, Subjects covered include “Enhanced and Fastest UI”, “Internet Connections using SSL”, “Smaller and bigger code sizes”, “Wrapping code” as well as a whole collection of other great resources for Learning Programming in Delphi. Website Delphi Examples Google Play Delphi Examples Screenshot Gallery Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder. Design. Code. Compile. Deploy.Start Free Trial   Upgrade Today    Free Delphi Community Edition   Free C++Builder Community Edition

Read More

TMS FNC Maps v1.4 released!

What’s new?  The second TMS FNC Maps update of 2021 includes integrated directions for Google Maps and MapKit along with map rotation in TTMSFNCMapKit. Introducing TTMSFNCMapKit A new stand-alone component for Apple MapKit JS is available in TMS FNC Maps v1.4.: TTMSFNCMapKit includes integrated directions and map rotation as component specific features with more to come in the near future. Integrated directions with step by step instructions TTMSFNCGoogleMaps and the new TTMSFNCMapKit component now include support for directions out of the box. All you have to do is drop one component on the form, assign a valid API Key and you’re good to go! Addresses and locations are geocoded automatically and the calculated route is displayed on the map with just a single line of code.     TMSFNCMapKit1.AddDirections(‘New York’, ‘Washington DC’); Optional configuration parameters are available including but not limited to: Polyline color and width Hide markers or polyline or both Indicate if travelling by car or on foot Also, step by step instructions and route details (displayed in the bottom-left corner of the screenshot below) are returned in an event.  Map Rotation Another new feature exclusive to the TTMSFNCMapKit component is the ability to rotate the map programmatically. Again with only one line code the rotation of the map can be changed.   TMSFNCMapKit1.Options.MapRotation := TMSFNCMapKit1.Options.MapRotation + 45; Update Now! Update now to get all the latest and greatest TMS FNC Maps updates and get started exploring the new features!

Read More

Your familiar HotSpot Image comes to the TMS FNC UI Pack v3.3

We have a new major release of the TMS FNC UI Pack, next to some fixes and new features, we have added the TTTMSFNCHotSpotImage to the already extensive set of powerful and feature-rich UI controls that can be used cross framework and cross platform with just one code base. 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:   TTMSFNCHotSpotImage This component is already known to VCL and FMX users and for the TMS WEB Core users who don’t know the component, you can compare it with the idea of an Image Map. The TTMSFNCHotSpotImage (further referred to as ‘hotspotimage’) gives you the ability to choose one image and then add different areas (hotspots) with which you can interact and each of them can have their own appearance. TTMSFNCHotSpotImageEditor Our team considers the convenience of visually creating and configuring your components, that is why an editor was created to help you design your hotspots. This can be done in designtime by a double click or right-click on the hotspotimage. To give you full control over your hotspotimage, the editor is also available in runtime. Hotspotimage Demo To let you get more familiar with the component, we have created a demo application that you can find here. This topic describes the steps we have taken to create such a demo application. It is a simple example of a selection game that shows a lot of features. You’ll need to find the correct country for a given capital. The TTMSFNCHotSpotImageEditor (further referred to as ‘hotspotimage editor’) can be used to create the hotspots of the different countries. All of the following can be done in the code as well. But to give an example of the possibilities, we will explain how to this visually. The image can be added in the editor or with the Bitmap property. On the top of the editor there is a toolbar that can be used to create or manipulate the poylgons. Because there is a high contrast and the edgy shape of the different countries, the Magic Wand was the perfect tool to create the polygons. In the panel on the right, you have the buttons ‘Hover’, ‘Selected’ and ‘Down’. With these buttons you can change the appearance for the different states. If none of the hotspots are selected in the listbox, then you are able to change the default appearance used on newly created hotspots in the different pages. On the other hand, if you select a hotspot, you can change the appearance for the specific hotspot. This way, I’ve changed the Fill kind of the polygon to a texture with an image of the flag. You can also change the stroke and font used by the hotspot. To change the name of the different hotspots, select the hotspot in the listbox, edit the text in the edit box and click on the ‘Change Name’ button. Now let’s have a look at the code that is used. Besides the code used to change the settings between game mode and normal selection mode, only two specific events are needed. The event OnSelectedHotSpotChange where the check is added to see if the selection is allowed.As it would not be helpful to unselect a hotspot while playing the game. […]

Read More

Workflow visualization and organization in FMX

Intro The multi-device, true native app platform The FireMonkey® framework is the app development and runtime platform behind RAD Studio, Delphi and C++Builder. FireMonkey is designed for teams building multi-device, true native apps for Windows, OS X, Android and iOS, and getting them to app stores and enterprises fast. source: https://www.embarcadero.com/products/rad-studio/fm-application-platform FMX (FireMonkey) released in 2011 and shortly after we delivered a first set of components. Today, we want to show you the TTMSFNCKanbanBoard component, a highly configurable workflow visualization and organization component. Features Below is a list of the most important features the TTMSFNCKanbanBoard has to offer. The features are not limited to this list, but this will give you a quick insight on what we offer to be able to create an application that visualizes a workflow environment in FireMonkey. Multi collapsible column support Filtering and Sorting Item autosizing HTML formatted text support Collapsible items Database adapter Drag & Drop support Editing support Fully customizable column & item appearance & custom Kanban board item drawing Optional header & footer per column Learn More! Want to learn more about what the TTMSFNCKanbanBoard can do? Here is a video that highlights some of the above features through a demo application. Download & Explore! The TTMSFNCKanbanBoard component is part of the TMS FNC UI Pack, which, on top of FMX, also offers the ability to write your code once and target other frameworks (VCL, LCL and WEB). You can download a full featured trial version of the TMS FNC UI Pack and start exploring the capabilities of the TTMSFNCKanbanBoard component. Coming up The TTMSFNCKanbanBoard is the fourth of a series of components that is covered to empower your FMX (FireMonkey) developments. We started the series with a general overview of the most important components that we have to offer, followed by the TTMSFNCRichEditor, TTMSFNCPlanner and the TTMSFNCTreeView. Next up will be the TTMSFNCGrid, a feature rich and powerful grid component.

Read More

REST API Server with Delphi and XData 5: Read and Watch

TMS XData 5 has been released with lots of new features! Photo by Glenn Carstens-Peters on Unsplash In addition to the recent release of TMS Aurelius 5, a new major version of TMS XData has been also released. TMS XData 5 is the fifth major version of our framework to build multitier applications, including REST API server, and interface-based API client. It makes it easy to build server-side services that reach a broad range of clients, including browsers and mobile devices. Among several features, TMS XData provides: Automatic serialization/deserialization of pure Delphi objects, primitive types, method parameters; Authentication and Authorization; Powerful routing mechanism: route endpoints to methods in your code; Automatic, zero-code Swagger/SwaggerUI support; Interface-based client allows type-safe client applications without additional code; Smooth TMS Aurelius integration allows CRUD endpoints of database entities automatically. The new features released with XData 5 were also antecipated in a previous blog post, The what’s new section in the documentation provides you with a full list, but here we will list a few: Attribute-based Authorization Developers will be able to just add authorization attributes to methods (service operations) or entities (automatic CRUD endpoints) and everything will be applied accordingly. Fine-tuning the protection of your REST API will never be as simple. [Authorize] IDocumentService = interface(IInvokable) procedure Insert(Value: TDoc); [AuthorizeScopes(‘user, editor’)] procedure Modify(Value: TDoc); [AuthorizeScopes(‘admin’)] procedure Delete(DocId: string); [AuthorizeClaims(’email’)] procedure Approve(DocId: string); end; In the example above, all methods (endpoints) require authentication, because the interface has an Authorize attribute that propagates to all methods. So, to invoke Insert, user must be authenticated. Still, to invoke Modify, the user must be authenticated and have either user or editor scope in its credentials. He must be admin to invoke Delete, and finally to approve a document, user must have an email in its claims. It’s also worth noting that the same strategy applies to entities that generate automatic CRUD endpoints: [Entity, Automapping] [EntityAuthorize] [EntityAuthorizeScopes(‘editor’, [TEntitySetPermission.Modify, TEntitySetPermission.Insert])] [EntityAuthorizeScopes(‘admin’, [TEntitySetPermission.Delete])] TCustomer = class {…} public property Id: Integer read FId write FId; property Name: string read FName write FName; end; To access customer endpoints, user must be authenticated. But he must have editor privileges to modify and insert (PUT and POST) and must be admin to invoke DELETE. Easy and straightforward. Async/Await Support in Web Applications TMS XData is smoothly integrated with TMS Web Core, the TMS framework to build web applications. Now your can use async/await mechanism in TXDataWebClient methods that invoke XData server endpoints. As an example, invoking a XData REST API endpoint asynchronously will be as easy as doing this: PendingOrders := await(XClient.List(‘$filter=Status eq pending’)); if PendingOrders.Count = 0 then Exit; // no pending orders to process The single line above will build the HTTP request with proper URL endpoint and HTTP method, invoke it, deserialize the returned JSON into a list of TOrder objects, and all asynchronously! The await function will guarantee that the next line will be executed only after the async execution is executed. Can’t get easier than that. Multitenant Servers This is a feature released with TMS Aurelius, which now has the global filter mechanism, allowing you to build multitenant applications. But XData now includes a few nice mechanisms to integrate with such Aurelius filters that makes building multitenant servers very easily! From a single handler for the event OnManagerCreate, you can […]

Read More