Making a custom TPanel descendant behave well at design time is the easy case — most other base classes need extra work to get the same drag-drop, property-editing, and live-preview behavior in the IDE. This post follows up on my earlier designable-TPanel post and covers what changes when you’re building a designable component from TCustomControl,…
Making a custom TPanel descendant behave well at design time is the easy case — most other base classes need extra work to get the same drag-drop, property-editing, and live-preview behavior in the IDE. This post follows up on my earlier designable-TPanel post and covers what changes when you’re building a designable component from TCustomControl,…
My original processor benchmark post is old enough that the numbers in it no longer reflect current releases, and a couple of processors I dismissed back then have improved. This is a rerun of the same benchmark methodology against current versions, for anyone choosing an XSLT processor for a new project today. The problem Benchmark…
Delphi applications designed at 96 DPI look cramped, clipped, or oddly spaced on the high-DPI displays most users have today, and the VCL’s answer to this problem has changed across versions in ways that aren’t obvious from the documentation alone. This post expands on my earlier notes on large fonts, covering how DPI awareness actually…
My original processor benchmark post is old enough that the numbers in it no longer reflect current releases, and a couple of processors I dismissed back then have improved. This is a rerun of the same benchmark methodology against current versions, for anyone choosing an XSLT processor for a new project today. The problem Benchmark…
Delphi forms designed with a hardcoded font look wrong the moment they run on a machine with different DPI or a different default UI font, and the usual fixes people reach for only patch the symptom. This post digs deeper into the system-font problem than my earlier posts on the topic, covering where the font…
XSLT 2.0 is powerful enough to process even non-XML input. For example, I have created a transformation that converts JSON text to well structured XML output: JSON text: It works by employing XML Pipeline technique: and finally it performs XSD validation check. This approach is quite exotic and non-standard, because when people hear word “parsing” they think…
My original XML pipeline post is old enough that some of the tooling advice no longer matches what I’d actually recommend today. This is a refresh covering the same core pipeline shape — validation, transformation, output — but with the tools, libraries, and a few hard-won lessons updated for what I’m actually running on client…
Raw WinAPI calls in Delphi tend to spread handle management and error checking across the whole codebase, which makes them painful to maintain and easy to get wrong. This post expands on my earlier notes on dot-notation wrappers, showing how to wrap WinAPI handles in thin classes that keep the low-level calls in one place…
Most XSLT write-ups treat 3.0 as a wholesale replacement for 2.0, but in practice most existing 2.0 stylesheets don’t need touching, and only a handful of the new features are worth adopting deliberately. This post looks at what actually changed between the two versions from the angle of someone maintaining production XSLT, not from the…
Moving a Delphi 7 or Delphi 2007 codebase to a modern version (11/12 Alexandria) breaks in predictable places — string types, deprecated RTL calls, and component behavior changes. This post walks through the pitfalls I hit most often when migrating client codebases, and the fixes that actually hold up. The problem Every few years a…
This article describes the course of actions you should take The History Behind I’ve been developing under SQL 7 for a while. Sometimes transaction log grew too large. My usual fix for that problem was: I had been using this technique a lot of times under SQL 7, until sometime I have migrated to MSSQL…
There are some debates about declining use of XML and rising use of JSON. Some people love XML, some people love JSON. I love SAX: assuming SAX serializer/deserializers exist, anything can be treated as XML. For example, you can write XSLT stylesheets transforming JSON: JSON SAX deserializer was already created by me in my previous…
guarddog is still missing in Ubuntu… This article will outline required steps to install guarddog in Ubuntu Oneiric 11.10/Precise 12.04 and get it working. To get guarddog installed in Ubuntu Oneiric 11.10 you need the following packages: x64 x32 Note, these packages are you not required if you followed my previous article and have restored guarddog…
While official Embarcadero materials emphasize only FireMonkey technology in light of creating MacOSX applications, it is yet very possible to create Cocoa applications w/ native MacOSX look and feel without using FireMonkey at all: Embarcadero have performed all the necessary job of translating Objective-C Cocoa headers to Delphi; compiler and debugger environment is working fine for non-FireMonkey…
Using MSXML in Delphi is quite simple, except couple of caveats: Consider the following sample code: it kinda does the job, but if you put the following assertion (check line #05): the assertion will fail. The trick is that MSXML returns new instance of IXMLDOMNodeList on each call of Node.childNodes. This IXMLDOMNodeList is instantly released…
Delphi programming language has all the guts to compete with C# and Java. For example, you can quite easily implement C# yield return in Delphi: Example of yield return from C# reference: Same code in Delphi: System.Yield is a unit that I have created that implements the magic via Delphi enumerators and WinAPI fibers. Sure thing, people were implementing yield return in…