News, Blogs, and Tips

IBX QP Issues Addressed in RAD Studio 10.3.3

Marco Cantu - Fri, 12/13/2019 - 02:53

Along with all of the bugs issues addressed in RAD Studio 10.3.3 and listed at http://docwiki.embarcadero.com/RADStudio/Rio/en/New_features_and_customer_reported_issues_fixed_in_RAD_Studio_10.3.3 we also included improvements to the IBX (InterBase eXpress) library that ships with the IDE, incorporating changes done to the IBX library by Jeff Overcash.

These were marked as closed with a delay, and so they were not included in the official list in the docwiki above, but I wanted to highlight them anyway -- IBX is a relevant library a lot of RAD Studio developer use. 

This is the list of additional, IBX related fixes

  • RSP-19934: IBX - tIbDataSet not able to handle chr(0) in char(16) character set OCTETS
  • RSP-19595: Some code TFileStream.Create(AFileName, fmOpenRead) locks files
  • RSP-19459: TIBTable.CreateTable - missing data types and wrong type
  • RSP-19263: TIBExtract raises exception because of error in query in TIBExtract.ListAllTables
  • RSP-18709: TIBInputDelimitedFile ignores SkipTitles
  • RSP-17061: IBX fails on Turkish locale due to use of ToUpper instead of ToUpperInvariant
  • RSP-15413: IBX.IBDatabase SetHandle doesn't create encodings (FEncodings)
  • RSP-13602: AV using IBX TIBDatabase.CreateDatabase with UTF8 character set

More IBX fixes (and some features tied to InterBase 2020 features) are expected in the next major release of RAD Studio.

Categories: News, Blogs, and Tips

Deploying RAD Server with Linux Docker

Marco Cantu - Thu, 12/05/2019 - 06:35

Earlier this week I blogged about Getting Started with Delphi and Linux Docker Support covering the Docker scripts and ready-to-use Docker images on DockerHub you can use to deploy Delphi Linux applications manually or via PAServer and the IDE.

Now the main reason Embarcadero invested on Docker support is to help deploying RAD Server solutions.

What is RAD Server?

Over the last few years, Embarcadero has focused on building a new solution for modern, multi-tier, web service development, called RAD Server. This technology enables developers to quickly build new application back-ends or migrate existing Delphi or C++ client/server business logic to a modern services based architecture that is open, stateless, secure and scalable. RAD Server can be deployed to Windows on IIS and Linux on Apache. RAD Server is powered by a database for storing users data, usage information, and more and this database is a custom instance of Embarcadero’s InterBase. As a developer, you build resource modules (containing a various number of custom endpoints) as runtime packages (BPL) that can be added to RAD Server.

For more information see http://docwiki.embarcadero.com/RADStudio/Rio/en/RAD_Server_Overview and keep in mind that a single server deployment license is included with any RAD Studio Enterprise license, while the Architect editions include an unlimited server license.

Classic Deployment

In general, you can build a RAD Server solutions using a local, standalone version installed with the developers tools (a version we don’t recommend using in deployment, as its performance is limited). We distribute via GetIt package manager installers to deploy the needed files on both Windows and Linux. So if you have a server you want to deploy RAD Server to, you need to run those installers on your machine and deploy the license file as needed.

Deploying to Containers

As an alternative, you can deploy RAD Server to a Linux Docker container using the scripts we are providing (or customizing them). There are two approaches we provide:

  • The first, pa-radserver Docker image, includes RAD Server and Apache, plus PAServer
  • The second includes the elements above plus the RAD Server database (InterBase)

We recommend keeping the database on separate server, VM, or container, as it has a license attached to it and when recreating the container you’d have to reapply the license. In this case, you install only RAD Server in the container and provide the IP address and port of the machines hosting the database server.

The pa-radserver Docker image

The pa-radserver Docker image uses Ubuntu:Bionic as a base image and adds the PAServer and RAD Server on Apache installation plus their configurations. The PAServer archive and the RAD Server Installer are downloaded from the Embarcadero server. This image contains all of the functionalities of the PAServer image with the addition of RAD Server on Apache. 

This Docker container allows for developers to test, debug, and deploy Linux applications and custom RAD Server endpoints as well as deploying RAD Server in a production environment. Configuration options for this image include items such as the PAServer password and the RAD Server database (InterBase) location and port. 

This is an example of how you can download and start this image (in case of IB running on port 3050 in the current machine, other parameters are similar to the example in the previous blog post)

docker pull radstudio/pa-radserver docker run -d --mount source=ems,target=/etc/ems -e DB_PORT=3050 -e DB_HOST=127.0.0.1 -e PA_SERVER_PASSWORD=securepass -p 80:80 -p 64211:64211 -p 8082:8082 radstudio/pa-radserver

​Now ​this installs the server without the ems.ini configuration file or any custom package. You can deploy those manually, or use a RAD Studio project to deploy the files via PAServer (a nice idea but beyond the scope of this blog post).

For this script to work, you need to have InterBase active (and with a RAD Server license deployed) on the machine hosting the docker engine.

The pa-radserver-ib Docker Image

The alternative approach is to use the pa-radserver-ib Docker image. This uses Ubuntu:Bionic as a base image and adds PAServer, RAD Server on Apache, and RAD Server database (InterBase) installation and their configurations. The PAServer archive and the RAD Server Installer are downloaded from the Embarcadero server. The pa-radserver-ib Dockerfile can be configured to accept a RAD Server license SLIP file at build time which will create a fully licensed Docker container.

Otherwise the pa-radserver-ib container should be run in foreground mode the first time so that you can add a RAD Server license. This image contains all of the functionalities of the pa-radserver image with the addition of the RAD Server database (InterBase). This provides you with a single self contained instance of RAD Server. This image can be configured to run as a production environment by disabling PAServer and broadwayd. Options can be specified at build time or at run time. 

This is an example of the commands needed to get this going (safe for the license, see below):

docker pull radstudio/pa-radserver-ib docker run -it -e PA_SERVER_PASSWORD=securepass -p 80:80 -p 64211:64211 -p 8082:8082 -p 3050:3050 --mount source=interbase,target=/opt/interbase --mount source=ems,target=/etc/ems  radstudio/pa-radserver-ib How To License The RAD Server Docker Container

There are two reasons this self-contained approach is not ideal. The first is you have to generate the database each time you want to run the system, the second is this is a bit at odds with the licensing. For this second issue, we can suggest some options.

There are two different ways to license the stand alone pa-radserver-ib Docker container image of RAD Server. The first method is to build the Dockerfile and have it take an existing distribution license slip file. The second method is to run an existing pa-radserver-ib Docker container image instance in interactive mode, enter your RAD Server license number, and register it with Embarcadero. Both methods should be run with a persistent volume so that any changes to RAD Server including the license are saved between run instances.

The Docker Scripts on GitHub

