Tag: firemonkey

Why can’t I install a custom font in Win32 under FMX?

I've tried AddFontResourceEx(). But it only works in VCL. Android can modify the IDE source code to load fonts. I think it may be related to Direct2D. Only after manually installing fonts into the system can I enumerate my custom fonts. I am here: https://github.com/TheOriginalBytePlayer/FireMonkey-Fonts It seems to be a feasible solution, but it's not smooth.
Read More

My Basic Android App closes after splashscreen

I have created a basic Android64 app, with just one button and managed to build it. After installing it on my device (sideloaded), I see the app in the startmenu but once I start it it shows a splashscreen and then closes. I never get to see the button... unit MainUnit; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls; type TMain = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Main: TMain; implementation {$R *.fmx} {$R *.LgXhdpiPh.fmx ANDROID} procedure TMain.FormCreate(Sender: TObject); begin end; end. What's wrong here? :-/ PS: I have noticed, that the form is not set to visible by default, and changed that (but no change). Is there a reason to it? PS: Update 13042021: I found out this only happens on my OnePlus 8 Pro, but not on my Samsung S9. Weird!
Read More

What’s cooking in the TMS Labs: moving Delphi and FNC forward (and backward)!

Our ever growing FNC framework now already brings a whole portfolio of components to a myriad of devices and operating systems: Windows, Android, iOS, macOS, Linux, Raspbian, Web ….
So, it is clear that our R&D team is always looking out for new technology and trying to be ahead of the curve. For this reason, our team was excited to be involved in a very forward looking project for a customer that brings Delphi and our FNC framework again on the bleeding edge of technology. 
For this project, we researched how we could bring the FNC framework to a new M1 CPU + NVidia Titan V based device that features an AI driven holographic display. We tweaked the Delphi OSX64 compiler to produce M1 CPU code as well as NVidia SIMD GPU instructions to render FNC on the holographic display. When we received the test device here, the results are without a doubt stunning! You can see a glimpse here:
While playing with this cutting-edge technology, our team mesmerized how predictions of technology in movies of the seventies and eighties already got real and we wondered therefore, if we could bring Delphi and FNC at the same time to this for us nostalgic area. A first attempt was to port FNC to the Sharp LR35902 processor and after this was successful, it permitted us to run FNC on the Nintendo Game Boy. It is surprising how crisp the FNC graphics are rendered on the small Game Boy LCD screen as you can witness here:
And this achievement inspired us to go back in time even further. Surprisingly this was somewhat easier as making Delphi compile on a Intel 8080 CP/M machine. We tweaked the original Turbo Pascal 8086 compiler to use only 8080 instructions and got it working. It was however a lot more effort to downscale the FNC graphics abstraction layer to a 80×25 character CRT screen. But as you know by now, we are not scared to make our hands dirty in such challenging task. It is with pride that we can share the first FNC components now also running on a CP/M driven Intel 8080 machine from 1974 connected to a Sperry Univac Uniscope 200 terminal. 

Are you still using devices for which you like to use Delphi and FNC? Let us know, it could become the next challenge of our team! We look forward to hear what nostalgic or futuristic device you would which to bring alive with your beloved development tools.
If you read this far, we hope you did not overlook the date this blog was published and you see that the FNC technology is as a fish in the water on every platform

Read More

Read More

What’s coming in TMS WEB Core v1.7 Ancona


The new version v1.7 of TMS WEB Core has
been in development for about 6 months by now. Many of its features were
already in development in parallel to v1.6. And yes, our team already is working
on v1.8! It will not come as a surprise to you that in v1.7 there are new
game-changing features in TMS WEB Core also.

Those who have been following the TMS WEB
Core development since the first version TMS WEB Core v1.0 Brescia will know
that we name the releases after cities along the famous historic race “MilleMiglia”. To be more precise, the legendary race of 1955. And as such, after we
visited the city Pesaro with v1.6, for v1.7 we land in Ancona. The historical
meaning of the word “Ancona” is elbow which is commonly associated with the
shape of the coastline. After the ‘elbow’ Ancona, there are new sights towards
the more southern coasts of Italy.

Enough history! Let’s bring an overview of
what our team has been working on for TMS WEB Core v1.7 Ancona.

1) Components wrapping browser API for local file access

