Category: Firemonkey

Is there a way to select/highlight a Date Range/series using Delphi 10.3 FMX TCalendar (Or a similar component)?

I am looking for a way to highlight a range of dates between a given start date and end date using a TCalendar in a Delphi 10.3 FMX application. It is for visual purposes as the client selects a start and end date in seperate TDateEdit components. I have looked it up, but I can't seem to find anything that explains what I want to achieve. Does the TCalendar perhaps have a method that achieves this, or is there a possible work-around? I hope that my question was clear. Thank you in advance!
Read More

How to Repaint FMX Android components in Form in C++Builder 10.4?

I wrote a very simple FMX Adroid App, the function is: Show Form 2 then write something to record(include title and detail text), close Form 2 to Main Form, then make a checkbox in Main Form with the title we just recorded in Form 2. if user check the checkbox, then press "del" buttn then delete the record file and checkbox. the problem is: when closed Form 2 and in MainForm::OnActivate we can add a new checkbox for the record. if we checked checkbox then clicked delete, free the pointer of checked checkbox, the checkbox still in main form until I reopen the APP. I tried: Invalidate(); Application->ProcessMessages(); BeginUpdate(); EndUpdate(); Still can't work does anyone know what's going on ? why FMX TForm member has no "Repaint()" or "Update()" "Refresh()" ? just like VCL has.
Read More

TGrid not Working with iOS simulator — it just run briefly and gone after installation

Why all datagrid like as follows are failing in iOS Simulator without any error message. It just run and gone after installation. I could not find any documentation related to this failures. TGrid TMSFMXGrid TeeGrid But its running perfectly fine in windows. Not sure with Android. Haven't tried yet. My only concern now is with iOS. All the type of grids not working. I did some basic RME TGrid sample in multi-device application for reference: PROCEDURE unit Unit9; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Rtti, FMX.Grid.Style, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs, FireDAC.FMXUI.Wait, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Data.Bind.EngExt, Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs, Fmx.Bind.Editors, Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Grid; type TForm9 = class(TForm) grd1: TGrid; conSqlite_demoConnection: TFDConnection; qryCustomersTable: TFDQuery; bdr1: TBindSourceDB; bdl1: TBindingsList; lnkgrdtdtsrcBindSourceDB: TLinkGridToDataSource; private { Private declarations } public { Public declarations } end; var Form9: TForm9; implementation {$R *.fmx} end. FMX FILE object Form9: TForm9 Left = 0 Top = 0 Caption = 'Form9' ClientHeight = 480 ClientWidth = 289 FormFactor.Width = 320 FormFactor.Height = 480 FormFactor.Devices = [Desktop] DesignerMasterStyle = 0 object grd1: TGrid Align = Client CanFocus = True ClipChildren = True Size.Width = 289.000000000000000000 Size.Height = 480.000000000000000000 Size.PlatformDefault = False TabOrder = 0 RowCount = 91 Viewport.Width = 269.000000000000000000 Viewport.Height = 439.000000000000000000 end object conSqlite_demoConnection: TFDConnection Params.Strings = ( 'ConnectionDef=SQLite_Demo') Connected = True LoginPrompt = False Left = 118 Top = 206 end object qryCustomersTable: TFDQuery Active = True Connection = conSqlite_demoConnection SQL.Strings = ( 'SELECT * FROM Customers') Left = 118 Top = 254 end object bdr1: TBindSourceDB DataSet = qryCustomersTable ScopeMappings = <> Left = 128 Top = 224 end object bdl1: TBindingsList Methods = <> OutputConverters = <> Left = 20 Top = 5 object lnkgrdtdtsrcBindSourceDB: TLinkGridToDataSource Category = 'Quick Bindings' DataSource = bdr1 GridControl = grd1 Columns = <> end end end UPDATE 1 I my case above I used the LiveBindings but this error is true also if used through Datasource all of the 3 types of grid components. UPDATE 2 If I set to false both fdconnection and fdquery, it works. And, if I set to true only the fdconnection, again its not working. I suspect the issue emanates from the connection itself and I also want to believe its coming from the dataset also.
Read More

App hangs by calling same Form 5 times. First 4 times work very nice, fifth time app hangs

