From the blog

TMS WEB Core for Visual Studio Code 1.9.8 available now!

We’re pleased to inform that TMS WEB Core for Visual Studio Code 1.9.8 is available. With TMS WEB Core for Visual Studio Code, you can develop web client applications with Object Pascal and using a RAD component based approach. In the last year, we worked very hard to not only fine-tune TMS WEB Core project compatibility between Delphi and Visual Studio Code but also to ensure the features and framework are in sync. Last week we released TMS WEB Core for Delphi and all improvements this latest release brought are today available in TMS WEB Core for Visual Studio Code. This ensures that you or the colleagues in your team have the freedom of choice to develop web client applications from the Delphi IDE on Windows or from the Visual Studio Code IDE directly on Windows, macOS or a Linux desktop machine. Among the many framework improvements, we want to highlight in this blog two new core features. Direct forms support The “Direct form” type, is a form that isn’t using its own unique HTML template file but lives in the application main HTML file. This facilitates that such web client application can be started directly from the file system (no HTTP(s) server needed) and also that it loads faster. You can still bind WEB Core controls to HTML elements but here, the HTML elements will need to be added to the main application HTML file. Note that in a TMS WEB Core web client application, you can mix direct forms with regular forms using a HTML template. To add a direct form to your TMS WEB Core web client application in Visual Studio Code, use this new repository item: To understand better what direct forms can mean for you, check out this video too where it is demonstrated when used from the Delphi IDE. JavaScript Libraries Manager When developing web client applications, it’s a kind of no-brainer to take advantage of existing JavaScript and CSS libraries. Things that come to mind are the Bootstrap, jQuery, Google Material icons, Fontawesome libraries and many more. Most likely, you have your own favorite JavaScript libraries you want to use together with TMS WEB Core web client apps. The JavaScript Libraries Manager allows you to directly pick your preferred library from a list and the IDE will add the proper reference to the project HTML file. At the same time, you can add your own preferred libraries for later convenient reuse. Get started! If you are a TMS ALL-ACCESS user, you automatically have access to the full & latest version of TMS WEB Core for Visual Studio Code.  Get in touch with our team or check out our support center for technical assistance or for sharing your ideas & thoughts to steer further development.

Read More

Detect if a point is in a coordinate based polygon in Delphi

In this blog post, we explained how to measure the area of a polygon defined by coordinates. TMS FNC Maps v3.0.3.0 adds a way to detect a point (coordinate) inside a polygon. In this short blog post, we want to show you how to work with this new functionality. Load GeoJSON First of all, we are going to load our GeoJSON file with coordinates that define the surface area of Germany. TMSFNCMaps1.BeginUpdate; TMSFNCMaps1.LoadGeoJSONFromFile(‘germany.geojson’); TMSFNCMaps1.EndUpdate; Then, we style the polygons loaded by the LoadGeoJSONFromFile method. The complete code to load and style polygons is demonstrated below. procedure LoadGeoJSON; var p: TTMSFNCMapsPolygon; I: Integer; begin TMSFNCMaps1.BeginUpdate; TMSFNCMaps1.LoadGeoJSONFromFile(‘germany.geojson’); for I := 0 to TMSFNCMaps1.Polygons.Count – 1 do begin p := TMSFNCMaps1.Polygons[I]; p.FillOpacity := 0.4; p.FillColor := gcGreenyellow; p.StrokeOpacity := 0.4; p.StrokeColor := gcGreen; end; TMSFNCMaps1.EndUpdate; end; Detecting a coordinate inside a polygon To detect whether or not a coordinate lies inside a polygon, the polygon collection item class exposes a ContainsPoint function. For the purpose of this sample, we used the non visual TTMSFNCGeocoding component and retrieved the coordinates for cities that lie inside and outside of Germany. procedure DetectPoints; var c1, c2, c3, c4: TTMSFNCMapsCoordinateRec; const v = ‘Coordinate inside polygon’; n = ‘Coordinate outside polygon’; begin c1 := TMSFNCGeocoding1.GetGeocodingSync(‘Groningen’); c2 := TMSFNCGeocoding1.GetGeocodingSync(‘Dresden’); c3 := TMSFNCGeocoding1.GetGeocodingSync(‘Munich’); c4 := TMSFNCGeocoding1.GetGeocodingSync(‘Augustenborg’); if TMSFNCMaps1.Polygons[0].ContainsPoint(c1) then TMSFNCMaps1.ShowPopup(c1, v) else TMSFNCMaps1.ShowPopup(c1, n); if TMSFNCMaps1.Polygons[0].ContainsPoint(c2) then TMSFNCMaps1.ShowPopup(c2, v) else TMSFNCMaps1.ShowPopup(c2, n); if TMSFNCMaps1.Polygons[0].ContainsPoint(c3) then TMSFNCMaps1.ShowPopup(c3, v) else TMSFNCMaps1.ShowPopup(c3, n); if TMSFNCMaps1.Polygons[0].ContainsPoint(c4) then TMSFNCMaps1.ShowPopup(c4, v) else TMSFNCMaps1.ShowPopup(c4, n); end; The result output is shown below. Alternative detection The ContainsPoint function at polygon collection item level internally calls the IsPointInArea, which is defined in the *.TMSFNCMapsCommonTypes.pas unit. To use this function, you need to define an array of coordinates. This function can be used without the need to define a polygon inside the Polygons collection.  function IsPointInArea(ALatitude: Double; ALongitude: Double; ACoordinatesArray: TTMSFNCMapsCoordinateRecArray): Boolean; Explore! Go ahead and download TMS FNC Maps. Explore the features and demos and feel free to leave a comment on this blog.

