Separate lists for VCL and FMX in GExperts Rename Components expert

The Rename Components expert in GExperts now has separate lists for the names and additional properties for VCL and FMX components. Previously it was a hassle to have additional properties shown in the rename dialog if these have different names in VCL vs. FMX e.g. the Caption vs. Text property of TLabel. Now you simply […]Read More

Read More

TMS FNC Core update: Printing and Design-time Editors

Included in the version 2.6 release of the TMS FNC Core package is a print library
that is capable of creating files and send them to the printer. 
And two design-time editors to make it easier to customize the TTMSFNCGraphicsFill and TTMSFNCGraphicsStroke in your FNC products.

TMS FNC Printing

The print library supports creating documents,
adding pages and page content such as HTML formatted text, plain text, drawing
primitives and images, with practically the same code on all different frameworks.

This has been implemented on three different levels.

The lowest level of implementation for the print library is the use of TMSFNCPrinter, this is done in a similar way as TPrinter is used on VCL, Lazarus, FMX Windows and MacOS. With TMSFNCPrinter there is now support for FMX Android and iOS and for TMS WEB Core.

The difference with TPrinter is that the drawing should be defined in the OnDrawContent procedure. 

uses
  …, FMX.TMSFNCPrinters, FMX.TMSFNCGraphicsTypes;

procedure Click(Sender:TObject);
begin

  TMSFNCPrinter.OnDrawContent :=

  procedure
  begin
    TMSFNCPrinter.Graphics.Font.Color := gcBlue;
    TMSFNCPrinter.Graphics.Font.Size := 40;
    TMSFNCPrinter.Graphics.DrawText(0, 20, TMSFNCPrinter.PageWidth, 100, 'Hello', False, gtaCenter, gtaCenter);

    TMSFNCPrinter.Graphics.Fill.Color := gcRed;
    TMSFNCPrinter.Graphics.DrawEllipse(100,200, TMSFNCPrinter.PageWidth - 100, 300);

    TMSFNCPrinter.Graphics.DrawBitmap(50,400,TMSFNCPrinter.PageWidth - 50, TMSFNCPrinter.PageHeight - 50, Image1.Bitmap, True, True);

    TMSFNCPrinter.EndDoc;
  end;

  TMSFNCPrinter.BeginDoc;
end; 

On top of the TMSFNCPrinter, there is the TMSFNCGraphicsPrintIO component, which gives the ability to further define the layout of the document with a header, footer and page number and to add certain FNC components.

The TTMSFNCRichEditorPrintIO and TTMSFNCGridPrintIO are added In the TMS FNC UI PackThese components have some additional properties to make the export of the TTMSFNCRichEditor or TTMSFNCGrid even more customizable.


Design-time Editors

Working with FNC controls should be fast and simple. And for that reason we’re adding two new design-time editors in TMS FNC Core.

These help with setting the properties for the TTMSFNCGraphicsFill and TTMSFNCGraphicsStroke.

Read More

Read More

TMS FNC Core update: Printing and Design-time Editors

Included in the version 2.6 release of the TMS FNC Core package is a print library
that is capable of creating files and send them to the printer. 
And two design-time editors to make it easier to customize the TTMSFNCGraphicsFill and TTMSFNCGraphicsStroke in your FNC products.

TMS FNC Printing

The print library supports creating documents,
adding pages and page content such as HTML formatted text, plain text, drawing
primitives and images, with practically the same code on all different frameworks.

This has been implemented on three different levels.

The lowest level of implementation for the print library is the use of TMSFNCPrinter, this is done in a similar way as TPrinter is used on VCL, Lazarus, FMX Windows and MacOS. With TMSFNCPrinter there is now support for FMX Android and iOS and for TMS WEB Core.

The difference with TPrinter is that the drawing should be defined in the OnDrawContent procedure. 

uses
  …, FMX.TMSFNCPrinters, FMX.TMSFNCGraphicsTypes;

