Category: Firemonkey

Advanced Curve Fitting with FNC Math Components



New version 3.2 of TMS Analytics & Physics
library
introduced FNC components for creating math applications with minimal
code writing. The previous
article
described how to implement curve fitting. In this article, we’ll
continue the theme and explain some advanced features for function
approximation.

Generally, we use some standard basis
functions for curve fitting: Fourier basis (sine and cosine functions),
polynomials, exponent functions, and so on. In rare cases, we need specific basis
functions to approximate the data. The TMS FNC math components provide a
straightforward way to create a basis with any set of functions. Moreover, we
can develop and test the basis right in design time.

The component for creating a basis with a
set of user-defined functions is TFNCLinearBasis1D.
The component provides the following published properties:

  • Variable (TVariableProperty) – provides the name of the variable for the basis functions.
  • Coefficient (TVariableProperty) – provides the name of the coefficient for the fitting problem.
  • Order (integer) – number of basis functions for approximation (read-only).
  • Expression (string) – math expression of the constructed function (read-only).
  • Parameters (TParameterCollection) – a set of parameters for parametric basis functions.
  • Functions (TParameterCollection) – a set of functions to construct the basis.

The two last properties provide the functionality to construct an
arbitrary basis. With the
Parameters
property, you can add named values into the math environment and then use them
to parametrize the set of basis functions. The
Functions property allows to add, edit, and delete functions via
standard Delphi collection editors. The collection contains items of
TFormulaProperty type. When you add an
item to the collection you can edit it with the Object Inspector as shown in
the picture below. 



The class TFormulaPropery has several properties and a built-in mechanism to check the function for correctness. If you input a math expression that is not valid in the current context, the Error property will indicate what is wrong in the formula. An example is shown in the following picture.



For our example, we created the collection with three basis functions: ‘1’, ‘log{2}(x/A)’ (logarithm to the base 2), and ‘P{3 2}(x/A)’ (associated Legendre polynomial of 3-rd degree and 2-nd order). Then, following the instructions described in the previous article, we added a data source, an approximated function, and a plotter to draw the function on the FNC chart. The final resulting FMX form at design time is shown in the picture below.




The main advantage of using the FNC math components is that you can select appropriate basis functions without running the application. At design time you can change parameter values and math expressions of basis functions. The changes will immediately affect the approximated function and you can see as the fitted curve looks on the FNC chart. Also, you can verify that the approximation succeeded by looking at the properties of the approximated function, as shown in the following picture.

Another feature of
the FNC math components is that they work with symbolic data representation. Although
the approximation uses discrete data as input, the result is a symbolic
expression of the curve. So, we can use this expression for some advanced
analysis. For example, we can evaluate the derivative of the function.

     The TFNCApproxFunction1D
is a descendant of the TFNCBaseFunction1D
class. Thus, we can use the same approach, as described in this article, to
evaluate and draw the derivative of the fitted curve. The resulting designed
form is shown in the picture below.

Note that the
derivative is not evaluated numerically, as a finite difference for example. It
is an analytical math function. So, this function can be evaluated at any
point, not only at discrete points in the data source. Moreover, we can
evaluate the fitted curve and its derivative at the points outside the data
interval (for example, to predict how it is changed at the next point).

It is also easy to manage the parameters of
approximation and other options at run time. For example, with the following
small piece of code, we can update the data source.

var
  x, y: TArray<real>;
begin
  x:= [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 ];
  y:= [ 8.0, 2.7, 1.7,-1.2,-1.7,-4.2,-5.4,-5.7,-5.4 ];
  FNCDataSource1D1.AssignArray(x, y);
end;

When the data is assigned, the components are automatically
updated and we can see the resulting fitted curve and its derivative on the
chart.

The source code of the demo project for the article can be downloaded
from here
. You can install the TMS Analytics & Physics
and
TMS FNC Chart
products and use many other useful features of the FNC math components.


Note that for students and teachers, there is also the free academic version of TMS Analytics & Physics. You can register for it from TMS Web Academy.


Read More

Read More

FMX Component style not showing correctly in IDE