Read More

10 Tips About An Ext JS Tutorial For Beginners

  Sencha’s ExtJS is a robust JavaScript framework for developing mobile and web applications. Thus, are you interested in using ExtJS to make amazing web and mobile user interfaces? Here are some helpful hints on Extjs tutorial for beginners that will help you to get started using Ext JS and use it to web development: What can I do to accelerate the development speed? Consider using Sencha Architect to construct UIs using drag-and-drop functionalities so you can focus minimum time on manual coding and speed up your development. The code generated automatically is designed for maximum performance; you may also prevent errors that occur when coding manually. Is it a good idea to set up routing in the start itself? You’ll need to implement routing in your app if the website uses forward and back buttons for navigation. Routing can be used to keep track of the current state of your app; however, it cannot be used to store data. Direct links can also be used to reach a particular component or page of the application. It’ll be more difficult to modify your code to enable routing later if you’re not using routing at the start. As a result, from the beginning of your project, take time to understand how routing principles function and decide, select and implement your routes. Why is Sencha Cmd important? Sencha Cmd is the starting point for creating Sencha applications. It’s a tool that automates the creation of Sencha Ext JS apps, from the initial design structure to the generation of deployable applications. As a result, understanding Sencha Cmd, what it does, and how to use it is critical. Before initiating development, read over the Sencha Cmd Documentation to familiarize yourself with it. Is it possible to debug sencha apps directly? Sencha Inspector is a debug tool for apps created utilizing Sencha frameworks. It gives you easy accessibility to classes, components, and objects. Going further, this Sencha application debugger provides application analytics and sophisticated debugging features. It also allows you to examine your app code for vulnerabilities such as component and function over nesting and the frequency of layout runs and help you enhance your application’s performance. How can the MVC design pattern be used? Ext JS follows the Model View Controller (MVC) architectural pattern to create the structure for the project. Even though it is not required, I propose that you organize the project’s structure better. To engage with MVC, you must understand where to put your code for your application’s user interface, login controller, and data. To construct a functional web application in Ext JS, it’s important to understand how MVC works together as well. Where should the MVVM design pattern be used? MVVM stands for Model–View–ViewModel, yet another design pattern to be conscious of. Despite MVC, MVVC has a view as its execution point of entry. It isolates interface development by using a markup language. The ViewModel uses the data binding mechanism to synchronize changes in-between the data model and view. Therefore, know when to utilize MVC and MVVM depending on what you’re doing. What can be done using Schema Themer? You may use Sencha Ext JS default themes to start designing your applications right away. You may also create custom themes to give your app the feel and look you desire. Sencha Themer, on the other hand, […]

Read More

Q1 2022 : 3 months – 3 milestones – 3 new products in TMS ALL-ACCESS