I just started developing a mobile app which has two forms, FRM_Main (Main Form) and FRM_Party (Party Form). We can open FRM_Party from FRM_Main by clicking on an Image. Code on Image is: procedure TFRM_Main.IMAGE_PartyClick(Sender: TObject); begin FRM_Party := TFRM_Party.Create(Application); FRM_Party.Show; end; Now, when FRM_Party calls the OnActivate event, I am loading some data in a TMSFMXTableView. That code is: procedure TFRM_Party.FormActivate(Sender: TObject); var TableView : TTMSFMXTableViewItem; I : Integer; begin if Class_My_Pro_and_func.Func_DataBaseConnection then // Checks wethere database connection is active or not if not then it connect with database and returns bool value. Begin UniQuery.Close; UniQuery.SQL.Clear; UniQuery.SQL.Text := 'select * from db_stock.tbl_party where Reg_ID = :Reg_ID and Party_Delete <> :Party_Delete order by Party_Name '; UniQuery.ParamByName('Reg_ID').AsInteger := d_Glob_Reg_ID; UniQuery.ParamByName('Party_Delete').AsString := 'F'; UniQuery.Open; TABLEVIEW_Party.BeginUpdate; if UniQuery.RecordCount > 0 then begin for I := 1 to UniQuery.RecordCount do begin TableView := TABLEVIEW_Party.Items.Add; TableView.Caption := UniQuery.Fields[1].AsString; TableView.Description := UniQuery.Fields[2].AsString + ' = ' + UniQuery.Fields[3].AsString; TABLEVIEW_Party.EndUpdate; UniQuery.Next; end; end else ShowMessage('No recored Found.'); End end; On FRM_Party is a Back button which takes the user to FRM_Main. This button code is: procedure TFRM_Party.BTN_Party_BackClick(Sender: TObject); begin try UniQuery.Connection.Close; // Closing Query connection DB_Connection.Disconnect; // Disconnecting database FreeAndNil(FRM_Party); Close; except on E: Exception do ShowMessage(E.Message); end; end; Apart from the above code, nothing else is written on FRM_Party. Now, the thing is that when I am running the application on mobile and opening/closing FRM_Party again and again, the first 4 times FRM_Party works very nice, but on the fifth time FRM_Party opens properly, but when closed the app hangs. I tried so many times by closing and opening the app. Every time the result is the same. Can anyone help me?
Read More

How can Android BLE read more than 20 bytes in Delphi FMX 10.3 API is(API 29)

in Delphi FMX 10.3 now i can scan BLE deveice and can connect it ,also can receive data ,but when senddata more than 20 bytes ,the app cannot receive data. i know Modify the MTU >20 ,it will work ok in Android studio it Easy to implement, but in Delphi fmx can not find any supports Android studio sample private void setMtu(int setMtu) { BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter(); bluetoothAdapter.startLeScan(new BluetoothAdapter.LeScanCallback() { @Override public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) { device.connectGatt(DemoActivity.this, true, new BluetoothGattCallback() { @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { super.onServicesDiscovered(gatt, status); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (setMtu > 23 && setMtu < 512) { gatt.requestMtu(setMtu); } } } @Override public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) { super.onMtuChanged(gatt, mtu, status); mMtu = mtu; if (BluetoothGatt.GATT_SUCCESS == status && setMtu == mtu) { LogUtils.d("MTU change success = " + mtu); } else { LogUtils.d("MTU change fail!"); } } }); } }); } but in Delphi How to implement?
Read More

iOS AppStoreの1024×1024アイコン問題の回避策

6月中旬、AppleはApp Store Connect経由でのストア提出の要件の施行を開始しました。この要件は新しいものではありませんが、現在のルールでは、開発者が提出するアプリのパッケージリストの中にPNG形式の1024x1024のApp Store用アイコンを追加することを要求しています。(read more)
Read More

What is FNC?

What is FNC?

Since day 1, FNC stands for Framework Neutral Components. This means that the components can be used cross-framework and cross-platform. Below is an overview which frameworks and platforms (operating systems/browsers) are supported.

TMS FNC Components can be simultaneously used on these frameworks:

  • VCL
  • WEB
  • FMX
  • LCL