Below are the sources to a very simple FMX component that simply inherits from a TCustomEdit but with a different Style. What I am going for is to have two buttons on the Windows version of the component and no buttons on the Android component. When I compile the sources before and run a program with the component, both devices show the components as expected. Windows shows the two buttons, Android doesn't display the buttons. My problem is, during design time in the IDE, setting the "Style" drop down to Android, the component is displayed using the Windows version. If I "edit the default style" when the Android style is selected, it shows the Edit "background" with a sourcelookup of "Windows 10 Desktopstyle.png", not "AndroidL Lightstyle.png" but also includes the buttons with a sourcelookup of "AndroidL Lightstyle.png". My assumption is I am missing something is my component design that tells the IDE which version of style to use. Any idea what that is? FYI: this is a very simple component that shows the problem. My more complicated component has the same problem. unit RHEdit; interface uses System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.Controls.Presentation, FMX.Edit, FMX.Controls.Model; type TRHEdit = class(TCustomEdit) private { Private declarations } protected function GetStyleObject(const Clone: Boolean): TFmxObject; override; function DefinePresentationName: string; override; public { Public declarations } published property Text; end; procedure Register; implementation {$IFDEF ANDROID} {$R RHEdit_android.res} {$ENDIF} {$IFDEF MSWINDOWS} {$R RHEdit_win.res} {$ENDIF} uses System.Types, FMX.Styles; procedure Register; begin RegisterComponents('Samples', [TRHEdit]); end; { TRHEdit } function TRHEdit.DefinePresentationName: string; begin Result := 'RHEdit-' + GetPresentationSuffix; end; function TRHEdit.GetStyleObject(const Clone: Boolean): TFmxObject; var style: string; begin style := 'rheditstyle'; if (StyleLookup = '') then Result:= TStyleStreaming.LoadFromResource(HInstance, Style, RT_RCDATA) else Result := inherited GetStyleObject(Clone); end; end. RHEdit_android.rc RHEditStyle RCDATA "RHEdit_android.style" RHEdit_win.rc RHEditStyle RCDATA "RHEdit_win.style" RHEdit_android.style object TLayout StyleName = 'rheditstyle' TabOrder = 12 FixedHeight = 32 object TActiveStyleObject StyleName = 'background' Align = Contents SourceLookup = 'AndroidL Lightstyle.png' ActiveTrigger = Focused ActiveLink = < item CapInsets.Left = 4.000000000000000000 CapInsets.Right = 4.000000000000000000 SourceRect.Left = 94.000000000000000000 SourceRect.Top = 63.000000000000000000 SourceRect.Right = 127.000000000000000000 SourceRect.Bottom = 95.000000000000000000 end item CapInsets.Left = 6.000000000000000000 CapInsets.Right = 6.000000000000000000 Scale = 1.500000000000000000 SourceRect.Left = 157.000000000000000000 SourceRect.Top = 95.000000000000000000 SourceRect.Right = 206.000000000000000000 SourceRect.Bottom = 143.000000000000000000 end item CapInsets.Left = 8.000000000000000000 CapInsets.Right = 8.000000000000000000 Scale = 2.000000000000000000 SourceRect.Left = 187.000000000000000000 SourceRect.Top = 122.000000000000000000 SourceRect.Right = 253.000000000000000000 SourceRect.Bottom = 186.000000000000000000 end item CapInsets.Left = 12.000000000000000000 CapInsets.Right = 12.000000000000000000 Scale = 3.000000000000000000 SourceRect.Left = 337.000000000000000000 SourceRect.Top = 190.000000000000000000 SourceRect.Right = 436.000000000000000000 SourceRect.Bottom = 286.000000000000000000 end> SourceLink = < item CapInsets.Left = 4.000000000000000000 CapInsets.Right = 4.000000000000000000 SourceRect.Left = 94.000000000000000000 SourceRect.Top = 30.000000000000000000 SourceRect.Right = 127.000000000000000000 SourceRect.Bottom = 62.000000000000000000 end item CapInsets.Left = 6.000000000000000000 CapInsets.Right = 6.000000000000000000 Scale = 1.500000000000000000 SourceRect.Left = 157.000000000000000000 SourceRect.Top = 45.000000000000000000 SourceRect.Right = 206.000000000000000000 SourceRect.Bottom = 93.000000000000000000 end item CapInsets.Left = 8.000000000000000000 CapInsets.Right = 8.000000000000000000 Scale = 2.000000000000000000 SourceRect.Left = 187.000000000000000000 SourceRect.Top = 57.000000000000000000 SourceRect.Right = 253.000000000000000000 SourceRect.Bottom = 121.000000000000000000 end item CapInsets.Left = 12.000000000000000000 CapInsets.Right = 12.000000000000000000 Scale = 3.000000000000000000 SourceRect.Left = 337.000000000000000000 SourceRect.Top = 93.000000000000000000 SourceRect.Right = 436.000000000000000000 SourceRect.Bottom = 189.000000000000000000 end> TouchAnimation.Link = <> end object TLayout StyleName = 'content' Align = Client Locked = True Margins.Left = 32.000000000000000000 Margins.Top = 4.000000000000000000 Margins.Right = 32.000000000000000000 Margins.Bottom = 4.000000000000000000 Size.Width = 0.000000000000000000 Size.Height = 42.000000000000000000 Size.PlatformDefault = False end object TColorObject StyleName = 'caretcolor' Color = xFF222222 end object TBrushObject StyleName = 'foreground' Brush.Color = xFF222222 end object TBrushObject StyleName = 'selection' Brush.Color = x7F33B5E5 end object TFontObject StyleName = 'font' Font.Size = 18.000000000000000000 end end RHEdit_win.style object TLayout StyleName = 'rheditstyle' TabOrder = 16 object TActiveStyleObject StyleName = 'background' Align = Contents SourceLookup = 'Windows 10 Desktopstyle.png' ActiveTrigger = Focused ActiveLink = < item CapInsets.Left = 7.000000000000000000 CapInsets.Top = 7.000000000000000000 CapInsets.Right = 7.000000000000000000 CapInsets.Bottom = 7.000000000000000000 SourceRect.Left = 266.000000000000000000 SourceRect.Top = 81.000000000000000000 SourceRect.Right = 305.000000000000000000 SourceRect.Bottom = 110.000000000000000000 end item CapInsets.Left = 10.000000000000000000 CapInsets.Top = 10.000000000000000000 CapInsets.Right = 10.000000000000000000 CapInsets.Bottom = 10.000000000000000000 Scale = 1.500000000000000000 SourceRect.Left = 399.000000000000000000 SourceRect.Top = 121.000000000000000000 SourceRect.Right = 457.000000000000000000 SourceRect.Bottom = 165.000000000000000000 end item CapInsets.Left = 14.000000000000000000 CapInsets.Top = 14.000000000000000000 CapInsets.Right = 14.000000000000000000 CapInsets.Bottom = 14.000000000000000000 Scale = 2.000000000000000000 SourceRect.Left = 532.000000000000000000 SourceRect.Top = 162.000000000000000000 SourceRect.Right = 610.000000000000000000 SourceRect.Bottom = 220.000000000000000000 end> SourceLink = < item CapInsets.Left = 7.000000000000000000 CapInsets.Top = 7.000000000000000000 CapInsets.Right = 7.000000000000000000 CapInsets.Bottom = 7.000000000000000000 SourceRect.Left = 225.000000000000000000 SourceRect.Top = 81.000000000000000000 SourceRect.Right = 264.000000000000000000 SourceRect.Bottom = 110.000000000000000000 end item CapInsets.Left = 10.000000000000000000 CapInsets.Top = 10.000000000000000000 CapInsets.Right = 10.000000000000000000 CapInsets.Bottom = 10.000000000000000000 Scale = 1.500000000000000000 SourceRect.Left = 337.000000000000000000 SourceRect.Top = 121.000000000000000000 SourceRect.Right = 396.000000000000000000 SourceRect.Bottom = 165.000000000000000000 end item CapInsets.Left = 14.000000000000000000 CapInsets.Top = 14.000000000000000000 CapInsets.Right = 14.000000000000000000 CapInsets.Bottom = 14.000000000000000000 Scale = 2.000000000000000000 SourceRect.Left = 450.000000000000000000 SourceRect.Top = 162.000000000000000000 SourceRect.Right = 528.000000000000000000 SourceRect.Bottom = 220.000000000000000000 end> TouchAnimation.Link = <> end object TLayout StyleName = 'content' Align = Client Locked = True Margins.Left = 21.000000000000000000 Margins.Top = 4.000000000000000000 Margins.Right = 21.000000000000000000 Margins.Bottom = 4.000000000000000000 Size.Width = 0.000000000000000000 Size.Height = 42.000000000000000000 Size.PlatformDefault = False end object TButton StyleName = 'minusbutton' Align = Left CanFocus = False Cursor = crArrow Margins.Left = 2.000000000000000000 Margins.Top = 2.000000000000000000 Margins.Right = 2.000000000000000000 Margins.Bottom = 2.000000000000000000 Position.X = 2.000000000000000000 Position.Y = 2.000000000000000000 Size.Width = 20.000000000000000000 Size.Height = 46.000000000000000000 Size.PlatformDefault = False StyleLookup = 'spinbottombutton' end object TButton StyleName = 'plusbutton' Align = Right CanFocus = False Cursor = crArrow Margins.Left = 2.000000000000000000 Margins.Top = 2.000000000000000000 Margins.Right = 2.000000000000000000 Margins.Bottom = 2.000000000000000000 Position.X = 28.000000000000000000 Position.Y = 2.000000000000000000 Size.Width = 20.000000000000000000 Size.Height = 46.000000000000000000 Size.PlatformDefault = False StyleLookup = 'spintopbutton' end object TBrushObject StyleName = 'foreground' Brush.Color = claBlack end object TBrushObject StyleName = 'selection' Brush.Color = x7F2A96FF end object TFontObject StyleName = 'font' end end end
Read More