Here, spring starts today March 21 and soon we are already closing the first quarter of 2022. So with the year well underway, it is time for a short look back at what the year brought so far for Delphi developers using TMS products.  While there has already been the usual flow of product update releases with new features & improvements, so far we also released 3 new products in 2022: TMS MemInsight This brings run-time memory allocation inspection, exception call stack logging, thread inspection and more. The unique angle of TMS MemInsight is that it gives you a run-time view on what is happening in your application as opposed to tools that only provide the information when the application closes, or worse, crashes. This gives the Delphi developer a powerful tool in the hands to inspect, analyze and improve where possible the memory allocation in applications.   GraphQL for Delphi When your applications work with GraphQL, whether it is at the client side or at the server side, our full GraphQL spec-compliant library for Delphi, empowers you to build applications that take advantage of GraphQL. GraphQL is rapidly getting traction as alternative or something to add in addition to classic REST API endpoints for data access. It empowers the client application to control the data communication. With GraphQL for Delphi, you can use the library for creating servers that respond correct to GraphQL requests. Watch the introduction webinar again here. GraphQL for Delphi is available stand-alone or as part of TMS ALL-ACCESS TMS FNC AppTools This is the latest addition to the FNC family of universal components. Universal components can be used in Delphi & C++Builder VCL, FireMonkey apps, Delphi TMS WEB Core apps and LCL Lazarus applications. TMS FNC AppTools focuses on typical desktop application use-cases. So far, it has a non-visual component for persisting the state of forms at the time the user quits the application to bring it back in exactly the same state when the user restarts. It has a component to temporarily password-lock an application to prevent non-authorized people to see sensitive data for example. And it has an automatic application updater component. With this component, it is possible to automatically update a Windows, macOS or Linux desktop application from updated files available on a HTTP(s) server. The component takes care of update version detection, update download and automatic replacement of existing files with updated files and restarting the new version of the application. Users already having our VIP ticket called TMS ALL-ACCESS received these 3 new products this quarter in addition to numerous product updates so far. This includes updates to TMS VCL UI Pack, TMS FNC Maps, TMS Business Subscription, TMS WEB Core and many more… In short, we deliver with TMS ALL-ACCESS literally what the name stands for: access to all our products, all our services, all our technical support and all our new upcoming new products or product update releases. If you did not yet obtain your TMS ALL-ACCESS VIP ticket or your overlooked to renew your TMS ALL-ACCES subscription for this year, contact our sales team to get the best possible deal to (re)enter the TMS ALL-ACCESS VIP area. Our sales team will offer you the best possible upgrade deal based on the existing products you might already have purchased in the past!

Read More

TMS WEB Core v1.9.8.0 Sentina for Delphi is here

We are pleased to announce the availability of TMS WEB Core v1.9.8.0 Sentina. The new release is a further step in making Object Pascal RAD component based web client application development from the Delphi IDE as productive and seamless as possible.  Among the new features are: New : TApplication.CreateFormDirect() method added + IDE integration for direct formsAllows to open forms not having a HTML template but use the project HTML template instead New : TWebListBox.ElementItemClassName property addedAllows to specify a CSS class for items in the TWebListBox New : Bootstrap hints for Bootstrap forms support addedWhen Form.CSSLibrary is set to cssBootstrap, controls will use Bootstrap hints Among the improvements are: Improved : Popup dialog close button positionThe dialog caption and the dialog close button in particular now look better Improved : Actualized materials icons design-time listThe design-time selectable material icons list is significantly extended Improved : High DPI support for design-time editors in Delphi 11 / 11.1When designing forms in Delphi 11 with high DPI form designer, control positioning is improved in resulting web app Other fixes & improvements Direct forms See for yourself what we mean with the new direct forms support in this new release. We created this video especially for you to show the difference between default forms that have a unique HTML template file per forms and direct forms that do not have a HTML template file and therefore are displayed within the context of the project HTML file. Get started Discover how you can create web client applications with zero deployment requirements and that work from a single application code-base on any machine or device that has a browser. Download the fully functional and not time-limited TMS WEB Core trial version to explore at your own pace how you can benefit from it!  For all users with an active TMS WEB Core license, TMS WEB Core v1.9.8.0 Sentina is a free update. If you have an expired license, login on our website to find the best upgrade option or contact our sales by email. 

Read More

Introducing TMS FNC AppTools

