Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works
Anything · Lazarus or Delphi
Random projectRandom project

TapDExperts

Delphi IDE experts in one design-time package: Offline Call Stack, File Header and Bit Visualizer. Packages for Delphi 12 and 13.

View on GitHub

Member rating

No ratings yet.

Sign in to rate this project.

README

TapD Experts

One design-time package holding three Delphi IDE experts:

Expert What it does
Offline Call Stack Saves a call stack to JSON while debugging, and reloads it later in a dockable window for navigation.
File Header Inserts a per-file-type header at the top of the current unit on Ctrl+Shift+H.
Bit Visualizer Shows Byte values in the debugger as decimal, hex and binary at once.

All three live in a single BPL, with one splash-screen and About-box entry between them. Each keeps its own options page and its own registry settings, so they can be configured and used independently.

Layout

pascal
Packages/D12/          Delphi 12 (Athens, Studio 23.0) package
Packages/D13/          Delphi 13 (Studio 37.0) package
Source/Common/         Splash and About box registration, shared images
Source/CallStackSave/  Offline Call Stack expert
Source/FileHeader/     File Header expert
Source/BitVisualizer/  Bit Visualizer expert
Tests/                 Test projects for the IDE-independent units
Build.ps1              Command-line build

Both packages compile the same sources; only the compiler and the output directory differ.

Building

From the IDE, open Packages/D13/TapDExperts.dproj (or the D12 one), build, then right-click the project and choose Install.

From the command line:

powershell
.\Build.ps1                                # D12 and D13, Win32 and Win64, Debug
.\Build.ps1 -Version D13 -Platform Win32   # one target
.\Build.ps1 -Config Release -Tests         # release build, then run the tests

Output lands in Bin\<version>\<platform>\<config>\TapDExperts.bpl. The two resource files the package links (TapDExperts.dres for the logo, TapDExperts.res for version info) are build products rather than sources, and are regenerated on every run, so a fresh clone builds without opening the IDE.

Build.ps1 calls dcc32/dcc64 directly rather than going through MSBuild. On a machine with a long IDE library path, msbuild TapDExperts.dproj fails with MSB6003: the filename or extension is too long — CodeGear.Delphi.Targets repeats the whole library path across several compiler switches and overruns the 32,000 character limit on a process command line. That affects any Delphi project on such a machine, not just this one; building inside the IDE is unaffected, because the IDE does not spawn the compiler as a process.

Which platform to install

Design-time packages have to match the IDE process, not your target platform:

  • 32-bit IDE (bin\bds.exe) — install the Win32 BPL.
  • 64-bit IDE (bin64\bds.exe) — install the Win64 BPL.

Install through Component ▸ Install Packages… ▸ Add…, or right-click the project in the Project Manager and choose Install.

Offline Call Stack

Configured under Tools ▸ Options ▸ Offline Call Stack: where the JSON is written, the base file name, whether unreachable frames are dropped, the two keyboard shortcuts, and the watch expressions evaluated against every frame. The saved stack is reopened in a dockable window through the IDE's View menu.

File Header

Press Ctrl+Shift+H in the editor to insert the header configured for the current file's extension; nothing is inserted if that extension has no header. Headers are configured under Tools ▸ Options ▸ File Header and stored under HKEY_CURRENT_USER\Software\TapperMedia\FileHeader, so they are shared by every installed Delphi version.

File types are stored canonically as .ext, but *.pas, .pas and pas are all accepted and treated as the same entry. Matching is case-insensitive.

Header text may contain these tokens, each expanded when the header is inserted. A token whose value is unavailable — a project keyword with no project group open, say — expands to an empty string.

Keyword Replaced with
$CURRENT_YEAR$ Current year, four digits
$CURRENT_MONTH$ Current month, two digits
$CURRENT_DAY$ Current day of month, two digits
$CURRENT_TIME$ Current time, in the local short time format
$FILENAME$ Full path of the file being edited
$PROJECT$ Full path of the active project
$PROJECTGROUP$ Full path of the current project group

Bit Visualizer

While debugging, a Byte holding 65 displays as 65, $41, (01000001) instead of 65, in the Watch list, Local Variables, Evaluate/Modify and hover tooltips. When the debugger's text is not a number in Byte range — an out-of-scope variable, an error message — the original text is left alone.

It appears with the IDE's other debug visualizers under Tools ▸ Options, where it can be switched off without uninstalling the package.

Tests

Build.ps1 -Tests builds and runs both test projects and fails the build if either does:

  • Tests/FileHeader — DUnitX console runner covering file-type normalisation, the registry round trip, and keyword substitution. It works against Software\TapperMedia\FileHeaderUnitTests and deletes that key afterwards, so a real installation's headers are never read or modified.
  • Tests/BitVisualizer — console program covering the formatting helpers.

tapKeywords, tapFileHeaderRepo and BitFormat deliberately carry no ToolsAPI dependency so they can be tested outside the IDE.

License

MIT — see LICENSE.