The scripts for the two images discussed in this blog post are available at:

The two images are on Docker Hub along with the PAServer one at https://hub.docker.com/u/radstudio

More Information on RAD Server deployment with Docker

More information will be made available soon in a specific white paper Embarcadero is finalizing.

Categories: News, Blogs, and Tips

Getting Started with Delphi and Linux Docker Support

Marco Cantu - Mon, 12/02/2019 - 03:05

Over the last few years, it has become more and more common to deploy server side solutions (and in fact any type of application) to lightweight containers rather than physical machines or virtual machines, as this allows more flexibility (also in terms of testing), a better way to rebuild the same execution environment, and more scalability. Along with the 10.3.3 release, Embarcadero has started officially supporting deployment of general Linux applications to Docker containers, specifically supporting the deployment to RAD Server.

In this blog post I’ll introduce Docker and Docker Hub and how you can easily get started deploying your Linux application to Docker. In a second blog post I’ll focus specifically on RAD Server deployment. We are also going to have a more detailed white paper on this topic available soon.

What is Docker

Docker is an OS-level virtualization environment that allows for the packaging and delivery of software as a bundle inside a container file. The container files are executed by the Docker Engine and multiple containers can run side by side on the same Linux installation. Inside each container is an OS-level virtualization environment. 

Containers are more lightweight than virtual machines because they are run by Docker Engine. Containers are created by building a set of instructions called a Dockerfile into a container image. Container images are then executed on the Docker Engine. Both the build step and run step can take a number of arguments that configures that specific build or run container image.

Additionally, existing container images can be used as starting points from within Dockerfiles which allows you to add new functionality on top of the functionality of the existing container image. There are many sources of information on containers and docker, and a good starting point is https://www.docker.com/.

What is Docker Hub?

Docker provides a service that allows developers and publishers to distribute Docker images to the public or their team. This service is known as Docker Hub and provides a way for users to use repositories where specific Docker Images are located. Docker repositories also allow for Docker Image versioning. Docker Hub contains official images such as the Ubuntu image that can be used as starting points for many users. 

RAD Studio Docker Containers

The RAD Studio Docker containers paserver, pa-radserver, and pa-radserver-ib are available directly from DockerHub and also as Dockerfiles (on GitHub) plus additional helper utilities. When pulling the containers from DockerHub using Docker the organization name has to be prefixed to the container name such as radstudio/paserver, radstudio/pa-radserver, and radstudio/pa-radserver-ib. For this blog post I’ll start focusing on the first one, radstudio/paserver, which does not include RAD Server.

Docker containers have a number of different parameters that you can pass to the Docker Engine when starting an instance. Additionally, custom build and run parameters can be defined when building and running a Docker image. A number of custom parameters have been included in the scripts we provide, including for example the password for PAServer.

Docker container instances can be run in the foreground where you can interact with an app that is running within the instance or they can be run detached in the background which behaves like a service. 

Docker container instances will not by default store any changes to the instance between runs (they are transient images). However, you can set up a persistent Volume within the Docker instance which will store changes between runs of the Docker container instance. A directory within the Docker instance can be mounted to the Volume and any changes made within that directory persist on the Volume between runs of the Docker instance.

How To Install Docker on Linux

The Docker system can be installed in a number of ways. One way to install Docker is to use the APT package manager that is included in the Ubuntu operating system. To install Docker using APT simply run the apt install command with elevated privileges either by using sudo or by using the super user account. 

#if using sudo sudo apt install docker.io #if using super user account apt install docker.io The PAServer Docker image

The PAServer Docker image uses Ubuntu:Bionic as a base image and builds on it to include the PAServer tool and its functionalities. The PAServer tool is downloaded from the Embarcadero server. This image contains PAServer and all of its dependencies along with the GTK+ framework for using BroadwayD (a feature part of the FMXLinux library for building UIs on Linux, library that is freely included with the Delphi). BroadwayD can be used to display GTK+ applications on the web via HTML5 and websockets. Having these two tools available on the same Docker container allows for developers to deploy console and GUI based applications using the PAServer and view the GUI applications through a web browser via the BroadwayD server.

This image has a few parameters, including the

  • The PAServer password and can be set as build parameter or run parameter
  • Whether you want to run in foreground interactive mode (-it) or detached mode (-d)
  • The external PAServer port (that is the port of the host mapped to the PAServer port in the container) and the broadwayd port remapping
  • The default password for PAServer is set to ‘embtdocker’

This is an example of how you can download the image and start it with a few parameters:

docker pull radstudio/paserver docker run -it -e PA_SERVER_PASSWORD=securepass -p 64211:64211 -p 8082:8082 radstudio/paserver

This is is a Linux console (via PuTTY) after the Docker image has been installed:





At this point you can refer to the docker image by its host IP and the port address from the RAD Studio IDE, and deploy and run a Linux application via PAServer hosted by the docker image. Therefore the Delphi application will run under docker.



The Dockerfile on GitHub

Instead of pulling an image from docker hub, you can create a custom one using the scripts we have built and are making available on GitHub. The PAServer Dockerfile includes the instructions which are used at build time by Docker to create the Docker image. The Dockerfile relies on a specific version of PAServer that is downloaded from Embarcadero and it is available at:

https://github.com/Embarcadero/paserver-docker

More Coming

In the next blog post, we’ll continue by focusing on RAD Server deployment via docker, which was the key reason for Embarcadero to support docker containers.

Categories: News, Blogs, and Tips

RAD Studio 10.3.3 Launch Webinar Wednesday and Event in Milan Friday

Marco Cantu - Tue, 11/26/2019 - 07:17

This week I'm involved in two events focused on the recent RAD Studio 10.3.3 release. 

Tomorrow, Wednesday November the 27th, I'm co-presenting an online launch webinar for RAD Studio 10.3.3, covering the main features introduced in the new release of 10.3 Rio. The webinar is at 12 noon Central US time, which is 7PM in Europe (CET).

For more information and to register see https://register.gotowebinar.com/register/6346001087536683521

On Friday November the 29th, I'll be presenting RAD Studio 10.3.3 in person in Milan, Italy, with Daniele Teti. The event is in the afternoon (from 2 pm), near the Central Station. If you are in the Milan area and want to attend, please register at: http://www.bittime.it/scopri-le-novita-di-rad-studio-con-cantu-e-teti/

Both events will be open for questions, online or in person.

Categories: News, Blogs, and Tips

Delphi Android 64-bit Support in RAD Studio 10.3.3

Marco Cantu - Fri, 11/22/2019 - 06:07

The main feature of just released RAD Studio 10.3.3 is the Delphi language support for the Android 64-bit platform.

Android 64-bit Delphi Support