Book Review: Delphi GUI Programming with FireMonkey (Part 1)

I purchased the book Delphi GUI Programming with FireMonkey by Andrea Magni on November 7, 2020. I dove in head first with great enthusiasm only to get derailed early on. It happened when I tried to follow the topic Understanding the Style Designer in chapter 2.As someone who knows almost nothing about FireMonkey these four and one-half pages soured my learning and turned me against this book and it's author. I tried reaching out to the author directly and received a curt response basically telling me that the examples in his book were not meant to be step-by-step. From that moment on I let this book sit on the shelf and collect dust.That was a foolish mistake on my part. The Style Designer is a central part of FireMonkey and FMX. It is my opinion, that the author introduced this complex topic much too early in the book. It was presented with just a small smattering of knowledge and guidance. Leading me to three days of frustration because I could not make the Style Designer match what I saw in the book. The style designer is much too complex a topic to simply be glossed over in this fashion. A more fitting title for this topic would be First Glance at the Style Designer. Don't Judge a Book by Only 4 Pages If you are new to FMX and FireMonkey, and you want to get the most out of this book, I highly recommend you skip the topic Understanding the Style Designer in Chapter 2 (print: 34-38, pdf: 31-35). No understanding will happen. Instead, I recommend you watch this 50 minute YouTube video by Ray Konopka called Customizing Controls with FMX Styles.After you have a better understanding of the FMX Style Designer, you may want to come back to the topic Understanding the Style Designer in this book.You can best sum up my attitude about this book (and it's author) by the phrase "Don't judge a book by only 4 pages". I owe Magni an apology for holding a grudge against him because of 4 stinkin pages (and one email) in a book. "Andrea, I'm sorry."I finally picked up Magni's book (again) last week. Actually I did a search for "Live Bindings" of my digital Delphi books which lead me to pick up Magni's book of the shelf. I opened up to Chapter 4, Discovering Lists and Advanced Components to a huge surprise. The printed copy of my book went from page 104 to page 157. Pages 105 through 156 are missing.I contacted Packt Publishing to let them know of the misprint. All is good, a new printed copy is on the way.At this point I was committed and had to fall back on reading the PDF version of Magni's book. I recently had cataract surgery on both eyes so I was very hesitant. Reading PDF books and manuals always leads to eyestrain at best or headaches at worst. That's when I discovered you can customize the background and font colors of a PDF document. See my post "Tip of the Day - How to change the text color of a PDF document" for instructions on how to do this.I'm only part way through Chapter 4: Discovering Lists and Advanced Components and so far, Magni had done a fairly descent job. I have downloaded the source code for this book. I find it very helpful to have Delphi up and running along side reading the customized PDF. I open the example projects and play along with the reading to get a better understanding. Magni has done a a great job organizing the source code for this book. There is a separate chapter containing projects for each chapter. Each project within a given chapter has it's own folder. It is very well organized. The folders seem to be named intuitively. However, I find it very helpful to rename each folder and preface each folder name with the page number. That way I can quickly associate which project goes with with page or section of the book. As a plus, any un-numbered folders means I haven't opened that project and most likely haven't read that section of the book in detail.I'm not sure when or if I will get finished with Magni's book. I'm just glad I overcame my stubbornness and opened his book back up again. I do know I have a need to and look forward to learning the following:Chapter 4 Discovering Lists and Advanced Components ListBox ListViews Treeviews GridsChapter 5 Using FireDAC in FMX ApplicationsChapter 6 Implementing Data BindingChapter 7 Understanding FMX Style ConceptChapter 8 Divide and Conquer with TFrameStand (Maybe)Bottom Line: Buy this book. Skip pages 34-38 (print), 31-35 (pdf).Semper Fi,Gunny Mikezilchworks.com
Read More

Tip of the Day – How to change the text color of a PDF document.

I was reading Andrea Magni's book Delphi GUI Programming with FireMonkey and realized I am missing pages 105-156. Packt Publishing is having a new print copied sent to me. Anyway, the PDF copy of the book is 100% complete.I've always dreaded having to read PDF books for two reasons:I don't like the way the pages jump from one page to anotherThe standard black text on a white background hurts my eyes and makes them tired.I recently discovered two things you can change about PDF books (documents) that have made a huge difference for me. One is smooth scrolling. I thought that all pdf's jumped from the bottom of the page to the top of the next page. Not true. This is a setting. The second thing I discovered is the ability to change the color of the text within a pdf document. The standard black text on white background rally hurts my eyes. By changing the background and text color it is much more enjoyable to read.This video shows you how to set smooth scrolling and change the text and background colors within a PDF document. Enjoy,Gunny Mike
Read More

Accessing and/or clearing cookies in Delphi’s FMX TWebBrowser on Android

I'm currently developing an app on Android using Delphi, and a part of the authentification is done using the native TWebBrowser component, which as I'm understanding pulls from android's native chrome webkit. I need to clear cookies specific to my TWebBrowser component upon the press of a "log-off" button and upon exit of the application, however I'm finding it quite difficult as there doesn't seem to be any procedure within TWebBrowser which ressembles a cookie manager of any sort. Whilst I have EnableCaching set to false, the app remembers my credentials upon exit and restart, which is problematic for my use case... Is there a way to access or delete cookies created by Delphi's Android TWebBrowser FMX component? I've thought of maybe importing this class :https://developer.android.com/reference/android/webkit/CookieManager with the JNI bridge, but I'm unsure on how to do so exactly and would like to try a native option if possible... P.S : I've tried running chrome queries such as chrome://settings/clearBrowserData but it doesn't seem like TWebBrowser recognizes it, but if there's a similar option then I'm also open to it. Any help is appreciated!
Read More

Software Development Kits (SDKs) Market Valuation To Explode Until 2026

The recent research report on Software Development Kits (SDKs) Market offers a meticulous analysis of all the crucial parameters such as key growth determinants, obstacles and expansion opportunities to reveal the growth pattern of the software development kits (SDKs). industry on 20XX-20XX. It also provides startling details on the sizes and shares of market segments, including product landscape and application spectrum, as well as regional segmentation. Going further, the document offers actionable information on the competitive arena, elaborating on emerging companies, leading companies, as well as new entrants in this field. Additionally, it highlights the impact of the COVID-19 pandemic on that vertical and provides a set of tactics that will help companies stay afloat amid market turmoil. Highlights from the COVID-19 case studies: Effect of the COVID-19 pandemic on the economic situation at regional and global levels Corresponding importance of supply and demand in the midst of the pandemic Industry scenario before and after the pandemic Request a copy of this report @ https://www.nwdiamondnotes.com/request-sample/118116 Overview of the regional analysis: Major regional markets are North America, Europe, Asia-Pacific, South America, Middle East & Africa, Southeast Asia. The contribution of each region to the overall progress of the industry is calculated in the study. Sales, market shares and revenues for each geographic area are shown. Other Important Inclusions in the Software Development Kit (SDK) Market report: The document segments the product landscape of the Software Development Kits (SDK) market into iOS, Android, and others. The report encompasses industry share and revenue data for each product segment. Production models, industry share, and annual growth rate of each product segment over the expected time period are provided. The scope of the Software Development Kits (SDK) market is categorized into phones, tablets, PCs, and others. Estimates of the growth rate and market share of each application segment over the forecast period are concluded with supporting statistics. The leading companies in the Software Development Kit (SDK) market are Apple Developer, Foresee, Instabug, Mapbox, Optimizely, Leanplum, Appsee, Stripe, and UserTesting. The predominant trends and their effects on businesses are presented to help better understand the competitive dynamics of this industry. A systematic inspection of the industry’s supply chain is carried out by assessing major suppliers, suppliers of raw materials and equipment, and downstream customers. The study infers the pros and cons of investing in a new project using Porter’s Five Force assessment and SWOT analysis tools. Main points covered by the table of contents: Overview: Besides a general overview of the global Software Development Kits (SDKs) market, this section provides an overview of the report to give an idea of ​​the nature and content of the study. Analysis of the strategies of the main players: Market players can use this analysis to gain competitive advantage over their competitors in the Software Development Kit (SDK) market. Study on the main market trends: This section of the report offers a more in-depth analysis of the most recent and future trends in the market. Market Forecast: Buyers of the report will have access to accurate and validated estimates of the total market size in terms of value and volume. The report also provides consumption, production, sales, and other forecasts for the Software Development Kit (SDK) market. Analysis of regional growth: All major regions and countries have been covered in the report. The regional analysis will help market players tap unexplored regional markets, prepare specific strategies for target regions, and compare the growth of all regional markets. Segmental analysis: The report provides accurate and reliable market share forecast for important segments of the Software Development Kits (SDK) market. Market players can use this analysis to make strategic investments in key growth pockets of the market. Key questions answered in the report: What will be the market growth rate of the Software Development Kit (SDK) market? What are the key factors driving the global Software Development Kit (SDK) market? Who are the main manufacturers in the market? What are the market opportunities, market risk and market overview? What are the sales, revenue, and price analyzes of the leading manufacturers of the Software Development Kit (SDK) market? Who are the distributors, traders, and resellers of Software Development Kit (SDK) market? What are the opportunities and threats of the Software Development Kit (SDK) market facing the vendors of the global Software Development Kit (SDK) industries? What are the sales, revenue, and price analyzes by types and applications of the market? What are the sales, revenue, and price analysis by regions of industries? Request customization on this report @ https://www.nwdiamondnotes.com/request-for-customization/118116 Source link
Read More

Accessing Data From Component With Live Bindings

I'm loading a combo box with a number of customer records (3000+) (Delphi Alexandria/Firemonkey). Traditionally I've done this by creating an object with the ID number of the record and the identifying text: IDRec := TIDRecClass.Create; IDRec.IDNum := FieldByName('CustID').AsInteger; cboProducts.Items.AddObject (FieldByName('CustomerName').AsString, IDRec); and fetching the ID by retrieving the object when the combo box changes, but performance for loading the records was slower than I liked, so I though I would try a Live Binding (I've never used Live Binding before so I am a total newbie.) I bound the component to a table by selecting LiveBinding -> Bind Visually from the list of properties and connecting the CustID to the SelectedValue and the CustomerName to the Item.Text. It loads the Customers quickly, but I have two issues now. First, it appears that when I select an entry, the OnChange event of the combo box does not fire, and second I'm not clear how to get the CustID number from the component for the selected entry. Once the record has been selected I need to use the CustID to fetch additional data from other tables. All of the examples of how to work with live bindings seem to bind all of the controls on the form, and that's not what I'm looking to do. Is there a resource I can use to learn how to do this? (Or a solution I can copy?)
Read More

Param null when do PUT HTTP call

I do some test with a REST API. When I do a POST call : Param := TMultipartFormData.Create; Param.AddField('param1', 'value1'); Param.AddField('param2', 'value2'); Response := Client.Post('http://localhost/project/public/login', Param); I can use param1 and param2 in my backend. When I do same with PUT method, I can't use my param, param1 and param2 are null Param := TMultipartFormData.Create; Param.AddField('param1', 'value1'); Param.AddField('param2', 'value2'); // Headers contain my JWT Response := Client.Put('http://localhost/project/public/api/profile', Param, nil, Headers); To use my param in PUT call I need to add it in my URL but I didn't want use it like that. Client.Put( 'http://localhost/project/public/api/profile?param1=value1', nil, nil, Headers); // work but bad solution I use Firemonkey 10.4.2 . EDIT: My PUT call work in Postam when I'm with body x-www-form-urlencoded. When I use form-data, I get null param. How can I give param in x-www-form-urlencoded ?
Read More

What is equivalent of VCL bmp.Canvas.CopyMode on the Delphi FireMonkey for find different of two bmp?

I get different between of two pictures according of this procedure : procedure DifBmp(nbmp:tbitmap;bmp1,bmp2:tbitmap); var rec:trect; begin nbmp.Assign(bmp1); nbmp.Canvas.CopyMode:= cmSrcInvert; rec:=rect(0,0,bmp1.Width,bmp1.Height); nbmp.Canvas.CopyRect(rec, bmp2.Canvas,rec); end; I search net and can't find any equivalent of it for FireMonkey. Of Course compare pixel by pixel is a solution but it is very slowly. thanks for any help.
Read More

FMX Timer editor

Does any one know where I can find a FMX Timer editor component that will work in windows, OSX, iOS and Android? I need to be able to edit the hours, minutes, and seconds. From what I can tell both the Android and iOS time pickers only allow changing hours and minutes and includes an "am"/"pm" selection. I need minimally to be able to do the editing using the 24-hour format, include seconds, and preferably not be limited to a max of 24 hours. I would prefer not having to create my own FMX component if there are already ones available that do this.
Read More

Audio Plug-in Software Application Market Size, Reach, Forecast to 2029

New Jersey, United States, – The latest report published by Verified Market Reports shows that the Audio Plug-in Software Application Market should experience a sustained pace in the years to come. Analysts looked at market drivers, restrictions, risks and openings in the global market. The Audio Plug-in Software Application report shows the likely direction of […] … Read More

Read More

Programmatically aligning a created TButton right next to an adjacent TComponent in an FMX Frame

Referring to the picture, I would like to align a dynamically created TButton at runtime right next to a BindNavigator.

TButton *Add_But;
Add_But = new TButton(this);
Add_But->Visible = true;
Add_But->Text = "Add";
//Add_But->Position->X = 300;
//Add_But->Position->Y = 350;
Add_But->Parent=Form1->BindNavigator1;

Form1->Frame1->AddObject(Form1->StringGridBindSourceDB1);

Form1->Frame1->AddObject(Form1->BindNavigator1);
Form1->Frame1->AddObject(Add_But);

Add_But->Align=Fmx::Types::TAlignLayout::Right;

If I execute the above code, the Add_But button would align next to BindNavigator enclosed portion of the area between the last three buttons starting from the refresh button. Positioning Add_But using X,Y is not the ideal solution as I would like the Add_But to space out by certain margin padding just by using the Align property.

How to programmatically construct a TBounds margin object to resolve the issue?

Read More

Read More