We are proud to announce a new member of the TMS FNC family: TMS FNC AppTools!  What is TMS FNC AppTools? Compared to the rest of the FNC family (that is the family of our universal components), TMS FNC AppTools is a little bit different. It revolves exclusively around desktop application development! The reason for this is simple: desktop and mobile applications are unalike and some functionalities/features make no sense or restricted in mobile environments. This way we can fully focus on desktop specific needs. What is included? Let’s take a look at what is included in this first release! TTMSFNCAppUpdate Manage automatic internet based application updates. You can use HTTPS based locations for secure downloads. Username and password protected downloads are also supported! The entry point to the automatic update is an .INF control file. By calling TTMSFNCAppUpdate.NewVersionAvailable the component will download and look at the contents of the control file. A single control file can be used to handle the updates for 3 supported platforms at the same time. This is achieved by a platform suffix (= win, macos or linux): [update_platform] keywords [files_platform] count=N [file1_platform] keywords … [fileN_platform] keywords The TTMSFNCAppUpdate component will automatically scan the control file for the platform it is running on, which means the platform specific suffix is always needed. TTMSFNCAppUpdate gives huge flexibility after the control file has been read. When NewVersionAvailable is called, the FileList collection property will be filled with the contents of the control file. This allows you to freely remove or modify the file descriptors before continuing with the update. procedure TForm1.Button1Click(Sender: TObject); begin   if TMSFNCAppUpdate1.NewVersionAvailable then   begin     if TMSFNCAppUpdate1.FileList.Count > 0 then       TMSFNCAppUpdate1.FileList[0].URL := ‘newdownloadurl’;     TMSFNCAppUpdate1.StartUpdate;   end; end; This becomes a lot simpler if you don’t need to change the file descriptors afterwards. Just call DoUpdate which will internally use NewVersionAvailable and StartUpdate and run the whole process at once. TTMSFNCAppUpdate also supports predefined and custom prefixes that will be replaced in the path related keywords. For example: {APP} stands for the application folder. For custom prefixes you can implement the OnCustomPrefix event! Curious to see it in action? Check our first video we prepared: TTMSFNCAppFormPersist With this component you can automatically persist and restore your application windows’ position, this way the application will open all its windows where you left them. It’s also possible to save and load the position programmatically: procedure TForm1.restoreBtnClick(Sender: TObject); var   afp: TTMSFNCAppFormPersist; begin   afp := TTMSFNCAppFormPersist.Create(Self);   afp.FileName := ‘./temp_settings.ini’;   afp.LoadFormSettings;   afp.Free; end; procedure TForm1.saveBtnClick(Sender: TObject); var   afp: TTMSFNCAppFormPersist; begin   afp := TTMSFNCAppFormPersist.Create(Self);   afp.FileName := ‘./temp_settings.ini’;   afp.SaveFormSettings;   afp.Free; end; TTMSFNCAppLock Keep your current workflow and sensitive data hidden by password locking your running application when needed or if it has been idling for a while. After locking all application windows become minimized and hidden. To unlock, click the minimized application icon and use the default unlock dialog. Alternatively a custom unlocking mechanism can be used by implementing the OnQueryUnlock event. It’s also possible to unlock the application automatically by calling the Unlock method.  procedure TForm1.Button1Click(Sender: TObject); begin   //Unlock automatically after 30 seconds   Timer1.Interval := 30000;   Timer1.Enabled := True;   TMSFNCAppLock1.Lock; end; procedure TForm1.Timer1Timer(Sender: TObject); begin   Timer1.Enabled := False; […]

Read More

Laser Focus on Eyecare – How Delphi And InterBase Help Protect Your Vision (Case Study)

Patients rely on doctors to save their eyesight. Doctors rely on Delphi and InterBase® to show them how. The compelling Laser Focus on Eyecare Case Study illustrates how Delphi and InterBase® work together to create an electronic health record (EHR) and practice management software solution for US-based eyecare software leader ManagementPlus (now part of EyeCareLeaders).             InterBase® is designed for precisely the use cases – data gathering embedded into advanced technology across your business, super-high reliability in situations that have zero tolerance for error, and require zero-admin, independent operation more or less forever. Explore the Case Study

Read More

Delphi And Electron Testing Support Measured in Benchmarking Study