The platform support is provided via a new Delphi compiler for the Android 64-bit platform, based on the LLVM compiler infrastructure like the Android 32-bit counterpart (and the iOS compilers). This compiler still uses ARC memory model, to reduce migration effort to 64-bit that Google requires for store submissions. The IDE offers the ability to add the new platform to an existing project, compile and debug, and deploy to the store (more on this later).

All of the libraries we support on Android are available, from RTL to FireMonkey, form database access with FireDAC to Parallel Programming Library, so your code should migrate fairly smoothly. There is also support for InterBase 2020 (just released) on Android 64-bit.

Android 64-Bit Caveats

There are a few hurdles to consider when you start building Android 64-bit applications The biggest issue is that about 50% of Android devices out there have a 32-bit CPU, or they have 64-bit CPU but run a 32-bit version of the OS, and therefore cannot run 64-bit Android applications.

If you want to verify your Android device CPU can run 64-bit apps one option is to use existing apps on the Play Store, like the following:

  • AIDA64 (check the information in the CPU page)
  • CPU-Z (check the System page)

If it indicates your CPU has 64-bit ARMv8-A instruction set, but it is set in 32-bit mode, it implies the Android version is not 64-bit. In case of a mismatch, at the moment you’ll get a specific error message when running a 64-bit APK, but a not-co-clear error message when you try to debug.

Notice also that adding new 64-bit platform doesn’t automatically add all deployment files and additional Java libraries, these might needs some fine tuning as part of the project migration. You can also consider creating a new project file (dproj) from scratch with all the correct defaults.

64-Bit Code Migration is Generally Smooth

In most cases, your Delphi code will just recompile on 64-bit platforms, and you can a larger address space -- one you'd likely never use on your phone.

What is different in practice is that pointers, object references, string references and any other data type referring to a memory location becomes a 64-bit, 8 bytes pointer. This also implies that SizeOf (Integer) is now different from SizeOf (Pointer). In fact, Integers remain 4 bytes while the NativeInt type depends on the platform (4 or 8 bytes on 32-bit and 64-bit, respectively).

If you are doing any pointer math or have code that depends on data structure alignment, you might have to change it. And the same if you are type casting Integers to pointers. If you are doing low level calls to native libraries, you might also need to adjust the code.

Android App Bundle Support

The other relevant feature that Delphi 10.3.3 is introducing for Android developers is the support for the AAB format (Android App Bundle). This is a deployment file format capable of bundling both 32 and 64 binaries and files, aimed to store submission -- you cannot install a bundle on your phone directly. Similarly to Apple Universal format, once you upload a bundle the end user downloading via the Play Store will just receives the proper files for the specific device (and its bitness).

To enable App Bundle support you can use the matching compiler option for the 64-bit Android target:

You'll also need to provide proper provisioning information and you can generate from the IDE the .aab file to upload to Google Play Store.

Categories: News, Blogs, and Tips

Delphi 10.3.3 is Available

Marco Cantu - Thu, 11/21/2019 - 08:54

I've very happy to see the official release of Delphi 10.3.3, which is primareily focused on adding the Android 64-bit platform to the product, so you can publish again any application to the Google Play Store (also thanks to the new support for the Android App Bundle format).

You can find more information about this release at the following links:

There is already a small hotfix to improve the iOS dark mode support, avaialble at http://cc.embarcadero.com/item/30899

Categories: News, Blogs, and Tips

Visual Components Library (VCL): The Best Choice for Windows Applications

Marco Cantu - Wed, 11/20/2019 - 03:05

Atanas Popov (General Manager of Embarcadero) and Marco Cantu (RAD Studio Product Manager at Embarcadero) have had a conversation about the role of VCL for Windows client development. This is an un-edited transcript of the recording of the chat.

Atanas: Hi Marco, I wanted to take this opportunity to ask you a couple of questions about VCL. As the interest in upgrading to Windows 10 grows and companies consider modernization options, people are always asking, "Well, do I go VCL? Do I go FireMonkey? Do I go Web?" While we have a lot of information on VCL, it's either too technical or it is too high level. It appears that we can't get the right balance to communicate clearly why VCL is such a great choice. So given that you are one of the foremost experts on the subject, I thought that I can ask you a few questions on VCL. To start with, can you give us your definition of VCL?

Marco: VCL is, as the name implies, a Visual Component Library. It's a class library representing both in-memory objects and visual objects that you can use on your application. It is both visual and component-based, meaning you have the ability to drag and drop components in a designer and immediately preview and get a feeling of how the application is going to look like and behave. I believe that early on, it borrowed some concepts from Visual Basic, which is one of the other early tools in this space.

However, differently from other tools in that space, especially at the time, it was fully object oriented. So anything you do in the designer, like creating a button, you can achieve at run time. In fact, the designer is the run time, it uses the library itself. That was very unique and powerful. While it has been replicated by some other IDEs recently, few can achieve that, especially for Windows. It remains one of the key tenets of RAD Studio, this dual nature, very easy to use and very fast for developers to create the UI and also add logical components like a database table with a query and a SQL statement, then connect it to your data grid or visual component. So everything can be done very smoothly. When the application grows, you can move most of this to the application logic to have a nicer and more robust architecture.

Atanas: We've seen some similar things develop in JavaScript. It is a space where there are a lot of drag and drop options, but it seems like a lot of them have much harder time connecting the design time process with actually deployment and keeping them in sync. But in terms of Windows development, what in your mind are the alternatives and how does VCL compare to them?

Marco: VCL started as a wrapper on top of the Windows API, but it is very high-level of a wrapper. It is a thick layer. It adds a lot of concepts on top of the APIs, but still most of the VCL control have a Windows handle. So, they map closely to the API and the mapping is very strict. For example, Delphi is the only language that has a keyword message that lets you map to a Windows message. By comparison, other languages in the Microsoft space use more complex code to go around and do this mapping. For us, this is a language feature, which is really unique.

The only library that gets similar to what we do is WinForms for C# and.NET. However, WinForms is much smaller in terms of library scope and has fewer components. It is also .NET, which means that every time you are using a component, there is a call from.NET, a marshaling call to the native and then back, while Delphi being native, everything is compiled, everything is a direct API call, therefore faster and smoother. The layer has more complex actions and the action manager concept abstracts the UI. In WinForms this is available through third-party add-ons, but not as a native feature. Unfortunately, WinForms development stopped quite some time ago while VCL continues to have full integration with not just the Windows API, but COM and now integration with WinRT. Because these are all platform layers, they are all native, all written in C++ ultimately, but we can interface directly with Delphi.

The other alternative is Visual C++, but Visual C++ is really a thin layer on top of the API. There is very little productivity advantage and it's not visual. You don't drop components. You do that only for dialogue boxes, but it's not how visualization is generally understood. Yes, it's good, you can call an API as natively as Delphi, but the library is limited and you end up having to write way more code than you do on the Delphi side. Plus C++ is a difficult codebase to maintain and upgrade.