procedure Click(Sender:TObject);
begin

  TMSFNCPrinter.OnDrawContent :=

  procedure
  begin
    TMSFNCPrinter.Graphics.Font.Color := gcBlue;
    TMSFNCPrinter.Graphics.Font.Size := 40;
    TMSFNCPrinter.Graphics.DrawText(0, 20, TMSFNCPrinter.PageWidth, 100, 'Hello', False, gtaCenter, gtaCenter);

    TMSFNCPrinter.Graphics.Fill.Color := gcRed;
    TMSFNCPrinter.Graphics.DrawEllipse(100,200, TMSFNCPrinter.PageWidth - 100, 300);

    TMSFNCPrinter.Graphics.DrawBitmap(50,400,TMSFNCPrinter.PageWidth - 50, TMSFNCPrinter.PageHeight - 50, Image1.Bitmap, True, True);

    TMSFNCPrinter.EndDoc;
  end;

  TMSFNCPrinter.BeginDoc;
end; 

On top of the TMSFNCPrinter, there is the TMSFNCGraphicsPrintIO component, which gives the ability to further define the layout of the document with a header, footer and page number and to add certain FNC components.

The TTMSFNCRichEditorPrintIO and TTMSFNCGridPrintIO are added In the TMS FNC UI PackThese components have some additional properties to make the export of the TTMSFNCRichEditor or TTMSFNCGrid even more customizable.


Design-time Editors

Working with FNC controls should be fast and simple. And for that reason we’re adding two new design-time editors in TMS FNC Core.

These help with setting the properties for the TTMSFNCGraphicsFill and TTMSFNCGraphicsStroke.

Read More

Read More

Delphi Data in JetBrains Developers Survey

JetBrains conducts one of the largest yearly developers surveys, along with StackOverflow. Given its breadth (over 30K developers), the survey is significant for the industry overall, even if skewed towards the communities and programming languages they offer IDEs and tools for. Also the largest amount of respondents (59%) are under 30, which might not represent the overall developers population. You can read the summary at: www.jetbrains.com/lp/devecosystem-2021/ The key take away is not a surprise, with JavaScript leading the programming languages in popularity, Python growing and Java maintaining a key spot in the ranking. (I personally don't consider HTML and SQL as "programming languages", but that's a separate point). Delphi is present with a small 1%, but given the target audience that's significant. Now what's very interesting to me is the details about which platforms Delphi developers target. Considering that overall web development (backend and frontend) is well above desktop and mobile, for Delphi we can see the following split (among developers using it): Desktop = 83% Mobile = 33% Web (Back-end) = 61% Web (Front-end) = 52% One interesting element in this data is that among all languages in the survey Delphi has the strongest desktop focus (that is, no other languages is used as much for desktop development): next at 61% are Visual Basic and Assembly. A final interesting piece of information is the following: "Delphi is the primary language of 3% of the developer population in Brazil". We might get more from the raw data, but the survey is a treasure trove of information about developers, their tools and their lifestyle... including favorite drink by age ;-)
Read More

TMS WEB Core v1.8 Sirolo released

TMS WEB Core v1.8 Sirolo is released!

We are excited to inform that TMS WEB Core v1.8 Sirolo is released today. This new version is the result of months of hard work of the team to bring several new milestones. Take advantage of the summer-time to expand your horizons and dive into the wonderful web world for Object Pascal developers. 
Here is a brief overview of the core new features included in TMS WEB Core v1.8 

1) Miletus support for macOS and Linux

After Miletus targeted Windows in TMS WEB Core v1.7, our team now accomplished the phenomenal next step to create cross-platform web technology based desktop applications for Windows, macOS and Linux. And all that with a minimal footprint. On Windows and Linux this means single executable file apps and for macOS the typical application folder but also here with a single application executable file. Deployment can be done via ultra simple XCOPY deployment.
In a nutshell, you can create desktop applications from a single source code base from your Delphi IDE on Windows. You do actually not need an Apple mac machine or Linux box to create these applications. The GUI of these applications is rendered in the browser and therefore empowered by HTML5 and CSS3. You can take advantage of existing web application templates to create stunning GUIs
Not familiar with Miletus? You can learn all about it from this webinar replay

2) New Miletus Interbase and Firebird local database support

In this new version, we added two more possible local databases that can be directly used from a Miletus application and that is Interbase and Firebird. No need here to create a REST API interface, you can directly connect a client dataset to local databases. In v1.8 this is now: MS Access, MS SQL, mySQL, SQLite, Interbase and Firebird. 
            

3) Miletus support to access INI files, registry, OS version info

