TapDExperts
Delphi IDE experts in one design-time package: Offline Call Stack, File Header and Bit Visualizer. Packages for Delphi 12 and 13.
- Active · last change 8-31-2026
- ★ 1 on GitHub
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
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 buildBoth 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:
.\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 testsOutput 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 againstSoftware\TapperMedia\FileHeaderUnitTestsand 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.