Atanas: This sound pretty clear. What about some of the new tools that are out there that come from web or mobile. For example, Electron provides nice JavaScript wrappers to build native applications. What is your opinion on that approach when it comes to building Windows apps?

Marco: I can understand the desire having a single language like JavaScript that you can use on mobile and desktop. However, what we are seeing is a new set of applications that are really, really memory hogs. They consume a lot of memory and are generally quite slow. I have Windows clients for some of my chat applications or social applications and all of these are really slow. If you're just browsing messages on a social network, it should not take a gigabyte of memory. That's illogical. It cannot take minutes to boot, and it's not the connection - it's the rendering; it's the processing. A lot of them are written with Electron. They encapsulate the application like a full web server, node JS as an engine, a full browser for the rendering. And the other thing, they don't look Windows in any way. And a Windows UI is Windows UI. We should respect the environment. We will never write an iOS application that does not look iOS. Why should we write a Windows application that looks completely extraneous to the platform, completely different from the platform? I understand the advantage of using a single language, but in terms of performance, quality, I am not sure that the efficiency is worth it.

Another thing, the code is JavaScript, so reverse engineering and analyzing the code is more cumbersome than Delphi. Because you're relying on many more third-party components, you need to keep updating those components. You have dependencies, you have dependencies that have potential security holes, like a browser and a web server. So you need to keep continuously updating all of these modules in your system. More dependencies means less control, like recently we learned that Apple iOS has been rejecting application because the user under-commented APIs. Using a lot of open source, also presents risks. There are some advantages of course. JavaScript is a common language with many developers, but quality, performance, stability, platform integration, these are all weaknesses compared to building a native application with Delphi or C++ or another direct language.

Atanas: I think Microsoft has done a really nice job with Windows 10, and if you look at just the look and feel on the platform, it is so modern and the applications are powerful and fast. So, for the same reason that people build native application for iOS or Android, I see no reason not doing this for Microsoft. You have a much bigger screen with a lot more UX options, so you really should take full advantage of the OS.

Marco: And the other important thing to note is that, 10 years back, doing native felt you're at risk. Microsoft just kept saying, "Oh, eventually, there will be.NET only running on Windows." And so a lot of our customers were scared, saying, "Oh, what's happening here? Because in the future, I won't be able to run my application." That didn't happen. Five years ago there was another scare, "Oh, you need to move to Universal Windows Platform, because if it's not Universal Windows Platform (UWP), it's not going to run on Windows." All of our customers got worried. Then, we had the desktop bridge, and we were able to support the Universal Windows Platform seamlessly through Centennial. Your VCL application can be easily deployed to the Windows store. Today Microsoft has completely reversed the position. UWP doesn't really exist anymore, and the new platform component on Windows are native. So the new Edge control for embedding the Edge Chromium web browser is a native control. The new WinUI version 3 has a bunch of native controls. So Microsoft is kind of giving up on trying to push everybody on UWP and say, "Okay, go native," and then for protection and security, they are going to use MSIX, which is a technology that's very friendly to the native compiled application. So, that's great for us because it provides even more APIs we can embed, encapsulate and support from the Delphi and C++ VCL applications.

Atanas: I do think that Microsoft with Surface strategy and other moves, have done well to energize the Windows platform in general. So they are more confident in that path, which is excellent for us, excellent for Microsoft. Any last comments related to building a Windows application today -- or any other advice for customers?

Marco: There are few things that are important. First is start considering today's hardware and architecture and not yesterday's. Start to build applications that really have the Windows 10 UI, and not the Windows XP UI or something like that. Using styling is relevant. If you use styling, it is a little extra effort, but using styles allows you to have an application that feels native, and you have the flexibility of adapting to whatever is native like today or tomorrow or the day after tomorrow, without having to rewrite anything in your code. So the fact that the application can look Windows 7 or Windows 10 just by changing a flag, provides a lot of additional value because there's no rewrite.

If you consider Microsoft, they're saying, "If you want to embrace the new modern UI, rewrite your UI from scratch." And honestly, it's difficult for a company that invested years in building the UI to rewrite. We say, "No, just apply a level of styles on top of UI. It will still become a very nice application. There is some work, it's not completely free, but it's a small percentage of your development effort. And we are focused on making sure that styles work perfectly on all scenarios. There's still some hiccups on 4K monitors, but that is one of the areas we are focused on fixing. For example, we now have support for having images in your application that have multiple DPIs, so you can have high-quality crisp image even on a 4K monitor. There aren't many other Windows UI libraries that offer this capability. In most other windows UI libraries, you're on your own in terms of supporting a high DPI monitor. There's no ready-to-use components. So it's important to start thinking about 4K monitors from the beginning, start thinking about styles, and start thinking about UI. "Okay, I shouldn't use a check box, I should use a modern component replacing it via a toggle because that's the modern look and feel and the modern style." The good news is that all of these things are parts of VCL, so you don't really need to do much extra effort rather than rethink your UI a bit, learn about these new components that we provide, and embrace them.

Atanas: Very cool. Well, thank you, Marco. This is much appreciated. We need to do a lot more to communicate what VCL is all about. There are so many wonderful VCL case studies out there. However, our customers are busy, they don't always share those, so the more we explain, the more our customers will be confident in building new powerful apps incorporating these features.

Marco: Sure. I want to say that Delphi and VCL are the only true visual development options dedicated to Windows today. And that commitment has been true for many years. You can take a 24 years old Delphi application, rebuild it and within a relatively limited effort make it a first class Windows 10 citizen. The other options, like Visual Basic (and maybe Visual FoxPro) have come and are gone. Your investment in VCL is still here today, and it's going to be there in the future.

Categories: News, Blogs, and Tips

InterBase 2020 Released

Marco Cantu - Fri, 11/15/2019 - 07:25

I just wrote a blog post on Embarcadero community site to announce the release of InterBase 2020:

https://community.idera.com/developer-tools/b/blog/posts/interbase-2020-released-by-embarcadero

Main feature is the addition of tablespaces, which allow you to customize the mapping of tables and indexes in different files, possibly on different file systems. There is also support for macOS 64 and Android 64 as part of the embedded versions (IBLite and IBToGo). InterBase is a really unique and very poweful database engine, and one worth considering for mobile, desktop, and servers alike.

For more info, see the InterBase product page at: https://www.embarcadero.com/products/interbase

Categories: News, Blogs, and Tips

InterBase Change Views Patent Granted

Marco Cantu - Wed, 10/30/2019 - 02:42

I’m pleased to announce that Embarcadero has been granted a patent for "Tracking change data in a database" that matches the architectural and implementation work done to implement Change Views in InterBase. The patent request was originally filed in 2014, in advance of the feature’s general availability in 2015.

More information about the patent is available on Google’s Patents site at https://patents.google.com/patent/US10430403B2/