The W3C consortium proposed an API forlocal file access from Web browser applications and Google Chrome implements it
already. Given that Microsoft uses the Google Chromium engine, it is also available
in Microsoft Edge Chromium. With TMS WEB Core, you can take a head start, explore,
and start using this with its three components today:

  • TWebLocalTextFile
  • TWebLocalBinaryFile
  • TWebLocalFolder.

These components allow you to directly open
text and binary files from the local file system as well as traverse the local
file system’s folder structure from a Web application. Of course, for security
reasons, the users have to give their consent first.

2) Popup menu component and popup menu support in components

In TMS WEB Core, we offered the regular
TWebMainMenu since its inception and now we completed this trend with the new
TWebPopupMenu. It works very similar to a Windows VCL TPopupMenu. Simply drop a
TWebPopupMenu on your Web forms and assign it to control.PopupMenu to obtain an
automatic context menu for controls.


3) USB device access


The times that software developers thought
you could never use a Web application for controlling your machine’s hardware
are officially over. We already introduced support for Bluetooth with our
TWebBluetooth component, and with this release we add two new components
TWebUSBSerial and TWebUSBHID that allow you to write applications communicating
with locally connected USB devices using a serial protocol or the HID protocol.
This opens up a whole new field of applications that can be implemented using Web
technologies.


4) TWebStringGrid & TWebDBGrid extensions

We added a whole range of new grid features
in TWebStringGrid and TWebDBGrid. There are now:

  • Methods to insert & remove rows
  • A range of different inplace editor types
  • Cell merging and cell splitting
  • Loading and saving to streams
  • Loading from a stringlist with CSV data
  • Direct access to grid data as TJSArray
  • Add checkboxes to the grid

5) Async methods

There is no way around it in the Web
browser, there are different APIs that can only be used in an asynchronous way.
The reason for this is very clear: Always guarantee a responsive UI even when
lengthy operations are taking place in the application.

Many developers struggle with implementing
sequential logic for processes that occur asynchronously. We already offered
anonymous methods that can be used to handle results of methods asynchronously,
but, in v1.7, we added a whole range of async methods to classes. With a simple
await() construct around an async method, you can write your code as-if it were
synchronous and sequential, but, behind the scenes, the browser still handles
it asynchronously and keeps your UI responsive. The components to perform HTTP(S)
requests for example, load data from a URL, load images from URL, etc… now
all have async equivalents making you write code that is cleaner and consequently
easier to maintain.

var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  try
    await(boolean,ABinaryFile.LoadStream(ms));
    ms.Position := 0;
    webmemo2.lines.LoadFromStream(ms);
  finally
    ms.Free;
  end;
end;

6) Miletus framework

This is probably the biggest feature of TMS WEB Core v1.7! Miletus is a framework for creating native desktop applications with Web technologies. It permits to create wonderful and modern user-interfaces using (and in many cases reusing) HTML/CSS templates.

Still, it allows to run as a desktop application and to access desktop features normally reserved for a native desktop app. This includes:

  • local file access
  • operating system menu
  • drag & drop interaction
    with the operating system
  • access to the taskbar
  • access to local databases (SQLite, MSSQL, PostgreSQL, mySQL, MS Access)
  • so much more… 

This first introduction of Miletus in TMS
WEB Core offers the capability to create Win32 and Win64 native single EXE file
applications with a size below 10MB. And in the near future, we will add macOS
and Linux to that.

Stay tuned for another blog with a more
detailed overview of the Miletus features. An additional benefit of Miletus is
that we developed this framework from the ground up as opposed to a similar
framework called Electron that is from a 3rd party. This means that for the
future, we have full control to design any feature set we want for Miletus.

7) TWebSocketClient method added to send & receive binary data

When communicating with a web socket
server, TWebSocketClient can now directly send & receive binary data
whereas in previous versions this had to be sent as Base64 encoded string data.

8) TWebForm extended

We added more flexibility to the TWebForm. This includes:

  • Option to have a close button in the caption
  • Property to choose whether a shadow border is used or not
  • ElementCaptionClassName property added to allow the use of CSS for the caption
  • OnDOMContentLoaded event added, that signals when the browser loaded the entire DOM content
  • OnHashChange event added to handle browser back & forward buttons

9) New server-side filtering + multi-tenant support in TWebFireStoreClientDataSet