TMS FNC Components can be simultaneously used on these operating systems/browsers:

TMS FNC Controls can be simultaneously used on these IDE’s:

FNC logo (re-)design

To bundle this into a single logo that is consistent throughout our product range and website design we thought about the color gray to match the Neutral keyword in what FNC stands for. After a couple of brainstorm sessions we came up with the logo that would represent FNC in documentation, blog posts, demos, product pages, newsletters and many more.

Up until now, we always thought that the FNC logo would reflect what FNC was, and even with intensive campaigns around FNC and the FNC logo, trying to get customers to get to know FNC, there was always a slumbering thought that the logo didn’t feel right and didn’t represent what it should stand for. After all these years, it still remains a mystery for some and therefore we decided to redesign the logo and starting from today, we’ll adopt the following design.

With this new logo we feel confident that this will represent FNC in a better way as it was with the old logo. In the coming days/weeks, the new design will be distributed throughout our FNC products as well as used in various social media items, documentations and installers.

Read More

Read More

Workaround for iOS AppStore 1024×1024 Icon Issue

In the middle of June, Apple started enforcing a requirement for store submissions via App Store Connect. While the requirement is not new, in the past Apple allowed developers to add the 1024x1024 icons via the store listing, rather than as part of the app submission. Now they are requesting the icon to be part of the package, although it seems that some app updates are exempted from the rule. We plan to add direct support for the deployment in a future 10.4 update release. In the meantime, we have published a very detailed set of steps to work around the issue using RAD Studio 10.4. The steps are on the Embarcadero Quality Portal (QP) web site for the issue RSP-29692, in the comment linked here: While the detailed steps are fairly long, in essence what you have to do is to use an asset catalog to provide all of the icons used by your app. This is needed in addition to the Storyboard Launch Screen support provided in RAD Studio 10.4 Sydney. Here is a summary of the detailed steps: Create an asset catalog with the actual icon and image files used by the app. You can do this by starting with the asset catalog provided in the workaround, and replacing the placeholder images in the file available in the QP entry with your own images. Compile the asset catalog on your macOS computer. Transfer the files generated as part of the asset catalog compilation from the macOS host to the application project root folder. Update the Info.plist file in the project to contain the correct property keys for the App Store Connect submission. The use of the DTPlatformVersion property key has been observed as key for the App Store Connect submission. Update the project deployment list to include the proper PNG files and replace the Info.plist and files generated by default. As a reference, Apple requirements for the different graphical elements are explained at With the detailed steps in the QP entry, you should be able to make a successful App Store Connect submission for your RAD Studio 10.4 apps.
Read More

TMS Forum becomes TMS Support Center

Support is an essential part of software development. Not only to get you up to speed if you are struggling with getting to know a new product but also if there is a problem with a product in an existing application. It is important to get good quality support when you need it.

Here at, we pride ourselves in providing the best possible support for our customers. We are constantly working on improving our support channels and one of those channels is getting a major overhaul today.

Introducing the TMS Support Center

The new TMS Support Center will replace the TMS Forum from today and includes a whole lot of new features and technical improvements.



The new TMS Support Center is structured in the same way as the website. On the main page a list of categories/frameworks is displayed along with an overview of the latest topics. Pick a category to display a list of products belonging to that category. Pick a product to consult previous posts about that product or create a new topic.


Access to the TMS Support Center is free. However, to make sure providing support remains manageable and fast, posting questions is only allowed for customers with an active license for a specific product.

By letting all active registered users take part, anyone using the same product is encouraged to join the discussion and provide their own insights, experiences, or even solutions.


Making search quick and easy is important. This enables you to find out if a particular question has been answered before and get a previously suggested solution right away without needing to wait for an answer.

All data from the TMS Forum has been migrated to the new TMS Support Center.
As such the TMS Support Center also acts as a giant searchable archive from day 1.


Sometimes words alone just aren’t enough. Add images and files to your question with ease.

Mobile friendly

Want to access the TMS Support Center while away from your desktop? No worries, the site is fully compatible with mobile browsers.


The TMS Support Center will allow us to keep providing you with the best possible support more efficiently than ever. Now and in the future!

Read More

Read More