The Change Views feature was initially released in InterBase XE7 and continues to be a differentiating factor, and a feature that offers tremendous power in today’s distributed world, given remote clients like phones can easily access updated data (rather than refreshing an entire table) with greatly reduced bandwidth. This is done without writing significant custom application code or additional triggers and database instrumentation. You get the support for changes out of the box as part of the core database features –  offering easier and smoother operations and great performance. This is a unique implementation and offers InterBase a great advantage in many application scenarios focused on low-bandwidth remote data access.

For more information about Change Views, please refer to this blog post by Stephen Ball, introducing the technology. For general information about InterBase refer to the product page. Notice that a new version, InterBase 2020, is currently in beta and will soon be released by Embarcadero.

We continue to develop a portfolio of patents pertaining to Embarcadero Technology and pride ourselves on delivering unique capabilities to our users. 

 

Categories: News, Blogs, and Tips

CData Enterprise Connectors in Delphi Enterprise and Architect

Marco Cantu - Fri, 10/25/2019 - 07:18

Embarcadero has made available the Enterprise Connectors version of CData FireDAC add-on package to any customer buying Delphi or RAD Studio Enterprise or Architect Editions, but also to all customers already on update subscription with one of these versions.

As you can read at https://community.idera.com/developer-tools/b/blog/posts/enterprise-connectors-now-part-of-rad-studio-enterprise-architect-edition the components allow you to integrate 70+ application services, like QuickBooks Desktop, MailChimp, Salesforce, YouTube, SugarCRM, Jira, SurveyMonkey, Amazon DynamoDB, Couchbase, PayPal, eBay, Google Sheets, Facebook, Twitter, Slack, and Dropbox.

The offer is for a free one year subscription and you can claim claim your license key as explained in the link above. PS: notice that the keys still not available for RAD Studio network licenses.

 

Categories: News, Blogs, and Tips

New Tip: TBooleanHelper.ToString and TUseBoolStrs enumeration

Marco Cantu - Mon, 10/07/2019 - 08:07

Among the native type record helpers that were introduced in the Delphi RTL a few years back, there is one for the Boolean data type. It has a few methods you can apply to a Boolean variable, including ToString. This is the class helper definition:

If you call ToString on a Boolean variable you get 0 or -1 depending on the value. In other words, True.ToString produces -1.

The ToString method has also a second parameter, UseBoolStrs, to let the method return a string with the text False or True.  However, if you call True.ToString(True) you still get -1. What's up? As you can see in the definition above, there are both a regular instance method and a class method called ToString that can be called with one Boolean parameter. The compiler picks the one without default parameter as best match. 

So the question is, how can I get the desired string output? Simply by using the TUseBoolStrs enumeration. In fact, originally the signature of the methods was using a Boolean as parameter, that is the values False or True. More recently, this was changed to use a TUseBoolStrs enumerator, with identical values False or True. In this way, the existing code compiles. The advantage of this trick you can specify the full value of the parameter, using the type as prefix and write:

True.ToString(TUseBoolStrs.True)

This returns the string True, which is what we wanted in the first place. It it not an obvious solution, but it allows keeping the existing code compatible while addressing a design limitation (the two methods with the same name) that was already there. The only problem is that few Delphi developers realize this -- I was ignoring the solution until recently -- and this is why I just wrote this blog post!

Categories: News, Blogs, and Tips

EKON 23 in October and UK RoadShow in November

Marco Cantu - Mon, 09/30/2019 - 09:34

I have two conference trips planned for the fall, after the event I attended in Germany at Foren-Tage last week. Here is some more information.

EKON 23, Dusseldorf

As one of the longest running conferences focused on Delphi, EKON is at its 23rd year. It is always packed with solid information and very goods speakers from around the world. Beside the many Delphi experts from Europe, in fact, this is one of the few conferences in Europe hosting US speakers, which this year include Cary Jensens and Ray Konopka. Tagged as "the Conference for Delphi & More", it takes place on October 28th - 30th, 2019 in Dusseldorf, Germany.

I'll be giving a keynote and sessions Windows 10 VCL development and on multi-device development for 64-bit macOS and 64-bit Android. I'm really looking forward to get there, meet other speakers, and chat with attendees about anything Delphi related and even beyond the product.

Detailed information at https://entwickler-konferenz.de/program-en/

Embarcadero UK Roadshow

About 2 weeks later, I'll be in Manchester on November 13th and London on November 14th, presenting a half day session on Windows development, migration for older code bases, 10.3.2 and roadmap, mobile applications. The events are organized by our partner Grey Matter and will be a good opportunity to touch base with our UK customers.

Sign up at https://www.greymatter.com/corporate/embarcadero-uk-roadshow

See You There!

Hope to see you at one of these events in you live in those areas or if you can reach them. All of the events around Delphi also often great opportunities for networking, sharing development ideas, and also jobs offers and requests. The board of offers for Delphi positions at Foren-Tage was quite impressive!

Categories: News, Blogs, and Tips

Joint Windows 10 Webinar with Microsoft and Embarcadero

Marco Cantu - Mon, 09/16/2019 - 07:20

Embarcadero has been focusing a recent series of webinar on Windows 10 and the RAD Studio features (mainly in VCL) specifically focused on the latest version of Windows. This week we are going to have a special event, presented by Microsoft and Embarcadero, and offering a overview of Microsoft plans for the platform and how Embarcadero already supports them or is planning to.

This is the official description: "Join Microsoft’s Matteo Pagani, Windows AppConsult Engineer, and Embarcadero’s Product Manager, Marco Cantu, with host Jim McKeeth, Embarcadero’s Developer Advocate for this special live webinar. Learn about the vision and direction of Microsoft with Windows 10 and how Embarcadero makes it easy for you to take your applications there with RAD Studio, Delphi and C++Builder."

This is next Thursday, September 19, at 8AM US Central time, 3PM for those like me in Europe. Sign up at:

https://embt.co/MoveYourWindowsApps

Categories: News, Blogs, and Tips

A Tale of 3 APIs: VCL integration with WinAPI, COM & ShellAPI, WinRT

Marco Cantu - Mon, 09/09/2019 - 02:48

In this blog post I want to offer some highlights from the session, but I won’t cover all of the details of the 40+ minutes technical discussion of the webinar.

Windows APIs Timeline

Let me start by covering the timeline of the various APIs added to the operating system over the years, by sharing the introductory slide I created:

Beside the timeline itself, it is important to notice that all of these three layers (the traditional API, COM, WinRT) are written in C/C++ and are natively compiled libraries. This means that a native compiled language like Delphi can bind directly to these APIs, with no marshaling needed. All three mechanisms use memory directly and manually (although with notable differences) and none uses .NET or garbage collection.

Finally, I don’t want to get into the discussion of trends, Microsoft dropping or not UWP, and so on -- I prefer keeping this blog post focused on technical elements of Delphi APIs support.

The Traditional Windows API