Convenient for storing application settings, INI files or registry is what developers frequently use. So, from a Miletus app you can now easily access these INI files and the registry in the same way as you can from a VCL or Firemonkey application. Of course, there is no registry on macOS or Linux and here there is automatic fallback on INI files. In addition, a new API is added to retrieve operating system version information about the operating system where the Miletus executable is running.

4) Two new UI components: chatbox + rating control

We have added two new controls to TMS WEB Core v1.8. This is a chatbox control and a rating panel. With the TWebChatbox control, you can write web chat applications with little to no code. Drop this component on the form and all you need to do is write some lines of code to send the message to your chat server of choice or receive messages from there. The other new component is the TWebRatingPanel. This is the classic UI pattern of rating via clicking a number of stars (or other icons of choice). The rating panel offers setting rates in units of 1, 0.5 or fully fractional.

5) SHA1 hashing support in the TWebCrypto component

As SHA1 is still from time to time needed in specific communication protocols, we extended the TWebCrypto component that is internally using the browser crypto API to also offer SHA1 support.

6) TWebLocalStorage, TWebSessionStorage components

Previously available as classes, this is now more convenient to use as non-visual components with the new OnChange event exposed to let your app become aware when other instances have changed the local or session storage.

7) Grid enhancements

TWebStringGrid, TWebDBGrid have been improved and new properties to set selection color, selection text color, grid line color, border color have been added. A new event OnClickCell was also added.

8) Various smaller new features

Now it is easier to load a TFrame also dynamically at runtime with the new CreateNew() constructor. The TWebMemo has a SpellCheck property to control whether the browser should use its integrated spell check on the memo content or not.  The TWebClientConnection that bridges a TWebClientDataSet to a server offers settings for using custom HTTP(s) commands as well as set PostData for the HTTP(s) POST request. The TStringList got a promise based LoadFromFileAsync() method to use file loading in combination with await(). For the TBitmap, there is now access to the opacity value per pixel…

Availability

TMS WEB Core v1.8 Sirolo release is now available to all TMS WEB Core or TMS ALL-ACCESS users with an active license. Download the new version after login on our website or via the TMS Subscription Manager. If you had a prior version installed, perform an uninstall first and then install the new v1.8. We didn’t do breaking changes to APIs or class interfaces, so your existing apps should continue to run fine with the new version.

What’s next

The next step is bringing TMS WEB Core for Visual Studio Code on par with its Delphi companion by also integrating Miletus support. You can expect a beta for TMS WEB Core for Visual Studio Code very soon. At the same time, our team is already heavily researching key v1.9 new features, some of which are ground-breaking. We aim to bring some more hot news about it this summer!

Learn & get started

Holidays are a good period to learn and get your feet wet with TMS WEB Core. There are plenty of resources to get started:

1) TMS WEB Core book from colleague, expert and evangelist Holger Flick:

2) Webinar replays about TMS WEB Core you can find on our TMS Web Academy (fully developed with TMS WEB Core by the way)
3) TMS WEB Core training course offered by our colleague Wagner R. Landgraf 
4) Over 100 sample projects included in the product (see in C:\Users\USERNAME\AppData\Local\tmssoftware\TMS WEB Core\Demo folder)
5) Over 100 blog posts about TMS WEB Core 
6) Tons of instructional videos we created
7) Consult with our partners

Share

We create TMS WEB Core with love for you so we love to hear your feedback, your comments, your inputs, your ideas. Tell us about your experiences, tell us what we can do better, what new features you wish, let fellow Delphi developers see what exciting projects you created with TMS WEB Core! Our team is listening.

Read More

Read More

TMS WEB Core v1.8 Sirolo released

TMS WEB Core v1.8 Sirolo is released!

We are excited to inform that TMS WEB Core v1.8 Sirolo is released today. This new version is the result of months of hard work of the team to bring several new milestones. Take advantage of the summer-time to expand your horizons and dive into the wonderful web world for Object Pascal developers. 
Here is a brief overview of the core new features included in TMS WEB Core v1.8 

1) Miletus support for macOS and Linux