We have also significantly improved
TWebFireStoreClientDataSet. Now, TWebFireStoreClientDataSet supports to create
more flexible and more performant Web client applications using Google’s
Firestore as the backend for data storage. In the new version, it is possible
to specify server-side filters. This facilitates not only multi-tenant
scenarios but also increases performance by minimizing data returned from the
server.

10) Numerous smaller extensions & improvements to various components & IDE integration

Not only was the TMS WEB Core framework improved
in almost any corner, the IDE integration got further fine-tuning as well. The
capability to use environment variables in the compiler path with the $()
syntax was added. The same is possible with custom compiler directives. And
finally, also the pas2js compiler & RTL were updated to the latest version
v2.0.4.

Planning

The first step is that we will release the
beta version of TMS WEB Core v1.7 in the next few days to all TMS ALL-ACCESS
users and registered users of TMS WEB Core. We expect the upgrade process
should be smooth and painless as we paid a huge amount of attention to
backwards compatibility. This is proven by the fact that we did not have to make
any modifications to the meanwhile over 100 demos included. However, we want to
put the v1.7 beta into your hands first and listen closely to your feedback.
That allows us to apply further polish where needed.

After this beta period, TMS WEB Core v1.7
Ancona will be officially released, and our team will continue to work hard on
the next milestones.

TMS WEB Core for Visual Studio Code v1.3

The new version v1.3 of TMS WEB Core for Visual Studio Code is also around the
corner. The major new feature of v1.3 will be extensibility via 3rd party
components with a package system and with this, the whole portfolio of
TMS FNC components will also become usable at design-time in Visual Studio Code. The
TMS WEB Core framework will be at the same level as TMS WEB Core v1.7 for
Delphi & Lazarus. The only feature that will not yet be included in TMS WEB
Core for Visual Studio Code v1.3 is Miletus support. That is reserved for v1.4
and with this, it is expected to already bring Miletus for Windows, macOS, and
Linux.

TMS WEB Core v1.8

There are several ongoing new developments
for TMS WEB Core that we cannot reveal yet, but it is clear that v1.8 will come
with Miletus support for macOS and Linux. We already have proof of concept
versions working in the lab, but further work is needed before this is
considered “feature complete”. This will very likely be the case in v1.8.

Get started today!

The only constant in software development is change. Web technologies open up exciting new capabilities for us Delphi, Lazarus, or Object Pascal developers in general. It allows us to create with RAD component-based techniques and a strongly-typed object-oriented language no-deploy web applications. Further, we may create PWAs for iOS and Android that can be installed and run offline when needed. Best of all, we do not need to conform to Apple or Google store censorship. Alternatively, you can create  cross-platform desktop applications with Electron or Miletus at the same time. 

We are of course curious to hear what you like the most about TMS WEB Core v1.7 Ancona or what you wish to see in future versions of TMS WEB Core! We look forward to discussing all these great milestones with you!

Webinar

If you want to see the new capabilities in TMS WEB Core 1.7 Ancona demonstrated live and ask questions, we have organized this opportunity for you! Attend our free webinar on April 8, 2021, from 15h00 to 16h00 UTC (17h00 – 18h00 CEST).  Register for the webinar here.

Read More

Read More

What’s coming in TMS WEB Core v1.7 Ancona


The new version v1.7 of TMS WEB Core has
been in development for about 6 months by now. Many of its features were
already in development in parallel to v1.6. And yes, our team already is working
on v1.8! It will not come as a surprise to you that in v1.7 there are new
game-changing features in TMS WEB Core also.

Those who have been following the TMS WEB
Core development since the first version TMS WEB Core v1.0 Brescia will know
that we name the releases after cities along the famous historic race “MilleMiglia”. To be more precise, the legendary race of 1955. And as such, after we
visited the city Pesaro with v1.6, for v1.7 we land in Ancona. The historical
meaning of the word “Ancona” is elbow which is commonly associated with the
shape of the coastline. After the ‘elbow’ Ancona, there are new sights towards
the more southern coasts of Italy.

Enough history! Let’s bring an overview of
what our team has been working on for TMS WEB Core v1.7 Ancona.

1) Components wrapping browser API for local file access

The W3C consortium proposed an API forlocal file access from Web browser applications and Google Chrome implements it
already. Given that Microsoft uses the Google Chromium engine, it is also available
in Microsoft Edge Chromium. With TMS WEB Core, you can take a head start, explore,
and start using this with its three components today:

  • TWebLocalTextFile
  • TWebLocalBinaryFile
  • TWebLocalFolder.