Calling Windows APIs is quite simple for functions Delphi already provides a translated header, but there are multiple options. Suppose you want to call MessageBox. This is declared in the Winapi.Windows unit as:

function MessageBox(hWnd: HWND; lpText, lpCaption: LPCWSTR; uType: UINT): Integer; stdcall;

And it is defined as an external function from a system DLL:

function MessageBox; external user32 name 'MessageBoxW';

where user32 is defined as:

const user32 = 'user32.dll';

You can call it directly just as you’d call a regular function:

procedure TFormCallAPI.btnStandardClick(Sender: TObject); begin MessageBox (0, 'Some text here', 'Caption', MB_OK); end;

This creates an entry in your application import table, that will need to match an export table entry in the DLL when the application starts and the library is loaded. In other words, linking happens at initial execution time. As an alternative (which makes more sense for a DLL which might be missing on the end user computer) you can load the library and bind to the function at the time you want to execute it.

First you need to have a specific procedural type:

type TMessageBoxCall = function (hWnd: HWND; lpText, lpCaption: PWideChar; uType: UINT): Integer; stdcall;

At this point, you can use the following code:

There is also an in-between options called delayed loading. In this case (sed for new functions added to an existing library, something Microsoft does for core system libraries over time) you need to use a specific delayed keyword after the declaration. This is something we add for more recent APIs, for example:

function WindowFromPhysicalPoint; external user32 name 'WindowFromPhysicalPoint' delayed;

In your code, you write the standard call, with no change needed, although you might want to make the call only if you are on a recent enough version of Windows:

if CheckWin32Version (6, 0) then hwnd1 := WindowFromPhysicalPoint (aPoint);

The complete code of this demo is available at https://github.com/marcocantu/DelphiSessions/tree/master/Win10Session/CallWinApi

There is another area I covered in the webinar in terms of core APIs, and that is the ability to handle Windows messages by using the matching method modifier, as in:

type TJumpListForm = class(TForm) public procedure DropFiles(var Msg: TWmDropFiles); message wm_DropFiles; COM and Shell Interfaces

The integration with COM is also quite deep but fairly simple in Delphi. It has long been considered the best COM integration available -- and probably still is even if COM is not so popular any more, it is still the foundation of the integration with the Windows shell and desktop. 

If you open the Winapi.ShellObj unit you can find a large number of the declarations of COM interfaces for the Windows shell. Here is an image with a short section -- the unit interface section is 14,000 lines! 

In the demo I covered in the webinar I used a component (TJumpList) which wraps some shell API rather than going deep level and doing it manually. The full demo is at https://github.com/marcocantu/DelphiSessions/tree/master/Win10Session/JumpListFilesDemo

COM has it own logic in terms of interfaces, IID (Interface IDs), the use of the registry and more. However COM interfaces maps to interfaces in the Delphi language and integration is smooth. The complexity comes more from proper lifetime management and objects creation, but this goes beyond the scope of this blog port.

Interfacing with WinRT

WinRT is a different but still native library, that has a different type system and memory management model compared to COM, but shared with it the binary interface (and VTable) model. Therefore, WinRT interfaces map naturally to Delphi interfaces.

This is how WinRT interface looks once remapped to a Delphi language declaration:

The system also defines a IToastNotificationFactory used to create an instance, and this is marked with a unique string -- which replaces the use of the registry and GUIDs -- namely 'Windows.UI.Notifications.ToastNotification'. Delphi also defines a helper “factory, in this case the class TToastNotification that is fairly simple to use, as in the code below:

This is the core of the code required to show a notification in Windows 10, although the TNotificationCenter component wraps it nicely in few lines of code. Both demos (the complete low-level WinRT API version and the easy to use component-based one) are available on GitHub respectively as https://github.com/marcocantu/DelphiSessions/tree/master/Win10Session/WinRTDirect and https://github.com/marcocantu/DelphiSessions/tree/master/Win10Session/Windows%2010%20Notifications.

Conclusion

There is again much more information in the webinar, and also additional demos covering how we are extending the core API support continuously in the VCL. For this blog post, let me end with the final summary slide of the webinar:

If not already there, the webinar replay will soon be available and get listed at https://community.idera.com/developer-tools/b/blog/posts/windows-10-modernize-webinar-series#replays.

Categories: News, Blogs, and Tips

My Favorite New Delphi 10.3 Rio Features

Tech Blog - from David Cornelius - Wed, 09/04/2019 - 23:18
Category: Programming

If you code a large share of your day, the IDE, or Integrated Development Environment, plays a key role in how productive you are. Getting around quickly and being very familiar with shortcut keys can save a lot of time. Several years ago, I bought Castalia, a popular Delphi IDE plugin that added several productivity enhancements. One of my favorite enhancements was stack-based bookmarks. You could hit F2, go navigate through your code or even bounce to a different file then by simply hitting Escape, you'd be right back where you left off and the temporary bookmark that had been left would be removed.

In 2014, Embarcadero purchased the product from TwoDesk, offered it for free to registered users of Delphi XE7 and then integrated parts of it into XE8. I was maintaining products in Delphi XE and XE2 and had let my Delphi subscription lapse so didn't pay much attention to it. Later, when I renewed, I found there were no more updates to Castalia and the stack-based feature I had loved didn't seem to exist. I was disheartened.

I forgot about it and started using manually created bookmarks more often when using Delphi 10 Seattle. The problem with them is they're only useful within the current source file and once you have several bookmarks in several different source files, it's easy to confuse yourself with which one goes where.

So when Delphi 10.3 came out and had a couple of new plugins available from it's GetIt Package Manager that provided this forgotten capability, I was elated. Reading about the Bookmarks and Navigator plugins, I found that stack-based bookmarks had been finally integrated into the Delphi IDE in 10.1 Berlin, but the hotkey, instead of being the simple function key used by Castalia was an obtuse, hard-to-remember combination of Ctrl+K & Ctrl+G. What? Why would they do that? Are they not creative enough to come up with something easier to remember than that?

Enter Parnassus. I had never heard of them before 10.3 Rio was released but evidently they had their "Bookmarks" plugin clear back in 2014.

But another, equally exciting plugin, also by Parnassus, is Navigator. This goes hand-in-hand with Bookmarks because it helps you jump quickly to places you might likely go temporarily, then quickly get back to work. For example, when I'm coding, I often realize I need to include a unit to support a method I need. So I have to go up to the implementation section, add a unit under the uses section, then go back to my code to continue. With the Navigator plugin, I can hit Ctrl+G (for Go), down-arrow two times to the Implementation-Uses section and hit Enter. That creates a stack-based bookmark where I am, jumps me up to the implementation section of my Delphi unit, I type in the name of the unit I need, possibly navigate inside and check the syntax, then simply hit Escape and I'm right back to where I can continue coding. Sweet!