After Miletus targeted Windows in TMS WEB Core v1.7, our team now accomplished the phenomenal next step to create cross-platform web technology based desktop applications for Windows, macOS and Linux. And all that with a minimal footprint. On Windows and Linux this means single executable file apps and for macOS the typical application folder but also here with a single application executable file. Deployment can be done via ultra simple XCOPY deployment.
In a nutshell, you can create desktop applications from a single source code base from your Delphi IDE on Windows. You do actually not need an Apple mac machine or Linux box to create these applications. The GUI of these applications is rendered in the browser and therefore empowered by HTML5 and CSS3. You can take advantage of existing web application templates to create stunning GUIs
Not familiar with Miletus? You can learn all about it from this webinar replay

2) New Miletus Interbase and Firebird local database support

In this new version, we added two more possible local databases that can be directly used from a Miletus application and that is Interbase and Firebird. No need here to create a REST API interface, you can directly connect a client dataset to local databases. In v1.8 this is now: MS Access, MS SQL, mySQL, SQLite, Interbase and Firebird. 
            

3) Miletus support to access INI files, registry, OS version info

Convenient for storing application settings, INI files or registry is what developers frequently use. So, from a Miletus app you can now easily access these INI files and the registry in the same way as you can from a VCL or Firemonkey application. Of course, there is no registry on macOS or Linux and here there is automatic fallback on INI files. In addition, a new API is added to retrieve operating system version information about the operating system where the Miletus executable is running.

4) Two new UI components: chatbox + rating control

We have added two new controls to TMS WEB Core v1.8. This is a chatbox control and a rating panel. With the TWebChatbox control, you can write web chat applications with little to no code. Drop this component on the form and all you need to do is write some lines of code to send the message to your chat server of choice or receive messages from there. The other new component is the TWebRatingPanel. This is the classic UI pattern of rating via clicking a number of stars (or other icons of choice). The rating panel offers setting rates in units of 1, 0.5 or fully fractional.

5) SHA1 hashing support in the TWebCrypto component

As SHA1 is still from time to time needed in specific communication protocols, we extended the TWebCrypto component that is internally using the browser crypto API to also offer SHA1 support.

6) TWebLocalStorage, TWebSessionStorage components

Previously available as classes, this is now more convenient to use as non-visual components with the new OnChange event exposed to let your app become aware when other instances have changed the local or session storage.

7) Grid enhancements

TWebStringGrid, TWebDBGrid have been improved and new properties to set selection color, selection text color, grid line color, border color have been added. A new event OnClickCell was also added.

8) Various smaller new features

Now it is easier to load a TFrame also dynamically at runtime with the new CreateNew() constructor. The TWebMemo has a SpellCheck property to control whether the browser should use its integrated spell check on the memo content or not.  The TWebClientConnection that bridges a TWebClientDataSet to a server offers settings for using custom HTTP(s) commands as well as set PostData for the HTTP(s) POST request. The TStringList got a promise based LoadFromFileAsync() method to use file loading in combination with await(). For the TBitmap, there is now access to the opacity value per pixel…

Availability

TMS WEB Core v1.8 Sirolo release is now available to all TMS WEB Core or TMS ALL-ACCESS users with an active license. Download the new version after login on our website or via the TMS Subscription Manager. If you had a prior version installed, perform an uninstall first and then install the new v1.8. We didn’t do breaking changes to APIs or class interfaces, so your existing apps should continue to run fine with the new version.

What’s next

The next step is bringing TMS WEB Core for Visual Studio Code on par with its Delphi companion by also integrating Miletus support. You can expect a beta for TMS WEB Core for Visual Studio Code very soon. At the same time, our team is already heavily researching key v1.9 new features, some of which are ground-breaking. We aim to bring some more hot news about it this summer!

Learn & get started

Holidays are a good period to learn and get your feet wet with TMS WEB Core. There are plenty of resources to get started:

1) TMS WEB Core book from colleague, expert and evangelist Holger Flick:

2) Webinar replays about TMS WEB Core you can find on our TMS Web Academy (fully developed with TMS WEB Core by the way)
3) TMS WEB Core training course offered by our colleague Wagner R. Landgraf 
4) Over 100 sample projects included in the product (see in C:\Users\USERNAME\AppData\Local\tmssoftware\TMS WEB Core\Demo folder)
5) Over 100 blog posts about TMS WEB Core 
6) Tons of instructional videos we created
7) Consult with our partners

Share

