agentleFS
G1JoshiG1Joshi/Agent-Skills/skills/languages/delphi/SKILL.md

delphi

Skill15 starsChanged 42 days agoMITView on GitHub

Expert Delphi / Object Pascal assistance covering VCL, FireMonkey, RTL, and enterprise desktop software. Use when maintaining or modernizing Windows desktop and cross-platform native applications.

4 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

5 rules. 0 are common, 2 are distinctive, and 3 are very specific to this project.

  • 0

    Common

    Most of the 3 edited versions we read keep these.

  • 2

    Distinctive

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Use explicit try..finally destruction blocks:

    line 101
  2. Very specific:

    Always Wrap Object Allocations in try...finally: Guarantee that .Free executes to prevent memory leaks in non-ARC Windows runtimes.

    line 123
  3. Distinctive:

    Use FireDAC for All Database Operations: Standardize on FireDAC.

    line 124
  4. Very specific:

    Use Parameterized Queries: Always use ParamByName() to prevent SQL injection vulnerabilities.

    line 126
  5. Distinctive:

    Use global variables in units: Keep state encapsulated inside classes and records.

    line 131

“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Delphi / Object Pascal

Delphi (RAD Studio) and Free Pascal (Lazarus) keep Object Pascal alive. It is famous for Single EXE deployment and instant compilation.

When to Use

  • Rapid Application Development (RAD) for Windows Desktop: Building native Windows desktop applications with rich VCL graphical controls.
  • Legacy Enterprise Maintenance: Modernizing and maintaining established corporate desktop software suites.
  • Single-Binary Zero-Dependency Native Compilation: Producing fast, standalone native binaries that run without external runtime frameworks.
  • High-Performance Database Clients: Interfacing with enterprise SQL databases via native FireDAC data access components.

Quick Start

program HelloWorld;
{$APPTYPE CONSOLE}
uses
  System.SysUtils;

begin
  try
    Writeln('Hello from Delphi Object Pascal!');
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

Core Concepts

Object Pascal Strong Typing & Class Architecture

Clean, readable object-oriented architecture with explicit interfaces:

unit OrderProcessor;

interface

type
  IOrderService = interface
    ['{8F3D1E1C-3A62-47CF-A98B-7D12A9E32049}']
    function ProcessOrder(const OrderId: Integer; const Amount: Double): Boolean;
  end;

  TOrderService = class(TInterfacedObject, IOrderService)
  public
    function ProcessOrder(const OrderId: Integer; const Amount: Double): Boolean;
  end;

implementation

function TOrderService.ProcessOrder(const OrderId: Integer; const Amount: Double): Boolean;
begin
  // Business logic execution
  Result := Amount > 0.0;
end;

end.

Visual Component Library (VCL) & FireMonkey (FMX)

  • VCL: Native Windows-only components wrapping direct Win32/Win64 APIs.
  • FireMonkey (FMX): Cross-platform GPU-accelerated UI framework targeting Windows, macOS, iOS, and Android.

FireDAC Unified Database Connectivity

High-performance data access layer:

var
  Query: TFDQuery;
begin
  Query := TFDQuery.Create(nil);
  try
    Query.Connection := FDConnection1;
    Query.SQL.Text := 'SELECT * FROM Customers WHERE Balance > :MinBalance';
    Query.ParamByName('MinBalance').AsCurrency := 1000.0;
    Query.Open;
    // Process records
  finally
    Query.Free;
  end;
end;

Common Patterns

Safe Memory Management with Try..Finally

Problem: Object memory leaks in non-ARC desktop platforms when exceptions occur.

Solution: Use explicit try..finally destruction blocks:

procedure ProcessCustomerList;
var
  List: TStringList;
begin
  List := TStringList.Create;
  try
    List.Add('Customer 1');
    List.Add('Customer 2');
    List.SaveToFile('customers.txt');
  finally
    List.Free;
  end;
end;

Best Practices

Do:

  • Always Wrap Object Allocations in try...finally: Guarantee that .Free executes to prevent memory leaks in non-ARC Windows runtimes.
  • Use FireDAC for All Database Operations: Standardize on FireDAC; deprecate legacy BDE and dbExpress components.
  • Target 64-Bit Windows (Win64): Ensure new applications compile for 64-bit to utilize modern memory spaces and system libraries.
  • Use Parameterized Queries: Always use ParamByName() to prevent SQL injection vulnerabilities.

Don't:

  • Ignore compiler hints and warnings: Treat Delphi compiler warnings with priority; they frequently identify uninitialized variables.
  • Use global variables in units: Keep state encapsulated inside classes and records.
  • Block the UI thread with long database queries: Execute heavy queries asynchronously using TTask.Run from the Parallel Programming Library.

Troubleshooting

ErrorCauseSolution
Access Violation at address ... (EAccessViolation)Attempting to access an uninstantiated or freed object pointer.Verify object was created with .Create before calling methods.
[dcc32 Fatal Error] F2084 Internal ErrorCompiler cache corruption or circular unit dependency.Clean build directory and resolve circular references in uses clauses.
Memory Leak Detected in ReportMemoryLeaksOnShutdownObject created without matching .Free call.Ensure every object creation is guarded with a try..finally Free; end; block.

References

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.