These components allow you to directly open
text and binary files from the local file system as well as traverse the local
file system’s folder structure from a Web application. Of course, for security
reasons, the users have to give their consent first.

2) Popup menu component and popup menu support in components

In TMS WEB Core, we offered the regular
TWebMainMenu since its inception and now we completed this trend with the new
TWebPopupMenu. It works very similar to a Windows VCL TPopupMenu. Simply drop a
TWebPopupMenu on your Web forms and assign it to control.PopupMenu to obtain an
automatic context menu for controls.


3) USB device access


The times that software developers thought
you could never use a Web application for controlling your machine’s hardware
are officially over. We already introduced support for Bluetooth with our
TWebBluetooth component, and with this release we add two new components
TWebUSBSerial and TWebUSBHID that allow you to write applications communicating
with locally connected USB devices using a serial protocol or the HID protocol.
This opens up a whole new field of applications that can be implemented using Web
technologies.


4) TWebStringGrid & TWebDBGrid extensions

We added a whole range of new grid features
in TWebStringGrid and TWebDBGrid. There are now:

  • Methods to insert & remove rows
  • A range of different inplace editor types
  • Cell merging and cell splitting
  • Loading and saving to streams
  • Loading from a stringlist with CSV data
  • Direct access to grid data as TJSArray
  • Add checkboxes to the grid

5) Async methods

There is no way around it in the Web
browser, there are different APIs that can only be used in an asynchronous way.
The reason for this is very clear: Always guarantee a responsive UI even when
lengthy operations are taking place in the application.

Many developers struggle with implementing
sequential logic for processes that occur asynchronously. We already offered
anonymous methods that can be used to handle results of methods asynchronously,
but, in v1.7, we added a whole range of async methods to classes. With a simple
await() construct around an async method, you can write your code as-if it were
synchronous and sequential, but, behind the scenes, the browser still handles
it asynchronously and keeps your UI responsive. The components to perform HTTP(S)
requests for example, load data from a URL, load images from URL, etc… now
all have async equivalents making you write code that is cleaner and consequently
easier to maintain.

var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  try
    await(boolean,ABinaryFile.LoadStream(ms));
    ms.Position := 0;
    webmemo2.lines.LoadFromStream(ms);
  finally
    ms.Free;
  end;
end;

6) Miletus framework

This is probably the biggest feature of TMS WEB Core v1.7! Miletus is a framework for creating native desktop applications with Web technologies. It permits to create wonderful and modern user-interfaces using (and in many cases reusing) HTML/CSS templates.

Still, it allows to run as a desktop application and to access desktop features normally reserved for a native desktop app. This includes:

  • local file access
  • operating system menu
  • drag & drop interaction
    with the operating system
  • access to the taskbar
  • access to local databases (SQLite, MSSQL, PostgreSQL, mySQL, MS Access)
  • so much more… 

This first introduction of Miletus in TMS
WEB Core offers the capability to create Win32 and Win64 native single EXE file
applications with a size below 10MB. And in the near future, we will add macOS
and Linux to that.

Stay tuned for another blog with a more
detailed overview of the Miletus features. An additional benefit of Miletus is
that we developed this framework from the ground up as opposed to a similar
framework called Electron that is from a 3rd party. This means that for the
future, we have full control to design any feature set we want for Miletus.

7) TWebSocketClient method added to send & receive binary data

When communicating with a web socket
server, TWebSocketClient can now directly send & receive binary data
whereas in previous versions this had to be sent as Base64 encoded string data.

8) TWebForm extended

We added more flexibility to the TWebForm. This includes:

  • Option to have a close button in the caption
  • Property to choose whether a shadow border is used or not
  • ElementCaptionClassName property added to allow the use of CSS for the caption
  • OnDOMContentLoaded event added, that signals when the browser loaded the entire DOM content
  • OnHashChange event added to handle browser back & forward buttons

9) New server-side filtering + multi-tenant support in TWebFireStoreClientDataSet

We have also significantly improved
TWebFireStoreClientDataSet. Now, TWebFireStoreClientDataSet supports to create
more flexible and more performant Web client applications using Google’s
Firestore as the backend for data storage. In the new version, it is possible
to specify server-side filters. This facilitates not only multi-tenant
scenarios but also increases performance by minimizing data returned from the
server.

