Delphi development · Delphi 1 to 13 · VCL and FireMonkey

Delphi development and migration of existing applications

We keep Delphi applications running, extend them and bring them to Delphi 12 or 13: from Delphi 7 or 2007, through the switch to Unicode and 64-bit, to replacing the BDE. We have been working with Delphi since 1996, including when the original developer is no longer around.

Services

What we do for your Delphi application

Whether it is a single bug fix or a move to the current version, we start where your application stands today.

01

Maintenance and bug fixing

Finding and fixing bugs, analyzing crashes, adapting the application to new Windows versions. Also in someone else's code and without the original developer.

  • Bug analysis
  • Legacy code
  • Windows 11
02

New features

Extending existing applications with modules, reports, interfaces or database functions that fit the existing architecture.

  • Extensions
  • Interfaces / APIs
  • Reports
03

Migration to Delphi 12 or 13

From Delphi 5, 7, 2007 or an XE version to the current release: getting the project to compile in the new version, replacing components, working through warnings and verifying the behavior.

  • Delphi 7 → 13
  • Version upgrade
  • Components
04

Unicode and 64-bit

Strings have been Unicode since Delphi 2009, and 64-bit has been available since Delphi XE2. We find the places where this changes the behavior and convert them in a targeted way.

  • Unicode
  • Win64
  • Pointers and buffers
05

Modernizing database access

Replacing the BDE and Paradox tables, moving data access to FireDAC and migrating the data to a current database server such as MS SQL Server, Oracle or MySQL.

  • BDE → FireDAC
  • Data migration
  • MS SQL Server
06

Support for your Delphi team

Project-based work in your team, remotely from Germany, when you lack Delphi experience for maintenance, a migration or a new module.

  • Remote
  • Project-based
  • Within your team

From your version to Delphi 13

What lies between your version and today

The effort depends mainly on which version you are coming from. A first orientation:

Starting versionWhat typically needs to be done
Delphi 116-bit programs no longer start on 64-bit Windows. The business logic can usually be kept; the user interface and system calls are rebuilt.
Delphi 2 to 2007The switch to Unicode is the biggest step. In addition, there are components without a current version and often the BDE, which has not shipped with Delphi since XE7.
Delphi 2009 to XEUnicode is done. What remains are current components and, if desired, the move to 64-bit.
Delphi XE2 to 10.4Usually manageable: current components, clean display on high-resolution screens and new compiler warnings.
Delphi 11 and 12Usually a small step: recompile, update components, test.

From practice

Two places where migrations fail

Both examples compile in the new version and still behave differently than before. These are exactly the places we look for in the source code before the migration.

Strings treated as bytes

In Delphi 7 a character was one byte. Since Delphi 2009 a character takes two bytes (UTF-16). The old code still compiles, but it copies only the first half of the string, with zero bytes in between. Files, interfaces, checksums and encryption are affected.

Delphi 7 → Delphi 13
// before: one character = one byte
SetLength(Buffer, Length(S));
Move(S[1], Buffer[0], Length(S));

// after: state the encoding
Buffer := TEncoding.ANSI.GetBytes(S);
// or TEncoding.UTF8, depending on the other side

Pointers stored in integers

In 64-bit code a pointer is eight bytes, while an Integer stays at four. Storing an object in an Integer cuts off the upper half of the address. The error only shows at runtime, often as an access violation somewhere else entirely.

32-bit → 64-bit
// before: object kept in Tag
CustomerEdit.Tag := Integer(Customer);
Customer := TCustomer(CustomerEdit.Tag);

// after: NativeInt fits a pointer
CustomerEdit.Tag := NativeInt(Customer);
Customer := TCustomer(CustomerEdit.Tag);

Approach

Migrating step by step without putting operations at risk

Your application keeps running until the new version demonstrably does the same.

01

Source code review

Recording the version, components, database access and the places that are critical for Unicode and 64-bit. The result is an effort estimate with risks and order of work.

02

Getting it to compile

Compiling the project in the target version, replacing or updating components, working through errors and warnings.

03

Verifying the behavior

Comparing old and new versions with real data: calculations, reports, files and interfaces. As ISTQB Certified Testers we plan these tests systematically.

04

Rollout and support

Introduction on your schedule, with parallel operation if desired. Afterwards we take care of maintenance and further development.

Why NordZentrum

Working with Delphi since 1996

Every version from our own work

From Delphi 1 to Delphi 13, with VCL and FireMonkey. We know the quirks of the old versions because we have worked with them.

Someone else's code is no obstacle

Original developer no longer available? We work our way into grown code, document it and build on it reliably.

Tested, not just compiled

As ISTQB Certified Testers we check that the new version does the same as the old one before it goes live.

AI as a tool

With Claude Code we read and document large legacy code bases faster and find critical places more precisely. We review and take responsibility for every change ourselves.

All NordZentrum services →  ·  AI consulting and automation →

FAQ

Questions about Delphi development and migration

Should we rewrite our Delphi application or migrate it?

Step-by-step migration is usually cheaper and safer, because the business logic built up over the years is preserved and the application keeps running in the meantime. A rewrite is more likely to pay off if the requirements have changed fundamentally. After reviewing the source code, we can compare both options reliably.

How long does a migration from Delphi 7 to Delphi 13 take?

That depends mainly on the size of the code, the components used and how often strings are treated as bytes. After the review you receive an effort estimate with the individual steps.

What happens to third-party components?

Many widely used components are available in current versions. Where a vendor no longer exists or the source code is missing, we replace the component with a maintained alternative or with our own code.

Our application still uses the BDE. Is that a problem?

The BDE has not shipped with Delphi since XE7 and is no longer supported. We move data access to FireDAC and migrate the data, for example from Paradox tables, to a current database.

Does our application have to move to 64-bit?

Not necessarily: 32-bit applications also run on 64-bit Windows 11. The move pays off mainly if the application needs a lot of memory or has to load 64-bit libraries (DLLs) and database drivers.

Can our application also run on a Mac or a smartphone?

The VCL is limited to Windows. With FireMonkey, Delphi applications also run on macOS, iOS and Android. This means rebuilding the user interface; the business logic can usually be kept.

Do you also work within our team?

Yes, on a project basis and remotely, mostly for clients in Germany.

Contact

Tell us about your Delphi application

The Delphi version, the approximate size and what should change are enough to start with. The first assessment is free of obligation.

Raesfeld, Germany · remote
Delphi since 1996 Delphi 1 to 13 ISTQB Certified Tester Reply usually within 24 h