Language reference

Delphi / Object Pascal

Object Pascal's most durable home, with a small and loyal audience still shipping products on it.

History & foundation

Origin

Delphi's roots go back to Borland's Turbo Pascal, first released in 1983, which added object-oriented extensions later named Object Pascal, designed by Anders Hejlsberg (who went on to design C# at Microsoft). Delphi 1 launched on February 14, 1995, at the Software Development Conference, turning Object Pascal into a full rapid application development environment for Windows: the Visual Component Library (VCL) for visual UI design, the Borland Database Engine for data access, and native compilation to a standalone executable with no separate runtime needed.

Design goals

Delphi's core bet was that a compiled, statically typed language could still deliver the drag-and-drop productivity that interpreted and scripting tools of the era were becoming known for. The VCL made that possible: a visual designer generated real Object Pascal code you could read and edit directly, rather than hiding it behind a black box, and the compiler produced a genuine native Windows executable with none of the deployment dependencies competing tools of the time carried.

Standards timeline

  1. 1983 · Turbo Pascal

    Borland's original Pascal compiler for MS-DOS, the direct ancestor of Object Pascal.

  2. 1995 · Delphi 1

    Launched February 14 for 16-bit Windows 3.1, with the VCL and Borland Database Engine.

  3. 1996 · Delphi 2

    Adds 32-bit Windows 95 support, long strings, and visual form inheritance.

  4. 1997 · Delphi 3

    Adds COM-based interfaces, Code Insight completion, WebBroker, and component packages.

  5. 2007 · RAD Studio

    Delphi and C++Builder begin shipping jointly as RAD Studio.

  6. 2011 · FireMonkey (FMX)

    Cross-platform UI framework introduced in Delphi XE2, alongside the existing Windows-only VCL.

  7. 2015 · Idera ownership

    Idera acquires Embarcadero Technologies, and has released Delphi since.

  8. 2025 · RAD Studio 13 Florence

    Released September 10, the current stable release.

#9 on TIOBE, 1.98%

Delphi/Object Pascal's position and share on the TIOBE programming language popularity index in January 2026, back in the top 10 after briefly slipping out in December.

TechRepublic: TIOBE January 2026

South African schools, since 2016

Delphi was named the language of choice for teaching programming as part of Information Technology coursework in South African schools starting in 2016.

Wikipedia: Delphi (software)

Delphi / Object Pascal history and figures compiled from public sources, cited above. Corrections welcome.

Exception classes & error codes

View all 75
Runtime Error 200: EDivByZeroDelphi (VCL) · Delphi (FireMonkey)

Condition

The program divided an integer value by zero.

Fix

Add an explicit check for a zero divisor before the division, or catch EDivByZero in a try-except block if the operation is expected to fail occasionally on untrusted input.

Pending source verification. Not yet checked against official documentation.
Runtime Error 201: ERangeErrorDelphi (VCL) · Delphi (FireMonkey)

Condition

A value was assigned that falls outside the declared range of its type, most often an array index or an ordinal type with a restricted range, and range checking ($R+) was enabled when the assignment happened.

Fix

Check the value against the type's declared bounds before the assignment. Range checking is a compile-time switch; if it is off in release builds, the same bad value will not raise this error there, it will simply corrupt memory instead, which is worse, so treat this as a bug to fix, not a check to disable.

Pending source verification. Not yet checked against official documentation.
Runtime Error 202: Stack overflow errorDelphi (VCL) · Delphi (FireMonkey)

Condition

The call stack exceeded its allocated size, almost always from unbounded or runaway recursion.

Fix

Check the recursive function involved for a base case that is not actually being reached, and confirm the recursion depth is bounded by something under the program's control, not by external input.

Pending source verification. Not yet checked against official documentation.
Runtime Error 203: Heap overflow, EOutOfMemoryDelphi (VCL) · Delphi (FireMonkey)

Condition

A memory allocation request could not be satisfied because the heap or the address space available to the process was exhausted.

Fix

Check for a leak, most commonly an object created and never freed inside a loop, before assuming the machine simply needs more memory. A genuine one-time large allocation failing is far less common in practice than a slow leak that eventually exhausts what is available.

Pending source verification. Not yet checked against official documentation.

Frequently asked

Is Delphi still used in 2026?+

Yes. Delphi (Object Pascal) sits around 9th place on the TIOBE index as of early 2026, and Idera/Embarcadero continues shipping current releases, including RAD Studio 13 in September 2025.

What is the most common Delphi error?+

EAccessViolation (runtime error 216) is the most reported Delphi crash, usually from a nil pointer dereference or, less obviously, reentrancy caused by calling Application.ProcessMessages inside an event handler.

Why do hackers write malware in Delphi?+

Delphi compiles to a genuine native executable with no separate runtime, the same property that made it attractive for legitimate software, which also makes some malware harder for detection tools to fingerprint.

When was Delphi first released, and who created it?+

Delphi 1 launched on February 14, 1995, at the Software Development Conference in San Francisco, with an estimated 3,000 to 5,000 developers attending the event. It grew out of Borland's Turbo Pascal, first released November 20, 1983, and its Object Pascal extensions were designed by Anders Hejlsberg, who later went on to design C# at Microsoft.

What's the difference between VCL and FireMonkey in Delphi?+

VCL (Visual Component Library) is Delphi's original, Windows-only UI framework, dating back to Delphi 1. FireMonkey (FMX) is the cross-platform alternative Embarcadero has shipped alongside it since Delphi XE2 in 2011; it targets Windows, macOS, iOS, and Android from one codebase and traces its roots to VGScene, a rendering engine originally built by KSDev in Russia before Embarcadero acquired and rebuilt it.

What well-known software has been built in Delphi?+

Total Commander, the long-running Windows file manager built by Christian Ghisler, has used Delphi since its 1990s debut as Windows Commander and still does for its 32-bit Windows build. Skype's original client interface, before later corporate rewrites, was also built in Delphi.

Is Delphi open source?+

No, Delphi and RAD Studio are commercial products sold by Embarcadero (owned by Idera). Developers who want an open-source Object Pascal toolchain instead typically use the Free Pascal Compiler (FPC) with the Lazarus IDE, a separate but closely related implementation of the same language.

Does Delphi have any connection to Python?+

Yes. Embarcadero maintains python4delphi and related projects like DelphiFMX4Python and DelphiVCL4Python as open GitHub repositories, letting Python code drive a native FireMonkey or VCL interface directly. FireMonkey itself gained an official Python integration in 2021.

From the community

Real questions from public forum threads, with credit to who asked and who answered. Our answer restates the fix and links to the matching reference page where one exists.

My application throws random access violations in a DBGrid with user-typed filters and fast lookups. What could cause something this intermittent?

Asked by stephenwales on Tek-Tips forum, 2005, still commonly linked

Calling Application.ProcessMessages inside an OnChanged event handler processes the pending message queue immediately, including further OnChanged events, so fast typing lets the same event fire again before the first call has finished. The two overlapping calls corrupt shared state and crash.

whosrdaddy

Our answer

Intermittent access violations that seem to depend on typing speed or timing are the classic signature of reentrancy, not memory corruption from a single bad pointer. If ProcessMessages appears anywhere inside an event handler that could plausibly fire again while the first call is still running, that is the first thing to remove, not the last.

Full reference page →

I get an intermittent range check error on a SendMessage call, about 2 out of 3 times. What would make it random like that?

Asked by bobbie100 on Tek-Tips forum, ongoing thread

The bitmap handle (hBmp) wasn't being created successfully on every attempt, and the code used it anyway without checking. Add a check that the handle is actually valid (not nil) before using it, wrap the resource operations in try-finally, and release every handle (ReleaseDC, DeleteObject) regardless of whether the operation succeeded.

BillDoorNZ

Our answer

Randomness like this almost always means a resource that fails to initialize some fraction of the time, not a logic bug that would fail consistently. Before assuming range checking itself is wrong, check whether every handle or object involved is actually validated before use, since an intermittent failure upstream is a classic way to get an intermittent-looking crash downstream.

Full reference page →

More on Delphi