10) Numerous smaller extensions & improvements to various components & IDE integration

Not only was the TMS WEB Core framework improved
in almost any corner, the IDE integration got further fine-tuning as well. The
capability to use environment variables in the compiler path with the $()
syntax was added. The same is possible with custom compiler directives. And
finally, also the pas2js compiler & RTL were updated to the latest version
v2.0.4.

Planning

The first step is that we will release the
beta version of TMS WEB Core v1.7 in the next few days to all TMS ALL-ACCESS
users and registered users of TMS WEB Core. We expect the upgrade process
should be smooth and painless as we paid a huge amount of attention to
backwards compatibility. This is proven by the fact that we did not have to make
any modifications to the meanwhile over 100 demos included. However, we want to
put the v1.7 beta into your hands first and listen closely to your feedback.
That allows us to apply further polish where needed.

After this beta period, TMS WEB Core v1.7
Ancona will be officially released, and our team will continue to work hard on
the next milestones.

TMS WEB Core for Visual Studio Code v1.3

The new version v1.3 of TMS WEB Core for Visual Studio Code is also around the
corner. The major new feature of v1.3 will be extensibility via 3rd party
components with a package system and with this, the whole portfolio of
TMS FNC components will also become usable at design-time in Visual Studio Code. The
TMS WEB Core framework will be at the same level as TMS WEB Core v1.7 for
Delphi & Lazarus. The only feature that will not yet be included in TMS WEB
Core for Visual Studio Code v1.3 is Miletus support. That is reserved for v1.4
and with this, it is expected to already bring Miletus for Windows, macOS, and
Linux.

TMS WEB Core v1.8

There are several ongoing new developments
for TMS WEB Core that we cannot reveal yet, but it is clear that v1.8 will come
with Miletus support for macOS and Linux. We already have proof of concept
versions working in the lab, but further work is needed before this is
considered “feature complete”. This will very likely be the case in v1.8.

Get started today!

The only constant in software development is change. Web technologies open up exciting new capabilities for us Delphi, Lazarus, or Object Pascal developers in general. It allows us to create with RAD component-based techniques and a strongly-typed object-oriented language no-deploy web applications. Further, we may create PWAs for iOS and Android that can be installed and run offline when needed. Best of all, we do not need to conform to Apple or Google store censorship. Alternatively, you can create  cross-platform desktop applications with Electron or Miletus at the same time. 

We are of course curious to hear what you like the most about TMS WEB Core v1.7 Ancona or what you wish to see in future versions of TMS WEB Core! We look forward to discussing all these great milestones with you!

Webinar

If you want to see the new capabilities in TMS WEB Core 1.7 Ancona demonstrated live and ask questions, we have organized this opportunity for you! Attend our free webinar on April 8, 2021, from 15h00 to 16h00 UTC (17h00 – 18h00 CEST).  Register for the webinar here.

Read More

Read More

AbsoluteToLocal does not work on Android as on Windows

I'm trying to get coordinates inside of a control 1 by using another control 2 that's in front of it. To simplify, Control 1 is used as a background, and control 2 is a small rectangle that can be moved above control 1. When the user presses a button, I want to get the part of the background (control 1) that the rectangle (control 2) is over, and to achieve that I'm using AbsoluteToLocal and LocalToAbsolute. Furthermore, I want to save the selection into a 125x125 bitmap, no matter how big the user's selection actually is. Here's the code: function TForm1.CropImage: TBitmap; var LSourceBitmap: TBitmap; LDestinationBitmap: TBitmap; LSourceRect: TRectF; LDestRect: TRectF; begin LSourceBitmap := Control1.MakeScreenshot; LSourceRect.TopLeft := Control1.AbsoluteToLocal(Circle1.LocalToAbsolute(TPointF.Create(0, 0))); LSourceRect.BottomRight := Control1.AbsoluteToLocal(Circle1.LocalToAbsolute(TPointF.Create(Circle1.Width, Circle1.Height))); LDestRect := TRectF.Create(0, 0, 125, 125); LDestinationBitmap := TBitmap.Create; LDestinationBitmap.Width := 125; LDestinationBitmap.Height := 125; LDestinationBitmap.Canvas.BeginScene; LDestinationBitmap.Canvas.DrawBitmap(LSourceBitmap, LSourceRect, LDestRect, 1); LDestinationBitmap.Canvas.EndScene; LSourceBitmap.Free; Result := LDestinationBitmap; end; This function works just as it should on Windows, but when tried on Android, it gets a totally different part of the control 1. Problem is that I cannot debug the values since they depend on the screen's resolution. Maybe I'm using the functions incorrectly, but I can't see the problem in code here. Any ideas?
Read More

