Embarcadero: Firemonkey OOP
Embarcadero: Firemonkey C++
Deployment Issues Just a quick heads up for everybody else that have deployment issues similar to the ones below. The underlying reason might be due to anti-virus that is interfering with the deployment process. The connection to the PAServer is successfull, but after copying a few files (visible in the deployment window), RAD Studio gives a connection error and stops deploying. Sometimes, the deployment is succesfull, but shows a "Unable to start GDB kernel" error. Running without debugging has a higher rate of success, but nevertheless, the process of deployment and starting the application is severely disturbed. In either case, running with or without debugging, I have been able to deploy and run 2 out of 30 tries. Below is a snippet of errors thrown while deploying, even though the connection is successfull 100% of the time. macOS [PAClient Error] Error: E0003 Connection to 'MacLarge' on port 64211 failed [PAClient Error] Error: E0003 Please make sure that 'Platform Assistant Server' is running on the host machine and is configured to use port 64211 iOS [DCC Error] E2597 dsymlink: Error: failed to set locale to ??2I? [DCC Fatal Error] F2588 Linker error code: 1 ($00000001) Solution The solution for this issue is simple. Uninstall or disable the anti-virus, or install an anti-virus that does not interfere with this process. On our machine, there was a McAfee license pre-installed on a HP machine that was the culprit of the deployment issues. Leave a comment if you have/had the same issues and which solution you applied to fix the issue.Read More
Embarcadero is starting today a webinar and blog post series focused on Windows 10. There are many reasons for moving to Windows 10, but a key point is Microsoft is terminating Windows 7 support fairly soon. … Read More
The post [WayBack] Why is my buttons not created in logical order? If I run this, my buttons area created ACB rather than ABC as I expected… – Johan Swart – Google+ reminded me the trouble of Delphi VCL and FMX have with alignment. Basically you have to position your control away from your intended alignment position in order for it to work. So this fails: procedure TForm1.FormCreate(Sender: TObject); var myToolBar: TToolBar; myCornerButton: TCornerButton; i: Integer; begin myToolBar := TToolbar.Create(Self); myToolBar.Parent := Self; for i := 0 to 2 do begin myCornerButton := TCornerButton.Create(tbarGrid); myCornerButton.Parent := myToolBar; myCornerButton.Align := TAlignLayout.Left; myCornerButton.Text := Chr(65 + I); end; end; Basically you have to set myCornerButton.Left to 1 before setting the Align property. Similar for the Top property and TAlignLayout.Top value. The same holds for VCL Align values alLeft with setting the Left property and alTop with setting the Top property before setting Align. See these for the actual properties and types: FMX: FMX.Types.TAlignLayout FMX.Controls.TControl.Align FMX.Controls.TControl.Left FMX.Controls.TControl.Top VCL: Vcl.Controls.TAlign Vcl.Controls.TControl.Align Vcl.Controls.TControl.Left Vcl.Controls.TControl.Top See also this question: [WayBack] Delphi: How to programmatically adjust visual ordering of components with align = alTop –jeroenRead More
Though 64-bit support was released back in 2011 with Delphi XE2, sometimes I forget which data type are native size and which keep their size no matter the compiler bitness (wiktionary/wikipedia). This post was motivated by via [WayBack] Having started with Delphi before the Cardinal type was available (Or has it always? I can’t remember.) I routinely declare 32 bit unsigned variables as… – Thomas Mueller (dummzeuch) – Google+ The most simple distinction is between Win32 and Win64, but there are more non-32 bit platforms, so these do not suffice any more: [WayBack] 64-bit Windows Data Types Compared to 32-bit Windows Data Types – RAD Studio 10.2 Tokyo [WayBack] 64-bit Windows Data Types Compared to 32-bit Windows Data Types – RAD Studio XE3 (yes, that did not get documented in XE2) The easiest for me are the below tables that only got introduced with Delphi 10.2 Tokyo: [WayBack] Delphi Data Types for API Integration – RAD Studio. I have bolded the ones that change size. Integer Data Types Type Description Pointer Byte 8-bit unsigned integer PByte ShortInt 8-bit signed integer PShortInt Word 16-bit unsigned integer PWord SmallInt 16-bit signed integer PSmallInt Cardinal 32-bit unsigned integer PCardinal LongWord 32-bit unsigned integer (32-bit Windows, OSX32, 32-bit iOS, and Android platforms) 64-bit unsigned integer (64-bit iOS and 64-bit Linux platforms) PLongWord FixedUInt 32-bit unsigned integer PFixedUInt Integer 32-bit signed integer PInteger LongInt 32-bit signed integer (32-bit Windows, OSX32, 32-bit iOS, and Android platforms) 64-bit signed integer (64-bit iOS and 64-bit Linux platforms) PLongint FixedInt 32-bit signed integer PFixedInt UInt64 64-bit unsigned integer PUInt64 Int64 64-bit signed integer PInt64 NativeUInt 64-bit or 32-bit platform-dependent unsigned integer PNativeUInt NativeInt 64-bit or 32-bit platform-dependent signed integer PNativeInt Floating-point Data Types Type Description Pointer Record Single Single precision floating-point value (4 bytes) PSingle TSingleRec Double Double precision floating-point value (8 bytes) PDouble TDoubleRec Extended Extended precision floating-point value (10 bytes on Win32, but 8 bytes on Win64) See page about multi-device applications. PExtended TExtended80Rec Real Alias of Double N/A N/A Earlier on, the Delphi XE2 documentation added a section describing the platform bitness effects in [WayBack] Simple Types (Delphi) – RAD Studio XE2 Delphi XE8 documentation added more information for 64-bit iOS in [WayBack] Simple Types (Delphi) – RAD Studio XE8 Delphi 10.2 Tokyo documentation added more information on other 64-bit POSIX platform in [WayBack] Simple Types (Delphi) – RAD Studio 10.2 Tokyo Platform-dependent integer types Type Platform Range Format Alias NativeInt 32-bit platforms -2147483648..2147483647 (-231..2^31-1) Signed 32-bit Integer 64-bit platforms -9223372036854775808..9223372036854775807 (-263..263-1) Signed 64-bit Int64 NativeUInt 32-bit platforms 0..4294967295 (0..232-1) Unsigned 32-bit Cardinal 64-bit platforms 0..18446744073709551615 (0..264-1) Unsigned 64-bit UInt64 LongInt 32-bit platforms and 64-bit Windows platforms -2147483648..2147483647 (-231..231-1) Signed 32-bit Integer 64-bit POSIX platforms include iOS and Linux -9223372036854775808..9223372036854775807 (-263..263-1) Signed 64-bit Int64 LongWord 32-bit platforms and 64-bit Windows platforms 0..4294967295 (0..232-1) Unsigned 32-bit Cardinal 64-bit POSIX platforms include iOS and Linux 0..18446744073709551615 (0..264-1) Unsigned 64-bit UInt64 Note: 32-bit platforms include 32-bit Windows, 32-bit macOS, 32-bit iOS, iOS Simulator and Android. Platform-Independent Integer Types Platform-independent integer types always have the same size, regardless of what platform you use. Platform-independent integer types include ShortInt, SmallInt, LongInt, Integer, Int64, Byte, Word, LongWord, Cardinal, and UInt64. Platform-independent integer types Type Range Format Alias ShortInt -128..127 Signed 8-bit Int8 SmallInt -32768..32767 Signed 16-bit Int16 FixedInt -2147483648..2147483647 Signed 32-bit Int32 Integer -2147483648..2147483647 Signed 32-bit Int32 Int64 -9223372036854775808..9223372036854775807 (-263..263-1) Signed 64-bit Byte 0..255 Unsigned 8-bit UInt8 Word 0..65535 Unsigned 16-bit UInt16 FixedUInt 0..4294967295 Unsigned 32-bit UInt32 Cardinal 0..4294967295 Unsigned 32-bit UInt32 UInt64 0..18446744073709551615 (0..264-1) Unsigned 64-bit Thomas Mueller blogged about the Alias at [WayBack] Delphi LongWord is not always a 32 bit unsigned integer – twm’s blog (via[WayBack] Did you known that LongWord in Delphi is not (any longer) always a 32 bit unsigned integer? – Thomas Mueller (dummzeuch) – Google+) and I think he understood it backwards from what Embarcadero means: NativeInt on 32-bit platforms is an alias of Integer (so it is Signed 32-bit) NativeInt on 64-bit platforms is an alias of Int64 (so it is Signed 64-bit) Some more fun links For a lazy afternoon: History [WayBack] Delphi 2007: Simple Types [WayBack] Delphi 2009: Simple Types [WayBack] compiler construction – Why is creating a 64bit Delphi so hard? – Stack Overflow [WayBack] Getting Ready for Delphi 64 [WayBack] The Oracle at Delphi: 64bit [WayBack] The Oracle at Delphi: More x64 assembler fun-facts–new assembler directives [WayBack] The Oracle at Delphi: x64 assembler fun-facts [WayBack] The Oracle at Delphi: Delphi check-in log entries of the day: [WayBack] The Oracle at Delphi: Divided and Confused [WayBack] The Oracle at Delphi: It’s my stack frame, I don’t care about your stack frame! [WayBack] The Oracle at Delphi: Delphi-Treff interview–In English –jeroenRead More
On the Embarcadero developer community site, there is a new blog post by Sarina DuPont covering: August 2019 Delphi Android Beta Plans & August Roadmap Update The blog post has an update to the May 2019 roadmap and it also highlights the plans around a Delphi Android 64-bit Beta that's going to be made available soon to update subscription customers. Read the article linked above for all of the details.Read More
Some of the Embarcadero servers (in one of the web farms) are experiencing some severe and prolonged outage. This is affecting (among other things) Delphi 10.3.2 installation. As a temporary workaround, the company has: provided the direct link to the ISO installer download, https://community.idera.com/developer-tools/b/blog/posts/10-3-2-installation-workarounds set up a new GetIt server to allow customers on 10.3.2 (and partially also on older 10.3.x versions) to install the most relevant add-ons and packages, like FMX Linux and Boost: https://community.idera.com/developer-tools/b/blog/posts/temporary-10-3-2-getit-server-for-installing-10-3-2-add-on-packages We should soon have the regular GetIt-based offline installer for 10.3.2 working again with the temporary server. August 1st Update We now have the ability to install 10.3.2 via GetIt using this temporary system, there is no need to change the GetIt URL manually, as it is embedded in an updated installer. And CodeCentral MyRegistered products is online again with the updated downloads. Read more on the latest status at https://community.idera.com/developer-tools/b/blog/posts/new-10-3-2-getit-installer. Thanks for your patience and sorry again for the inconvenience.Read More
RAD Studio 10.3.2 ships with a largely rewritten version of the RAD Server Management Console, a desktop application for managing RAD Server installations. … Read More
There are a number of improvements in the RAD Server Wizards, the configuration, management, and deployment processes in RAD Studio 10.3.2. Here are some details. … Read More
Blast from the past: [WayBack] delphi – Why variables are declared as TStrings and created as TStringList? – Stack Overflow Q Why variables are declared as TStrings and created as TStringList? A Because that way you could put another TStrings descendant in the SL variable (I’d probably call that Strings, not SL). In your case, that is moot, since the logic around SL contains the creation of a TStringList and no external assignment or parameter parsing. But if you ever split the logic away from the assignment, then you could benefit from using any TStrings descendant. For instance, a TMemoy.Lines, TListBox.Items, TComboBox.Items, etc. From the outside it looks like they are TStrings, but internally they do not use a TStringList but their own descendant. A few examples of classes that descend from TStrings: source\DUnit\Contrib\DUnitWizard\Source\DelphiExperts\Common\XP_OTAEditorUtils.pas: TXPEditorStrings = class(TStrings) source\fmx\FMX.ListBox.pas: TListBoxStrings = class(TStrings) source\fmx\FMX.Memo.pas: TMemoLines = class(TStrings) source\rtl\common\System.Classes.pas: TStringList = class(TStrings) source\vcl\Vcl.ComCtrls.pas: TTabStrings = class(TStrings) TTreeStrings = class(TStrings) TRichEditStrings = class(TStrings) source\vcl\Vcl.ExtCtrls.pas: TPageAccess = class(TStrings) THeaderStrings = class(TStrings) source\vcl\Vcl.Grids.pas: TStringGridStrings = class(TStrings) TStringSparseList = class(TStrings) source\vcl\Vcl.Outline.pas: TOutlineStrings = class(TStrings) source\vcl\Vcl.StdCtrls.pas: TCustomComboBoxStrings = class(TStrings) TMemoStrings = class(TStrings) TListBoxStrings = class(TStrings) source\vcl\Vcl.TabNotBk.pas: TTabPageAccess = class(TStrings) –jeroenRead More
Since we launched TMS Component Pack back in 1998, it has been our flagship product for user interface controls for VCL based Windows application development with Delphi & C++Builder.
In the past 21 years, a lot happened. Unicode support was introduced, Win64 support added and more recently, VCL got support for (per monitor) high DPI and VCL Styles (including extra VCL styles from the DelphiStyles company). Embarcadero started offering in 2011 the FMX framework for cross platform development for which we meanwhile also developed a large number of cross platform user interface components and it became crucial to differentiate products by technology, like TMS FMX components, TMS FNC components, … and more recently also TMS WEB components…
After 21 years, we thought it was time to better align the VCL user interface components with our other product ranges and naming convention and therefore proudly introduce its successor product TMS VCL UI Pack v10.0. But there is much more to it than a name change for aligning it with other product lines. Internally we also completely moved the TMS Component Pack to a new build process that was already in use for our cross-platform FMX & FNC products.
The benefits are:
- Moved to a new build & installer generation process allowing more frequent releases, faster rollout of improvements and fixes and also beta builds
- Builds of full trial versions for all supported Delphi & C++Builder versions
- In short term we will also submit a version for GetIt to facilitate download & install from the IDE itself
- Faster migration & support to upcoming new Delphi & C++Builder versions
- Better install/uninstall experience
- Consistent & clear product naming
- Focus on improvements for high DPI and VCL styles support across the entire TMS VCL UI Pack components
- New components: Kanban board UI VCL control and TableView UI VCL control
- Updated PDF generation library with new features
- Keep components backwards compatible with TMS Component Pack v9.x components
A glimpse at what is new:
In TMS VCL UI Pack v10.0, we have not only 2 new VCL components but also several improvements to existing components:
- TAdvKanbanBoard component, a highly configurable workflow visualization component
- TAdvTableView component, a versatile & modern supercharged list control
- PDF generation library improvements such as the capability to add rotated text
- Support for VCL Styles
What does it practically mean?
Let there be no misunderstanding. We paid the utmost importance to make the step for you as easy as possible while moving the TMS Component Pack to our new build platform. Normally, it should be as simple as uninstalling TMS Component Pack + download and install TMS VCL UI Pack and recompile your applications with the new version. Some notes though:
- If you use runtime packages, you will need to change the package name dependencies
- If you use TAdvTreeView, we moved this component from using TCanvas to TAdvGraphics. When opening form files using TAdvTreeView, ignore possible property errors, save the form file and recompile.
- If you use C++Builder, you will need to change the linked library name references in your project
We have summed up these steps in detail in a file migrate.txt that is included in the TMS VCL UI Pack install folder.
Moving to TMS VCL UI Pack
TMS VCL UI Pack v10.0 is the new product name for TMS Component Pack v10.0. This means all users entitled to get TMS Component Pack v10.0 automatically receive TMS VCL UI Pack v10.0. Also, users with an active subscription to TMS ALL-ACCESS, TMS VCL Subscription or TMS Component Studio receive TMS VCL UI Pack v10.0 automatically.
For your convenience, for a while we will simultaneously keep offering access to TMS Component Pack v9.x.
So, users with an active TMS Component Pack license will get both TMS Component Pack v9.x and TMS VCL UI Pack v10.x and users purchasing a TMS VCL UI Pack license or upgrading to TMS VCL UI Pack will also still get access to TMS Component Pack v9.x. Of course, as it concerns mostly the same components, these cannot be simultaneously installed in the IDE. But if, for one of the reasons above, a migration would require some work on your side to change package name references for example, you can freely chose when to plan this change and continue to use TMS Component Pack v9.x till you have time and are ready to switch to TMS VCL UI Pack.
First of all, with our processes streamlined here, we will be even more efficient & productive to roll out new TMS VCL UI Pack versions with new features, new components and improvements more frequently and faster. The new naming convention should bring more clarity as to what technology the product can be used with. Similar work has been started here already for other TMS VCL products and all will get the TMS VCL xxx productname nomenclature in the coming months.
Still having questions, comments or feedback? Don’t hesitate to leave a comment here on the blog or contact support for all questions and suggestions or sales for questions related to upgrading to TMS VCL UI Pack from older TMS Component Pack licenses or smaller VCL component bundles. We look forward to hear from you!
Intro macOS 64 bit compilation support has been added to our products. Below is a list of products that are currently enabled to compile for macOS 64 bit TMS FMX UI Pack TMS FMX Chart TMS FMX Cloud Pack TMS FMX WebGMaps TMS FMX WebOSMaps TMS mCL TMS FNC Core TMS FNC Cloud Pack TMS FNC UI Pack TMS FNC Blox TMS FNC Chart TMS FNC Dashboard Pack We continue adding macOS 64 bit support to our other products, and will mention that in the version history whenever an update is released. macOS 64 bit compile-ready support? Our products are prepared to compile for macOS 64 bit, but this is not automatically enabled. Unfortunately, RAD Studio Rio 10.3.2 is an update that uses the same version number as older RAD Studio 10.3.* versions and therefore we have decided to not automatically install for macOS 64 bit, but make it compile-ready. To compile your applications for macOS 64 bit, please follow the steps below. Install/Update one of the products in the above list Update the macOS 64 bit library path with the path to the source files Compile/Deploy your application for macOS 64 bit by changing the target MapView TMS mCL TMS mCL originally has a MapView component that was working in a 32 bit macOS operating system and was then removed from the frameworks due to technical reasons. Now, with 64 bit, you will be able to use the MapView component again. Feedback Please provide any feedback regarding macOS 64 bit compilation support so we can further improve our products.Read More
In the last post, I looked at methods to help you get information about connected displays and determine the path name for common folders. Let’s look at something very valuable when you want to convert binary data into a string: Base64 encoding.This is somewhat tricky if you have to consider all the different platforms and frameworks. FNC makes it very easy!
Again, the class TTMSFNCUtils offers awesome methods to get results quickly:
class function FileToBase64(const AFile: TTMSFNCUtilsFile): string; class function Decode64(const AValue: string; const AURL: Boolean = False): string; class function Encode64(const AValue: string; const AURL: Boolean = False): string; overload; class function Encode64(const AValue: TBytes; const AURL: Boolean = False): string; overload;
Not only are there methods to encode and decode strings, there is also FileToBase64 which allows you to retrieve the Base64 string for a file using a single line of code:
LBase64String := TTMSFNCUtils.FileToBase64( 'mydata.bin' );
Ignore the data type of AFile to specify the filename. In VCL and FMX the type TTMSFNCUtilsFile it is mapped to a string. However, for web applications you cannot specify a local file name and the method has to be invoked differently. There is no inverse function for this as it is already a one-liner in Delphi now to store a string or a byte array into a file using TFile from System.IOUtils.
In order to encode a string, call Encode64; call Decode64 to decode a string:
LMyBase64String := TTMSFNCUtils.Encode64( 'testtest', false ); LMyTestString := TTMSFNCUtils.Decode64( LMyBase64String, false );
Remember, these methods are available for VCL, FMX, LCL, and TMS Web Core.
Delphi 10.3 Release 2, available since yesterday, adds a new target platform to the IDE, macOS 64-bit. Migration from macOS 32-bit and other FireMonkey platforms should be fairly smooth. … Read More
The FNC framework helps you to develop framework-independent, cross-platform applications. It has been conceived by tmssoftware.com a couple of years ago and has recently added the web as one of its platforms fascilitating TMS Web Core.
FNC … … Read More
This week we focused on FNC, with a series of media content, brought to you via Facebook, Twitter, blog posts and other media channels. We wanted to focus on what FNC is by highlighting each framework and its corresponding operating systems individually. Here is a sample of what this looks like for the WEB.
We plan on using this for communication, promotion, technical articles, and we believe this will allow you, as a customer, have a better understanding on what FNC is. Below is an overview of what FNC offers, and what it can potentially mean for your application.
TMS FNC Controls can be simultaneously used on these frameworks:
TMS FNC Controls can be simultaneously used on these operating systems/browsers:
TMS FNC Controls can be simultaneously used on these IDE’s:
With FNC, we aim for one code base, that can be re-used on all the supported frameworks and eventually target multiple operating systems. We started with FMX and VCL, and thanks to the high level of abstraction we added LCL support which gave us access to Unix operating systems. Recently, we have added WEB support as well via TMS WEB Core. As an example, we have created an FNC overview demo to demonstrate the “one-codebase – multiple targets” principle.
We are currently also working very hard on a BETA of FNC, which brings a lot of small improvements and fixes, but also brings 2 new components: TTMSFNCPDFLib and TTMSFNCGraphicsPDFIO. In case you missed the blog post demonstrating these 2 components, check out the blog post at the following URL: https://www.tmssoftware.com/site/blog.asp?post=560. The blog post focusses on creating a report in PDF completely generated client-side in the webbrowser. It shows how to mix custom PDF content and existing FNC components and of course also works on the “one codebase – multiple targets” principle explained in this blog post.
We want your feedback!
Please feel free to leave a comment, send us an email with suggestions on this approach and what we can improve in our communication. We want you to get a smile out of your application, because a smiling application, is a smiling customer!