We create TMS WEB Core with love for you so we love to hear your feedback, your comments, your inputs, your ideas. Tell us about your experiences, tell us what we can do better, what new features you wish, let fellow Delphi developers see what exciting projects you created with TMS WEB Core! Our team is listening.

Read More

Read More

New Delphi Community Edition 10.4 Available

As announced yesterday with the blog post Delphi & C++Builder FREE Community Editions Updated to Version 10.4.2 Are Now Available, Embarcadero has moved the free CE license of its two IDEs, Delphi and C++Builder, to the last version of the product, 10.4 Sydney. The Community Edition is a free edition for non-professional developers (read the FAQ or the EULA for more information) and anyone who wants to start using one of the 2 products to learn them. Being a complete product aligned to the Professional Edition of Delphi or C++Builder, it allows building applications for desktop (Windows and also macOS for Delphi) and mobile (Android and iOS). The CE edition includes both the VCL and the FMX UI libraries, but also the core RTL and database libraries, web technologies and more. If you are interested, you can download 10.4 CE and also sign up for the "summer camp" to learn more about the technology of these CE editions and other Embarcadero tools: Download Delphi CE Download C++Builder CE Signup for the summer camp I've very happy we are making the 10.4 version of Delphi and C++Builder available as a free Community Edition tools, as I'm certain a lot of people will leverage the opportunity to learn about our technology, both in terms of programming languages and libraries. If you are new to it, Delphi is a lot of fun to learn and a very powerful natively compiled language, worth having a deep look.
Read More

Writing components for TMS WEB Core

Unfortunately, at this time we do not yet have a seminal book like Danny Thorpe’s book “Delphi Component Design” (https://www.amazon.com/Delphi-Component-Design-Danny-Thorpe/dp/0201461366) for component design for TMS WEB Core. It is definitely on our todolist to write a book on TMS WEB Core component design, but until this happened, there are already a couple of resources that we wanted to bundle here that can help you out.

Component types

There are actually different component types in TMS WEB Core and depending on your needs, you might select the best type that fits.

– Components build from HTML elements 

In this component type, the component is rendered from HTML elements, like DIV, BUTTON, INPUT, IMG, SELECT, … To render the component, we basically create such HTML elements in the DOM and attach via Object Pascal code technically JavaScript event handlers to the elements and manipulate the HTML element attributes, content & style properties. 
A good starting point to develop this type of components is the blog article https://www.tmssoftware.com/site/blog.asp?post=449 
As most components included in the TMS WEB Core framework are of this type, the source code of the framework is of course also a great resource to learn from.

– Components similar to VCL controls that are based on painting on a canvas

A VCL custom control is basically a class that will paint itself and that will react to user interface inputs like mouse, keyboard, touch… The painting in a VCL control is done via drawing on the TCanvas. Well, the good news is that this component model also exists in TMS WEB Core. It can provide an easy way to port existing VCL UI’s to the web. We in fact did this with Tetris game original VCL Delphi code we found for this. You can find all the information in this blog article https://www.tmssoftware.com/site/blog.asp?post=446. Delphi developers should be quickly familiar developing this kind of custom control by descending from the TGraphicControl class and write overrides for OnMouseDown/OnMouseMove/OnMouseUp or OnKeyDown/OnKeyPress/OnKeyUp and also override the Paint method. The TCanvas class in TMS WEB Core has the same interface as TCanvas in VCL, so you will be quickly familiar using a Brush/Pen and methods like LineTo(), Rectangle(), Draw(), …

– FNC Components
Use the FNC component architecture and develop the component as FNC component that will also work in a web application.
This is another approach and comes with the additional benefit that your custom control will not only work in a TMS WEB Core web client application but also in a VCL Windows application or a Firemonkey cross platform application. And it will also work in the free Lazarus IDE with the LCL framework. Component development for FNC is quite similar to VCL or FMX component development. One basically also overrides methods for UI inputs such as keyboard, mouse and touch and performs the drawing of the control. A difference for the drawing is that this is done via the TTMSFNCGraphics context (and not the TCanvas like in VCL). The TTMSFNCGraphics is an abstraction layer that works in all supported frameworks with the same code. A good starting point for beginning to develop FNC custom controls is this blog article https://www.tmssoftware.com/site/blog.asp?post=346
Other resources
Of course, TMS WEB Core full versions ships with the full framework source code, so it is a great learning resource for writing components. In addition to this, we have published several open-source components you can directly download and not only use and learn from. You can find these components at https://www.tmssoftware.com/site/webpartners.asp
And of course, last but not least, there is always the TMS team that is available to answer your question when you get started to develop components!

Get started

So, even though there is not yet a book, there is already various information to get you started! We look forward to learn about your component development experiences and if you have interesting components you wish to share with fellow Delphi developers, you can always submit these. Authors with published components under https://www.tmssoftware.com/site/webpartners.asp become recognized partners and get a free TMS WEB Core license that can be used in Delphi, Lazarus or Visual Studio Code.

Read More

Read More

TMS WEB Core v1.8 Sirolo beta available

TMS WEB Core v1.8 beta is here

It was of course highly anticipated and awaited, this new version of TMS WEB Core v1.8 named Sirolo. Sirolo is a small but beautiful town along the Italian coast at the Adriatic sea. After city Ancona (name of TMS WEB Core v1.7 release), it is a nearby little town the Mille Miglia race in 1955 crossed.

Other than the reference to this beautiful place, what does TMS WEB Core v1.8 brings on the table for Delphi developers:

1) Miletus support for macOS and Linux