FireMonkey Virtual Keyboard "Bounce"

I am using C++ Builder 10.4.2 and I am targeting Android. I have been trying to figure out to NOT have the virtual keyboard "bounce" when the user changes from one input field to another. To see it, just create a simple Android app with a couple of edit buttons and compile it to Android. Tap on the first edit, then the second, etc. You will see the keyboard look like it is hiding and then reshowing. This really doesn't look professional. Any ideas how to fix / address this issue? Thanks again, Shane
Read More

How to keep Virtual Keyboard hidden on an Edit box in Delphi

I start using Delphi 10.4.1 for Android hand held terminals. Some of the terminals comes with a numeric keypad on device itself. I would like to hide/don't want to show Virtual keyboard at all for some of the Edit boxes but some of the edit boxes I need to be able to show keyboard as I need to type alphanumeric characters. I found just one solution which disable the virtual keyboard completely which I need in some other component like ListView search box etc. I would be grateful if anyone can help me. Thanks
Read More

How to include androidx.preference:preference:1.1.1 in my android project

I try to add androidx.preference:preference:1.1.1 in my project and when I look the dependencies of androidx.preference:preference:1.1.1 I found this : \--- androidx.preference:preference:1.1.1 +--- androidx.appcompat:appcompat:1.1.0 | +--- androidx.annotation:annotation:1.1.0 | +--- androidx.core:core:1.1.0 | | +--- androidx.annotation:annotation:1.1.0 | | +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.2.0 | | | +--- androidx.lifecycle:lifecycle-common:2.2.0 | | | | \--- androidx.annotation:annotation:1.1.0 | | | +--- androidx.arch.core:core-common:2.1.0 | | | | \--- androidx.annotation:annotation:1.1.0 | | | \--- androidx.annotation:annotation:1.1.0 | | +--- androidx.versionedparcelable:versionedparcelable:1.1.0 | | | +--- androidx.annotation:annotation:1.1.0 | | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 | | | \--- androidx.annotation:annotation:1.1.0 | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) | +--- androidx.cursoradapter:cursoradapter:1.0.0 | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | +--- androidx.fragment:fragment:1.1.0 -> 1.2.4 | | +--- androidx.annotation:annotation:1.1.0 | | +--- androidx.core:core:1.1.0 (*) | | +--- androidx.collection:collection:1.1.0 (*) | | +--- androidx.viewpager:viewpager:1.0.0 | | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | | +--- androidx.core:core:1.0.0 -> 1.1.0 (*) | | | \--- androidx.customview:customview:1.0.0 | | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | | \--- androidx.core:core:1.0.0 -> 1.1.0 (*) | | +--- androidx.loader:loader:1.0.0 | | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | | +--- androidx.core:core:1.0.0 -> 1.1.0 (*) | | | +--- androidx.lifecycle:lifecycle-livedata:2.0.0 | | | | +--- androidx.arch.core:core-runtime:2.0.0 -> 2.1.0 | | | | | +--- androidx.annotation:annotation:1.1.0 | | | | | \--- androidx.arch.core:core-common:[2.1.0] -> 2.1.0 (*) | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.0.0 -> 2.2.0 | | | | | +--- androidx.lifecycle:lifecycle-common:2.2.0 (*) | | | | | +--- androidx.arch.core:core-common:2.1.0 (*) | | | | | \--- androidx.arch.core:core-runtime:2.1.0 (*) | | | | \--- androidx.arch.core:core-common:2.0.0 -> 2.1.0 (*) | | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.2.0 | | | \--- androidx.annotation:annotation:1.1.0 | | +--- androidx.activity:activity:1.1.0 | | | +--- androidx.annotation:annotation:1.1.0 | | | +--- androidx.core:core:1.1.0 (*) | | | +--- androidx.lifecycle:lifecycle-runtime:2.2.0 (*) | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 (*) | | | +--- androidx.savedstate:savedstate:1.0.0 | | | | +--- androidx.annotation:annotation:1.1.0 | | | | +--- androidx.arch.core:core-common:2.0.1 -> 2.1.0 (*) | | | | \--- androidx.lifecycle:lifecycle-common:2.0.0 -> 2.2.0 (*) | | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0 -> 2.2.0 | | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | | +--- androidx.savedstate:savedstate:1.0.0 (*) | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.2.0 (*) | | | \--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 (*) | | +--- androidx.lifecycle:lifecycle-livedata-core:2.2.0 (*) | | +--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 (*) | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 (*) | +--- androidx.appcompat:appcompat-resources:1.1.0 | | +--- androidx.annotation:annotation:1.1.0 | | +--- androidx.core:core:1.0.1 -> 1.1.0 (*) | | +--- androidx.vectordrawable:vectordrawable:1.1.0 | | | +--- androidx.annotation:annotation:1.1.0 | | | +--- androidx.core:core:1.1.0 (*) | | | \--- androidx.collection:collection:1.1.0 (*) | | +--- androidx.vectordrawable:vectordrawable-animated:1.1.0 | | | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*) | | | +--- androidx.interpolator:interpolator:1.0.0 | | | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | | \--- androidx.collection:collection:1.1.0 (*) | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) | +--- androidx.drawerlayout:drawerlayout:1.0.0 | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | +--- androidx.core:core:1.0.0 -> 1.1.0 (*) | | \--- androidx.customview:customview:1.0.0 (*) | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +--- androidx.core:core:1.1.0 (*) +--- androidx.fragment:fragment:1.2.4 (*) +--- androidx.recyclerview:recyclerview:1.0.0 | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | +--- androidx.core:core:1.0.0 -> 1.1.0 (*) | \--- androidx.legacy:legacy-support-core-ui:1.0.0 | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | +--- androidx.core:core:1.0.0 -> 1.1.0 (*) | +--- androidx.legacy:legacy-support-core-utils:1.0.0 | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | +--- androidx.core:core:1.0.0 -> 1.1.0 (*) | | +--- androidx.documentfile:documentfile:1.0.0 | | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | +--- androidx.loader:loader:1.0.0 (*) | | +--- androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 | | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | \--- androidx.print:print:1.0.0 | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | +--- androidx.customview:customview:1.0.0 (*) | +--- androidx.viewpager:viewpager:1.0.0 (*) | +--- androidx.coordinatorlayout:coordinatorlayout:1.0.0 | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | +--- androidx.core:core:1.0.0 -> 1.1.0 (*) | | \--- androidx.customview:customview:1.0.0 (*) | +--- androidx.drawerlayout:drawerlayout:1.0.0 (*) | +--- androidx.slidingpanelayout:slidingpanelayout:1.0.0 | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | +--- androidx.core:core:1.0.0 -> 1.1.0 (*) | | \--- androidx.customview:customview:1.0.0 (*) | +--- androidx.interpolator:interpolator:1.0.0 (*) | +--- androidx.swiperefreshlayout:swiperefreshlayout:1.0.0 | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | +--- androidx.core:core:1.0.0 -> 1.1.0 (*) | | \--- androidx.interpolator:interpolator:1.0.0 (*) | +--- androidx.asynclayoutinflater:asynclayoutinflater:1.0.0 | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | \--- androidx.core:core:1.0.0 -> 1.1.0 (*) | \--- androidx.cursoradapter:cursoradapter:1.0.0 (*) +--- androidx.annotation:annotation:1.1.0 \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) So it's terrific to add all those aar/jar manually :( How can I do ?
Read More

Delphi FMX and Android GO

Has anyone experience with "Android GO" custom UI running a delphi FMX application? Is the .apk produced by delphi compatible? There are several tablets (eg Lenovo 7" with Android Oreo) with a lightweight custom UI on top called Android Go and I am wondering if this could lead to compatibility issues with my app that is already working on android devices.) https://www.android.com/versions/go-edition/
Read More

Workflow visualization and organisation 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 organisation 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 TTMSFNCRichEditorTTMSFNCPlanner and the TTMSFNCTreeView. Next up will be the TTMSFNCGrid, a feature rich and powerful grid component.

Read More

Read More