The new GExperts version still supports all Delphi versions back to Delphi 6 (with the notable exception of Delphi 8) and even the Delphi 11 version is no longer in Beta state. There are even a few new features: Fast add mode for the Uses Clause Manager is back. Uses Clause Manager: Units "System" and … Continue reading GExperts 1.3.22 experimental twm 2023-03-25 released
When the WordPress ActivtyPub plugin does not work for your site
I added the ActivityPub plugin to my WordPress installation a while ago and was wondering why it didn't seem to work. Today I discovered an ActivtyPub warning on the Site Health Status page saying ... Your WebFinger endpoint https://blog.dummzeuch.de/.well-known/webfinger?resource=acct:dummzeuch@blog.dummzeuch.de does not return valid JSON for application/jrd+json. ... that suspiciously sounded like it might be the … Continue reading When the WordPress ActivtyPub plugin does not work for your site
Setting a form’s bounds can cause the DPI to change
Note to self: Setting a form's bounds can move the form to a different monitor. If that monitor has a different DPI than the one the form was originally on, this will cause a WM_DPICHANGED message to be sent to the form, which in turn will change the form's bounds again. This happened, for example, … Continue reading Setting a form’s bounds can cause the DPI to change
When showing a hint causes an Access Violation
I have just updated my last blog post regarding another effect of the Screen object caching the monitor configuration: Displaying a hint (via standard Delphi VCL functionality) causes an access violation. The solution is again to access the form's monitor property. Unfortunately, it's not that simple, as there is no user action that causes the … Continue reading When showing a hint causes an Access Violation
When Screen.Monitor[x].WorkAreaRect contains garbage
I'm posting this here so I can look it up later in case I forget it again: Some Delphi versions (I know about Delphi 2007 and earlier, not sure when it was fixed) have got a bug in the VCL code for the TScreen (global Screen object) when the monitor configuration changes. That class caches … Continue reading When Screen.Monitor[x].WorkAreaRect contains garbage
TdzSpeedBitBtn updated to support scaling
4 years ago I wrote a helper class TdzSpeedBitBtn which turns a TBitBtn into a TSpeedButton that can have the focus. That helper class has also been used in GExperts (in the Uses Clause Manager and Rename Components). It worked fine until Delphi 11 introduced per monitor DPI awareness. Then it still worked but the … Continue reading TdzSpeedBitBtn updated to support scaling
Replacing a failed drive in a zfs pool
So I can look it up later: When a drive that is part of a zfs pool fails and has already been physicall replaced in the server. zpool status looks like this: [bash] user@server:~$ zpool status pool: main state: DEGRADED status: One or more devices could not be used because the label is missing or … Continue reading Replacing a failed drive in a zfs pool
Why renaming a running executable can fail
I always thought that it is not possible to rename an executable that is currently running. Turns out I was wrong (happened before). It works fine for many executables, but not for all of them. In particular it does not work for the executables of our internal tools. Windows complains that the file is in … Continue reading Why renaming a running executable can fail
New theme for blog.dummzeuch.de
I had to update the PHP version of my website and this broke the Suffusion theme I was using for the WordPress installation. Unfortunately Suffusion hasn't been supported by its author for a few years and even though I liked it a lot I can't afford the time needed for fixing the problem. So, here … Continue reading New theme for blog.dummzeuch.de
What does the following Delphi function do?
Still playing around with ChatGPT, I asked it "What does the following Delphi function do?" [delphi] function FileSizeToHumanReadableString(_FileSize: Int64): string; begin if _FileSize > 5 * OneExbiByte then Result := Format(_('%.2f EiB'), [_FileSize / OneExbiByte]) else if _FileSize > 5 * OnePebiByte then Result := Format(_('%.2f PiB'), [_FileSize / OnePebiByte]) else if _FileSize > 5 … Continue reading What does the following Delphi function do?