Do Delphi and Election offer testing support? Do they ship with testing libraries, or use external testing libraries? The Delphi and Electron Benchmarking study takes a look at the testing support offered by the two software development frameworks. The “Discovering The Best Cross-Platform Framework Through Benchmarking” whitepaper evaluates two frameworks supporting multi-platform desktop application development: Delphi and Electron. Delphi Delphi, encapsulated in the Rapid Application Development (RAD) Studio IDE, is Embarcadero Technologies’ flagship product. A proprietary version of the Object Pascal language, Delphi features graphical application development with “drag and drop” components, a WYSIWYG viewer for most mobile platforms, and robust style options including platform-standard and unique palettes that provide a fully customized look and feel. Among other features, included libraries provide GUI controls, database access managers, and direct access target platform hardware and platform operating systems. The Delphi FireMonkey (FMX) framework will compile projects to native code for 32-bit and 64-bit Windows, macOS, Android, iOS, and Linux, allowing users to develop and maintain one codebase reaching most of the market. Delphi has been available for over 25 years. Electron Electron is an open-source (MIT License), Chromium-based framework that utilizes web technologies to build desktop applications on Windows, macOS, and Linux. It is developed and maintained by GitHub, a subsidiary of Microsoft. Electron combines the Chromium-based rendering engine with a Node.js server environment. As such, the user interface for an Electron application is available via HTML5 and CSS. Generally, Electron works with most Javascript frameworks such as Angular, Vue.js, and React. The HTML5, CSS, and Javascript-based technologies found in Chromium provide a rich ecosystem of user customization familiar to any web developer. Despite its relatively young age of five years, its community boasts open source packages for database access, operating system interactions, and other common tasks. 26 Benchmarking Metrics This is the ninth in a 26-part series of blog posts looking more closely at each of the individual metrics used in the study, and how Delphi and Electron each fared on these metrics. The first can be found here. Download the complete whitepaper here Benchmark Category: Functionality Functionality Framework functionality was examined qualitatively through research on the business aspects of each framework ranging from initial investment through long-term maintenance of the products created. Business functionality refers to a framework’s business suitability and impact on long-term plans. Excellent functionality allows companies to easily build custom tools or extensions, develop on a platform of their choosing, protect their source code from exploitation, and have confidence that their applications will be maintainable for decades. Benchmark Metric 10/26: Testing Support Testing Support: Does the framework ship with a testing suite, test coverage analysis, and runtime monitoring capability? Benchmarking Results Delphi Score: 4 (out of 5) Delphi ships with the DUnitX unit testing package but lacks a native integration testing system. Numerous 3rd party unit and integration testing tools are available but may not be free. Electron Score: 4 (out of 5) Electron does not install with a native unit or integration testing package. Open-source projects and libraries are available for both functions. Download the complete whitepaper here

Read More

A Beginner’s Guide To Windows Tools For Developers

It’s hard to ignore the huge success that Microsoft has had in encouraging users to adopt Windows. Even today with competition from Linux, macOS and even more esoteric device choices such as Chromebooks with their ChromeOS Microsoft Windows is the overwhelmingly dominant choice for both business and home users. Whatever platform you target as a developer, the goal is always the same, creating practical, successful applications. Achieving that in the most optimal way requires carefully picking the best Windows tools for developers. Developers want consistent, proven, reliable tools to create applications. Microsoft has created many different tools and libraries to accomplish all these things. There are currently three paths if you choose the Microsoft stack. These are WPF, WinForms, and UWP.  If you have been following our articles, you might know that there is a benchmark where Embarcadero MVPs and expert developers built a calculator app with different technologies. This benchmark illustrated the average time to complete the assigned task and considered extended metrics such user-friendliness and as a result was also able to consider the general productivity is engendered in the developer. In other words, picking the right development tools and IDE software enhanced the optimal overall productivity of the software developer. In summary, Delphi showed that you could build applications way faster in comparison to Electron and WPF technologies. Moreover, Delphi provides more security in Windows applications and no need for a runtime which greatly enhanced its stability. Check out these articles to learn more about the benchmarks Win32 (Windows API) with Delphi and C++ The Windows API or Win32 API allows applications to use the components of Windows. Win32 API is the best and only choice if you need to achieve the highest performance or efficiency, access native OS features, or target other technologies like DirectX. Why is Win32 API the best choice? Win32 API allows you to achieve the best performance for your app by taking direct control over memory allocation and performance-oriented CPU features like SSE or AVX instructions.  Moreover, you can directly access DirectX technologies for low-level high-performance graphics access.  Delphi’s VCL uses Win32 API and other Windows native libraries to produce an application, and that is why you get a swift product. Since C++ Builder also utilizes VCL, you can achieve that performance if you build your applications with C++ Builder.  Furthermore, Visual Component Library is one of the best libraries to build Windows applications because it is stable, reliable, and up-to-date with new Windows features. Can RAD Studio Delphi and C++Builder create apps 5x faster? Use RAD Studio’s award-winning VCL framework for Windows and FireMonkey (FMX) visual framework to create cross-platform responsive UIs. Use VCL Styles at design time! Prototype stylish UIs even faster by seeing immediately at design-time how your styled forms and controls will look when running. FireMonkey design-time guidelines: Prototype quickly with visible lines and enhanced margin and padding support. Here are our latest tutorials on improving Windows applications in 2022 and a beginner’s guide for Windows UI toolkits. Be sure to check them out and follow us here to learn more about other excellent Windows app development tools! Are you looking for a lightweight but powerful C++ development environment?? Tens of millions know Dev-C++ of developers. It is one of the best-known lightweight ideas in the market. Dev-C++ […]