After Miletus targeted Windows in TMS WEB Core v1.7, our team now accomplished the phenomenal next step to create cross-platform web technology based desktop applications for Windows, macOS and Linux. And all that with a minimal footprint. On Windows and Linux this means single executable file apps and for macOS the typical application folder but also here with a single application executable file. Deployment can be done via ultra simple XCOPY deployment.
In a nutshell, you can create desktop applications from a single source code base from your Delphi IDE on Windows. You do actually not need an Apple mac machine or Linux box to create these applications. The GUI of these applications is rendered in the browser and therefore empowered by HTML5 and CSS3. You can take advantage of existing web application templates to create wonderfull GUIs. 
Not familiar with Miletus? You can learn all about it from this webinar replay

2) Extended Miletus local databases support

In this new version, we added two more possible local databases that can be directly used from a Miletus application and that is Interbase and Firebird. No need here to create a REST API interface, you can directly connect a client dataset to local databases. In v1.8 this is now: MS Access, MS SQL, mySQL, SQLite, Interbase and Firebird. 
            

3) Miletus support to access INI files and registry

Convenient for storing application settings, INI files or registry is what developers frequently use. So, from a Miletus app you can now easily access these INI files and the registry in the same way as you can from a VCL or Firemonkey application. Of course, there is no registry on macOS or Linux and here there is automatic fallback on INI files.

4) Two new UI components

We have added two new controls to TMS WEB Core v1.8. This is a chatbox control and a rating panel. With the TWebChatbox control, you can write web chat applications with little to no code. Drop this component on the form and all you need to do is write some lines of code to send the message to your chat server of choices or receive messages from there. The other new component is the TWebRatingPanel. This is the classic UI pattern of rating via clicking a number of stars (or other icons of choice). The rating panel offers setting rates in units of 1, 0.5 or fully fractional.

5) SHA1 encryption support in the TWebCrypto component

As SHA1 is often needed in communication protocols, we extened the TWebCrypto component that is internally using the browser crypto API to also offer SHA1 support.

6) Lots of smaller improvements and new features

Based on your feedback and that of our team, we did numerous smaller improvements to the components, we further polished the Object Pascal to JavaScript compiler and integrated the latest pas2js RTL.

Availability

TMS WEB Core v1.8 Sirolo beta is now available for all TMS ALL-ACCESS users with an active license. Our team is eager to learn about your experiences with this new version as well as about how work is going on your projects based on TMS WEB Core. If you have interesting projects that near completion, don’t hesitate to get in touch for creating together a nice story about your experiences and results with TMS WEB Core!

What’s next

First goals are to release TMS WEB Core v1.8 and at the same time bringing TMS WEB Core for Visual Studio Code on par with its Delphi companion by also integrating Miletus support. After that, our team is already researching key v1.9 new features. We can’t reveal much yet as there are several still uncertain technical challenges to tackle. We will of course keep you in the loop as soon as we feel sufficiently confident about these! 

Learn