Admittedly, this isn't really a built-in feature of Delphi, it's a third-party product they acquired (just like Castalia a few years prior) and are offering free. But at least now I know about it and once again have the convenience and productivity boost of fast navigation and stack-based bookmarks.

I just hope Embarcadero does not change the Navigator's hot key to some weird Ctrl+key combination that is hard to remember.

Categories: News, Blogs, and Tips

Why Should You Move to Windows 10?

Marco Cantu - Tue, 08/27/2019 - 01:11

While RAD Studio offers a great multi-device mobile and desktop development experience, Embarcadero is focused on keeping its development tools at the top spot for Windows clients development, with the best Windows client UI library, offering deep API integration. There are many technical areas VCL and FireMonkey are offering top features, and for example VCL focus on High-DPI support is significantly more powerful than what Microsoft offers at the native platform level with C++ MFC or C# WinForms.

But that's not the topic I really want to delve into in this introductory blog post. The RAD Studio team has decided to give a significant focus on Windows 10 support and Windows 10 migration (with a series of webinars and blog post over the coming 3 weeks) based on some fairly important business drivers for everyone building Windows applications.

Windows 7 EOL

First and foremost, Microsoft has announced long time ago the EOL (End of Life, or more precisely, end of support) date for Windows 7, which is less than 5 months away, as their page https://www.microsoft.com/en-us/microsoft-365/windows/end-of-windows-7-support states quite clearly:

"After January 14, 2020, Microsoft will no longer provide security updates or support for PCs running Windows 7. Now is the time to upgrade to Windows 10."

They leave no doubt about the consequences (although large companies will most likely receive exceptions):

Other Reasons to Move to Windows 10

Now this is a fairly relevant reason to get in touch with any of your customers still on Windows 7 and offer them help in moving to Windows 10. While most of your applications build with RAD Studio will run seamlessly -- we have no special runtime requirements or dependencies -- it is a great occasion for you to also offer your customers new versions of your applications with an improved user interface (UI) and user experience (UX), better High-DPI monitors support, full integration of platforms features like notifications, and general app modernization. You can achieve some of these features by upgrading to the latest RAD Studio and putting a relatively limited effort in updating your code, adding some newer components, adopting styles, and so forth.

There is also another feature that is relevant in particular if you are selling or distributing applications to end users, and that is the ability to leverage the Microsoft Store as distribution channel for your Windows applications, also easy to achieve thanks to the support for Windows Desktop bridge and APPX format available in the RAD Studio IDE.

Windows 10 Webinar Series

If these are all great reasons to focus on Windows 10, how can you learn more. First, join our webinar series. Sarina DuPont starts today (this evening European time) with a session on "Windows 10 and New Key UX Principles (for RAD Studio Developers)".

Jim McKeeth has published the complete list with all of the signup links, so I won't repeat it, just head to https://community.idera.com/developer-tools/b/blog/posts/windows-10-modernize-webinar-series for more information. There are 10 Windows 10 focused webinars, given by us and also by many MVPs, covering the UI, the APIs, comparing to alternative solutions, and discussing migration of third party components.

I'll be giving one of this webinars, "A tale of 3 APIs: VCL integration with WinAPI, COM & ShellAPI, WinRT" next Wednesday September 4th at 11 am Central time, which is 6 pm European time. I hope you find these webinars and the coming blogs posts useful from the technical point of view, and if you are not using a recent version of RAD Studio check out the latest using a Trial Version: https://www.embarcadero.com/products/rad-studio/start-for-free

Categories: News, Blogs, and Tips

IDE Fix Pack 6.4.4 Hotfix for Delphi 10.3.2

Andy’s Blog and Tools - Wed, 07/31/2019 - 11:26

There was a bug in IDE Fix Pack 6.4.3 for Delphi 10.3.2 that caused the Win32 compiler to crash. The CodeGenMod.Win32.VirtFinalSealed patch didn’t work correctly. Even if the actual patch code doesn’t run without the “-x-fvs=1” compiler command line option extension specified, the hooking code failed to inject the correct code for the compiler’s version. Only Delphi 10.3.2 was affected by this bug.

Download:
Name IDE Version File Size Downloads Added IDE Fix Pack 6.4.2 2009 (UP4)IDEFixPack2009Reg64.2.7z242.75 KB781 times2019-03-23 IDE Fix Pack 6.4.2 2010 (UP5)IDEFixPack2010Reg64.2.7z237.09 KB931 times2019-03-23 IDE Fix Pack 6.4.2 XE (UP1)IDEFixPackXEReg64.2.7z221.38 KB438 times2019-03-23 IDE Fix Pack 6.4.2 XE2 (UP4+HF1)IDEFixPackXE2Reg64.2.7z316.78 KB514 times2019-03-23 IDE Fix Pack 6.4.2 XE3 (UP2)IDEFixPackXE3Reg64.2.7z257.4 KB387 times2019-03-23 IDE Fix Pack 6.4.2 XE4 (UP1)IDEFixPackXE4Reg64.2.7z260.1 KB264 times2019-03-23 IDE Fix Pack 6.4.2 XE5 (UP2)IDEFixPackXE5Reg64.2.7z257.7 KB350 times2019-03-23 IDE Fix Pack 6.4.2 XE6 (UP1)IDEFixPackXE6Reg64.2.7z423 KB303 times2019-03-23 IDE Fix Pack 6.4.2 XE7 (UP1)IDEFixPackXE7Reg64.2.7z429.48 KB457 times2019-03-23 IDE Fix Pack 6.4.2 XE8 (UP1)IDEFixPackXE8Reg64.2.7z431.7 KB371 times2019-03-23 IDE Fix Pack 6.4.2 10 Seattle (RTM/UP1)IDEFixPackD10Reg64.2.7z428.33 KB750 times2019-03-23 IDE Fix Pack 6.4.2 10.1 BerlinIDEFixPackD101Reg64.2.7z430.65 KB879 times2019-03-23 IDE Fix Pack 6.4.2 10.2 (RTM/UP1/2/3)IDEFixPackD102Reg64.2.7z426.27 KB1847 times2019-03-23 IDE Fix Pack 6.4.4 10.3 (RTM/UP1/2)IDEFixPackD103Reg64.4.7z444.98 KB623 times2019-08-01