Read More

Announcing the Availability of RAD Studio 11.1 Alexandria

Embarcadero is pleased to announce the release of RAD Studio 11 Alexandria Release 1, also known as RAD Studio 11.1, along with Delphi 11.1 and C++Builder 11.1.  The RAD Studio 11.1 Alexandria release enhances the great features introduced in RAD Studio 11, with a focus on usability, performance and stability improvements. It also includes some new functionality, including new database drivers. Additionally, the RAD Studio 11.1 release offers official support to operating systems released after 11.0 shipped: Windows 11, macOS 12 Monterey, iOS 15, and Android 12. Delphi also switches to a new debugger technology on some of the platforms. In this blog post, we want to highlight some of the main new features and enhancements in RAD 11.1, covering the most relevant quality updates. IDE Improvements The RAD Studio IDE is the primary focus of the 11.1 release, with the goal of rounding up the features introduced in recent versions: Extensive High DPI IDE quality, plus improved use of the IDE with Remote Desktop  Improvements with High DPI designers for VCL and FireMonkey and the styled VCL form designer The new Welcome Page introduced in 11.0 now offers background images and supports adding custom frames with a new Open Tools API GetIt Library Manager enhancements with cached images and a reworked UI implementation (based on the VCL TControlList component) There are also a few new IDE features: The Messages view uses different colors for compiler errors, messages, and hints to better highlights issues (the colors can be customized) The new Items dialog shows the available platforms for each item The Compile dialog shows the platform and build configuration used by the current compilation Code Insight Across Delphi and C++Builder Another significant quality focus area of RAD Studio 11.1 is Code Insight for both languages, Delphi and C++. The C++ language Code Insight implementation, which is based on the Language Server Protocol architecture and cquery, was improved in terms of quality and performance. This is an area we are actively working on and for which we might release a new focused update soon. The Delphi LSP engine saw big performance improvements, with most projects loading and updating error insight from 5 times to 30 times faster. Other changes include type parameters being shown when completing a class declaration, including T in a generic declaration, and showing set types.  Compilers and Debuggers The Delphi and C++ compilers for the various platforms were improved in terms of stability and performance. The Delphi and C++Builder window compilers have additional support for ASLR, DEP/NX, and TSAWARE platform security settings, which are now enabled by default. The RAD Studio binaries and runtime packages are now built with these settings enabled. Regarding debuggers, beside general quality work, the Delphi macOS 64-bit ARM debugger and the Delphi Android 64-bit debugger are now based on the LLDB debugger architecture, which was already in use for the Delphi iOS 64-bit debugger. The intent is to unify the Delphi debuggers on this technology, for most of the supported platforms, as a way to deliver increasingly better quality over time. Moreover, the C++ STL and RTL improved their quality, including better Delphi RTL integration (for example, improving dynamic arrays with STL iterators). RTL, UI, and Database Libraries In the 11.1 Release the core Delphi RTL had several optimizations and quality improvements. There […]

Read More