Holidays are a good period to learn and get your feet wet with TMS WEB Core.
Didn’t have the time yet to explore the wonderful world of web development? The upcoming holiday period is the ideal time to broaden your horizons and start learning about TMS WEB Core. To help you, we can, while our stock lasts, offer  for European customers with a TMS WEB Core license purchase a free TMS WEB Core book written by our evangelist Holger Flick (books will be shipped from our main European office). If you want this book free, make sure to reserve your free copy via email and we’ll confirm availability and ship your book upon receipt of the license order. Hurry, our stock is limited!

Meanwhile, enjoy a great holiday period, why not at the gorgeous beaches of Sirolo in Italy, and with this, this blog article is full circle.

Read More

Read More

Delphi: .dproj TargetedPlatforms bit flags in main PropertyGroup, and Platform values in other elements/attributes

For cleanup of .dproj files, I want to know the bit flags that TargetPlatforms can have. TL;DR: .dproj content management in Delphi is a mess For future reference empiric values for the flags that build the TargetedPlatforms (not to be confused with PlatformTargets) element content in the main PropertyGroup of a .dproj file in a table. This might help creating an XSD for a .dproj file (Source: Reminder to self: make a start for an XSD that validates Delphi dproj files). Absent cells means I have no idea if the values are relevant or what they could be. Input for those is more than welcome. Bit# TargetedPlatforms bit flag value Platform and $(Platform)value Meaning (dropdown value of “Select Platform” dialog) 0 1 Win32 32-bit Windows 1 2 Win64 64-bit Windows 2 4 3 8 4 16 5 32 6 64 7 128 8 256 9 512 10 1024 iOSDevice64 iOS Device 64-bit 11 2048 12 4096 ($Platform) values still to cover: Android Linux64 OSX32 iOSDevice32 iOSSimulator There is only one place for TargetedPlatforms in the .dproj file: at the XPath /Project/PropertyGroup/TargetedPlatforms. For getting the XPath, I used Notepad++ as described in my earlier blog post Getting the path of an XML node in your code editor. It has the combined flags, so: 3 means Win32 and Win64 are enabled 1025 means Win32 and iOSDevice64 are enabled The Platform value (and thus $(Platform) value) is the one used in for example these elements or attributes: /Project/PropertyGroup/Platform as currently selected platform /Project/PropertyGroup/@Condition as selectivity expression, for instance  <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win64)'!=''"> <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''"> /Project/ProjectExtensions/BorlandProject/Platforms/Platform (all having for the value property with the Platform value) having a content of either True or False. This allows a .dproj file to contain information for platforms that are not visible yet. The actual values of Platform also play a role in these places: /Project/PropertyGroup/Base_Win64 containing the base settings for the Win64 platform so they can be derived for the Debug or Release builds. /Project/PropertyGroup/@Condition for instance <PropertyGroup Condition="'$(Base_Win64)'!=''"> /Project/ProjectExtensions/BorlandProject/Deployment/DeployFile/Platform/@Name for instance <Platform Name="iOSSimulator"> Even worse: there are unneeded  nodes present for bits in TargetPlatforms and /Project/ProjectExtensions/BorlandProject/Platforms/Platform being absent or having a content False for /Project/ProjectExtensions/BorlandProject/Platforms/Platform/@value other than the enabled bits in TargetPlatforms, for instance: nodes matched by /Project/ProjectExtensions/BorlandProject/Deployment/DeployFile/Platform nodes matched by /Project/ProjectExtensions/BorlandProject/Deployment/ProjectRoot/@Platform nodes matched by /Project/ProjectExtensions/BorlandProject/Deployment/DeployClass/Platform/@Name (and the parent DeployClass subtrees) nodes matched by /Project/ProjectExtensions/BorlandProject/Platforms/Platform@value Some examples of superfluous nodes when TargetPlarforms has a value of 1 (corresponding to Platform having a value of Win32: <ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/> <ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/> <ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/> <ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/> <ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/> <ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/> <ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/> <ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/> Also, non relevant platforms are included in this node: <Platforms> <Platform value="Win32">True</Platform> <Platform value="Win64">False</Platform> </Platforms> The Deployment section is even worse; see for instance [WayBack] delphi – How manage or clean deploy section in dproj files? – Stack Overflow. –jeroen
Read More