Download (fastdcc for the command line compiler):
Name IDE Version File Size Downloads Added fastdcc 6.4.2 2009 (UP4)fastdcc2009v64.2.7z112.87 KB244 times2019-03-23 fastdcc 6.4.2 2010 (UP5)fastdcc2010v64.2.7z120.38 KB256 times2019-03-23 fastdcc 6.4.2 XE (UP1)fastdccXEv64.2.7z121.36 KB205 times2019-03-23 fastdcc 6.4.2 XE2 (UP4+HF1)fastdccXE2v64.2.7z166.48 KB205 times2019-03-23 fastdcc 6.4.2 XE3 (UP2)fastdccXE3v64.2.7z150.88 KB191 times2019-03-23 fastdcc 6.4.2 XE4 (UP1)fastdccXE4v64.2.7z153.55 KB159 times2019-03-23 fastdcc 6.4.2 XE5 (UP2)fastdccXE5v64.2.7z151.87 KB219 times2019-03-23 fastdcc 6.4.2 XE6 (UP1)fastdccXE6v64.2.7z198.67 KB182 times2019-03-23 fastdcc 6.4.2 XE7 (UP1)fastdccXE7v64.2.7z219.84 KB197 times2019-03-23 fastdcc 6.4.2 XE8 (UP1)fastdccXE8v64.2.7z224.67 KB192 times2019-03-23 fastdcc 6.4.2 10 Seattle (RTM/UP1)fastdccD10v64.2.7z219.65 KB283 times2019-03-23 fastdcc 6.4.2 10.1 BerlinfastdccD101v64.2.7z223.52 KB320 times2019-03-23 fastdcc 6.4.2 10.2 (RTM/UP1/2/3)fastdccD102v64.2.7z219.06 KB518 times2019-03-23 fastdcc 6.4.4 10.3 (RTM/UP1/2)fastdccD103v64.4.7z228.61 KB160 times2019-07-31

Changelog

  • Fixed: CodeGenMod.Win32.VirtFinalSealed was broken for Delphi 10.3.2
  • Removed: IDE Insight Listbox drop shadow patch isn’t necessary for Delphi 10.3.2 anymore
Categories: News, Blogs, and Tips

IDE Fix Pack 6.4.3 for Delphi 10.3.2

Andy’s Blog and Tools - Wed, 07/24/2019 - 11:30

With the newest Delphi 10.3.2 (Rio Update 2) the IDE Fix Pack failed with two compiler extension patches. The updated version 6.4.3 adds support for the Delphi 10.3.2 update.

Only Delphi 10.3.2 requires this update. Older Delphi versions are unchanged and stay at IDE Fix Pack version 6.4.2.

Download:
Name IDE Version File Size Downloads Added IDE Fix Pack 6.4.2 2009 (UP4)IDEFixPack2009Reg64.2.7z242.75 KB781 times2019-03-23 IDE Fix Pack 6.4.2 2010 (UP5)IDEFixPack2010Reg64.2.7z237.09 KB931 times2019-03-23 IDE Fix Pack 6.4.2 XE (UP1)IDEFixPackXEReg64.2.7z221.38 KB438 times2019-03-23 IDE Fix Pack 6.4.2 XE2 (UP4+HF1)IDEFixPackXE2Reg64.2.7z316.78 KB514 times2019-03-23 IDE Fix Pack 6.4.2 XE3 (UP2)IDEFixPackXE3Reg64.2.7z257.4 KB387 times2019-03-23 IDE Fix Pack 6.4.2 XE4 (UP1)IDEFixPackXE4Reg64.2.7z260.1 KB264 times2019-03-23 IDE Fix Pack 6.4.2 XE5 (UP2)IDEFixPackXE5Reg64.2.7z257.7 KB350 times2019-03-23 IDE Fix Pack 6.4.2 XE6 (UP1)IDEFixPackXE6Reg64.2.7z423 KB303 times2019-03-23 IDE Fix Pack 6.4.2 XE7 (UP1)IDEFixPackXE7Reg64.2.7z429.48 KB457 times2019-03-23 IDE Fix Pack 6.4.2 XE8 (UP1)IDEFixPackXE8Reg64.2.7z431.7 KB371 times2019-03-23 IDE Fix Pack 6.4.2 10 Seattle (RTM/UP1)IDEFixPackD10Reg64.2.7z428.33 KB750 times2019-03-23 IDE Fix Pack 6.4.2 10.1 BerlinIDEFixPackD101Reg64.2.7z430.65 KB879 times2019-03-23 IDE Fix Pack 6.4.2 10.2 (RTM/UP1/2/3)IDEFixPackD102Reg64.2.7z426.27 KB1847 times2019-03-23 IDE Fix Pack 6.4.4 10.3 (RTM/UP1/2)IDEFixPackD103Reg64.4.7z444.98 KB623 times2019-08-01

Download (fastdcc for the command line compiler):
Name IDE Version File Size Downloads Added fastdcc 6.4.2 2009 (UP4)fastdcc2009v64.2.7z112.87 KB244 times2019-03-23 fastdcc 6.4.2 2010 (UP5)fastdcc2010v64.2.7z120.38 KB256 times2019-03-23 fastdcc 6.4.2 XE (UP1)fastdccXEv64.2.7z121.36 KB205 times2019-03-23 fastdcc 6.4.2 XE2 (UP4+HF1)fastdccXE2v64.2.7z166.48 KB205 times2019-03-23 fastdcc 6.4.2 XE3 (UP2)fastdccXE3v64.2.7z150.88 KB191 times2019-03-23 fastdcc 6.4.2 XE4 (UP1)fastdccXE4v64.2.7z153.55 KB159 times2019-03-23 fastdcc 6.4.2 XE5 (UP2)fastdccXE5v64.2.7z151.87 KB219 times2019-03-23 fastdcc 6.4.2 XE6 (UP1)fastdccXE6v64.2.7z198.67 KB182 times2019-03-23 fastdcc 6.4.2 XE7 (UP1)fastdccXE7v64.2.7z219.84 KB197 times2019-03-23 fastdcc 6.4.2 XE8 (UP1)fastdccXE8v64.2.7z224.67 KB192 times2019-03-23 fastdcc 6.4.2 10 Seattle (RTM/UP1)fastdccD10v64.2.7z219.65 KB283 times2019-03-23 fastdcc 6.4.2 10.1 BerlinfastdccD101v64.2.7z223.52 KB320 times2019-03-23 fastdcc 6.4.2 10.2 (RTM/UP1/2/3)fastdccD102v64.2.7z219.06 KB518 times2019-03-23 fastdcc 6.4.4 10.3 (RTM/UP1/2)fastdccD103v64.4.7z228.61 KB160 times2019-07-31

Changelog

  • Added: Delphi 10.3.2 (Rio Update 2) support
Categories: News, Blogs, and Tips

IDE Fix Pack moved to a new server

Andy’s Blog and Tools - Sat, 06/29/2019 - 03:53

After 18 years of using a sub-domain on a very old server on a domain that wasn’t owned by me, my blog and therefore IDEFixPack got a new home.

My blog is now accessible via https://www.idefixpack.de . The old sub-domain has a “Moved Permanently” redirection to the new domain. Some time in the future the old sub-domain will be deleted.

Categories: News, Blogs, and Tips

Random Thoughts on the Passing Scene #162

Nick Hodges - Mon, 06/14/2010 - 14:07
Categories: News, Blogs, and Tips