This quick start shows how to scaffold a Skia-enabled OBD UI with the updated package wizards and non-visual components.
- Main Form Wizard now drops the touch header, subheader, status bar, and a circular gauge alongside non-visual components:
TOBDConnectionComponentpreconfigured for a serial adapter (COM1 @ 38400 baud).TOBDProtocolComponentbound to the connection with auto-binding enabled.TOBDHeaderComponentandTOBDSubheaderComponentwired to the visual header/subheader for caption and indicator updates.TOBDGaugeComponentbound to the gauge for automatic value application.
- Form Wizard mirrors the same visual and non-visual scaffold so secondary forms can participate in the same binding pattern.
- Data Module Wizard seeds shared connection and protocol components for reuse across forms.
- Create a new project with the ERDesigns OBD Mainform wizard to get the pre-wired controls.
- If you need additional screens, add forms with the ERDesigns OBD Form wizard; they arrive with the same bindings.
- Add an OBD data module through the ERDesigns OBD DataModule wizard to host shared connection/protocol components and point your forms to them.
- Update the generated
SerialPort(and other connection properties) on the connection component to match your adapter, then press Connect through your UI flow.
- Switch the
ConnectionTypeproperty on the generated connection components to Bluetooth, WiFi, or FTDI and fill in the matching properties. - Override header or subheader captions by assigning resolver events on the respective controller components.
- Swap the gauge value resolver if your protocol emits a different message shape; keep
AutoApplyValueenabled for UI-thread-safe updates.
- All generated controls stay within the Skia rendering path; no GDI or GDI+ primitives are emitted by the scaffolded forms.
- The non-visual components are design-time friendly and expose IntelliSense comments on their declarations for discoverability.
- Prefer the ready-made projects under examples/ when you want a runnable baseline for a minimal connect/read/clear workflow or for serial, Bluetooth, WiFi, FTDI, simple, or advanced dashboards.
- Async UDS client (
OBD.OEM.UdsClient.Async) — future-returning facade overIOBDUdsClientso UI threads can fire-and-await every diagnostic call without blocking. Cooperative cancellation viaIOBDCancellationToken. - Cross-platform DoIP (
OBD.Protocol.DoIP.Session.Cross) — TCP-side ISO 13400-2 §8 implementation onSystem.Net.Socket(Windows, macOS, Linux, iOS, Android), no Indy or Synapse dependency. - DoIP TLS (
OBD.Protocol.DoIP.Session.TLS) — ISO 13400-3 §7, TCP/3496, mutual TLS via Indy + OpenSSL. TLS 1.2 minimum. - Capture/replay transport —
TCaptureReplayTransportparses recorded.obdlogpairs for deterministic UDS testing. - Catalog Browser (
examples/catalogbrowser) — VCL app that walks every shipped OEM catalog (ECUs / DIDs / Routines / Coding Blocks / Adaptations / Actuator Tests / Live PIDs / DTC Extended Data). - Coverage harness (
tools/coverage/) —delphi-code-coverageagainst the DUnitX runner, emits HTML + Cobertura + LCOV. - 79 OEM catalogs / 247,279 entries / 5 vehicle classes (33 new motorcycles, agricultural, marine, powersports catalogs in v3.78).
See CHANGELOG.md for the full history.
Problem: Components don't appear in Tool Palette
Solution:
- Reinstall DesignTime.dpk package
- Verify library path includes the Delphi-OBD folder
- Restart Delphi IDE
Problem: "Skia4Delphi not found" error
Solution: Install Skia4Delphi from GetIt Package Manager
Problem: "Cannot find specified module" error when installing DesignTime package
Solution:
- Ensure Skia4Delphi is properly installed via GetIt Package Manager
- The packages output BPLs to
$(BDSCOMMONDIR)\Bplso the Skia DLL is on the IDE's search path - First install RunTime.dpk, then DesignTime.dpk
Problem: Blank or black components
Solution:
- Check that Skia4Delphi is properly installed
- Verify component
Visible := Trueand properAlignsettings - Do not set
DoubleBuffered := Trueon the parent form —TSkCustomControlalready buffers and form-level double buffering interferes with it (seedocs/COMPONENT_AUTHORING.md§10).
Problem: Jerky or stuttering animations
Solution:
- Reduce
FramesPerSecondproperty (try 30 instead of 60) - Check CPU usage - ensure no other processes consuming resources
- Verify
Animation.Durationis reasonable (500-1000ms recommended)
Problem: Cannot connect to OBD adapter
Solution:
- Verify correct COM port (check Device Manager)
- Ensure engine is running (required by most adapters)
- Try different baud rates: 38400, 115200, 9600
- Check adapter is powered and has a good connection
Problem: No data received after connection
Solution:
- Ensure
AutoDetect := Trueon protocol component - Check that vehicle supports OBD-II (1996+ for US vehicles)
- Verify adapter LED is blinking (indicates communication)
- Try manual protocol selection if auto-detect fails
Problem: High CPU usage
Solution:
- Reduce
FramesPerSecondto 30 - Disable animations on non-critical components
- Increase update intervals (reduce polling frequency)
Problem: Memory usage grows over time
Solution:
- Check for memory leaks using FastMM4
- Limit number of simultaneously visible components
Error: "Access violation at address..."
Solution: Make sure you're on a recent v3.x release; all PaintSkia paths are now guarded.
- Main Documentation: See README.md for comprehensive API reference
- Examples: Check examples/ folder for runnable samples
- Issues: Report bugs at GitHub Issues