Tuesday, December 2, 2025

Delphi Tip of the Day: Editor Font > Line Height

Delphi 13 Options: Editor > Display > Font > Line Height

I recently installed Delphi 13 on my new development machine. And ever since I watch Alister Christie's Code Font video, I've been hooked on using Consolas. I like how it distinguishes between zero and capital "O".

When I brought up the options to change the editor font to Consolas I noticed a new Line Height feature. I played around with some different line heights and for me personally, I settled on 1.2 which fits my eye nicely.

Line Height of 1.2 fits my eye nicely


I don't remember seeing Line Height in Delphi 11. And a quick confirmation of the Delphi 11 IDE options proves it's not there. I installed Delphi 12 but never really used it. I did a quick check and lo and behold the Line Height feature is available in Delphi 12. I must have missed it because I totally skipped using 12 all together.

I also decided to check out if there were any other fonts I might like. Here is the list of  alternatives to Consolas that ChatGPT gave me. I tried the ones that were available in Delphi and decided to stick with Consolas.

Font What makes it good
Fira Code A modern monospaced font with programming ligatures (so =>, !=, ->, etc. can render as single, clean glyphs). Improves readability of symbol-heavy code.
JetBrains Mono Designed specifically for developers: clean shapes, tall lowercase letters (makes code easier on the eyes), and good clarity even at smaller sizes.
Hack A clean, well spaced monospaced font — good if you like clear distinction between similar characters (0 vs O, l vs 1). Good for plain-text editing or coding without fuss.
Cascadia Code Created by Microsoft for terminals/editors. Has optional ligatures and good support for modern coding environments. Works nicely for both GUI IDEs and terminals.
Source Code Pro A straightforward, clean monospaced font with consistent spacing and good legibility — useful if you prefer simplicity over styling.
Iosevka A very flexible monospaced font (lots of glyph/width/variant options), popular among people who want tight control over how their code appears.
DejaVu Sans Mono A classic, reliable open-source monospace font with wide character coverage and solid legibility — good fallback or default choice on many platforms.


Here is Alister Christie's video on code fonts I watched many years ago. Wow, this video was released in 2013.



Enjoy!
Semper Fi
Gunny Mike
https://zilchworks.com



Saturday, November 29, 2025

How Ray Konopka Improved My Delphi Code Overnight

Every now and then, you get a piece of advice that stays with you. Not because it was dramatic or complicated, but because it quietly made everything better.

Two years ago, I sent a simple question to Ray Konopka — the Ray Konopka — about his coding style. I had noticed that his Delphi method declarations didn’t look like the IDE defaults. He added spaces inside parentheses and brackets, and his code just… breathed better. It had clarity.

I finally went back and reread that email thread, and I realized something.

The guidance Ray gave me that day permanently changed how I write Delphi code.

This blog post is long overdue.

How It Started

Here is the short version of what I asked Ray. I wanted to know why his method declarations looked like this:
procedure FormCreate( Sender: TObject );

Instead of the standard IDE formatting:

procedure FormCreate(Sender: TObject);

My question was simple:
Is there a setting that does this automatically? And why do you prefer this style?

Ray’s reply was thoughtful, detailed, and generous. And it opened my eyes to something subtle but powerful.

Why Ray Adds Spaces Inside Parentheses

Ray explained that adding a space after the opening parenthesis and before the closing parenthesis helps your eyes distinguish the method name from the parameter list. It creates a visual delimiter that makes code easier to scan.

He illustrated this beautifully by showing side-by-side method declarations from the TString class. With spacing added, the entire block becomes more readable and less cramped.

When you look at example after example, the difference becomes obvious — almost impossible to ignore.

Smart Tab: The Secret Weapon

The second thing Ray emphasized was the use of Smart Tab.

With Smart Tab enabled, wrapping long parameter lists becomes far easier and dramatically cleaner. Ray demonstrated it with a real method declaration on multiple lines, perfectly aligned with a single press of the Tab key.

After seeing that, I turned Smart Tab on — and I’ve never turned it off again.

Delphi 13 Options - Smart Tab

https://docwiki.embarcadero.com/RADStudio/Florence/e/index.php/Source_Options#Options_tab

The Three Rules That Changed My Coding Style

After just three days of practicing what Ray shared, I wrote him back with a summary of what made the biggest impact on my coding clarity. Here were the top three:

1. Smart Tab On

It makes aligning wrapped parameters effortless. This one toggle improves readability more than people realize.

2. Spaces after ( , [ and before ] , )

This small visual pause gives every method declaration and parameter list more clarity. It is now second nature for me.

3. Two blank lines between method implementations

This simple spacing rule makes code blocks easier to navigate, search through, and mentally organize. It is one of the fastest ways to reduce visual clutter.

These three rules alone made my Delphi source code noticeably cleaner.

Not fancy. Not complicated. Just better.


Ray’s Full Coding Style Guide

At the end of our email exchange, Ray did something incredibly generous. He made the full Raize Delphi Coding Style Guide available as a free PDF download.

If you want the complete reference, you can access it here:
https://raize.com/wp-content/uploads/RaizeDelphiCodingStyleGuide.pdf

This is required reading for any Delphi developer who cares about clean, consistent, readable code.

Two Years Later

I’ve been following Ray’s guidance ever since that email exchange. You’ve even seen it in the code I’ve generated or shared online — it became the standard I hold myself to.

What surprised me most is how such small adjustments created such a big improvement. Enough improvement that I felt compelled to finally write this post, two years delayed but not forgotten.

Ray — thank you for the clarity, the generosity, and the craftsmanship you bring to the Delphi community.


Enjoy!
Semper Fi
Gunny Mike
https://zilchworks.com

P.S.
Over the past two years, every time I asked ChatGPT to help me generate Delphi source code, I asked it to follow the Konopka Style Guide. It became my north star for clean, readable formatting — and even AI had to get on board.


Wednesday, November 26, 2025

Delphi Tip of the Day: Restore Tools > Manage Features... After an ISO Install

 



I recently installed Delphi 13. I went back today to install the Help and Samples and could not.

Tools > Manage Features,,, gave me the following error:



WTF! 

I remember this happening to me about 3 years ago. I was as lost today as I was back then. 

How do you recover from this?
It's 2025, how can Embarcadero still let this crap happen?


A simple dialog that says "Would you like to switch to online mode instead?" which then gracefully handles the fact that the temporary ISO directory used during the initial install is no longer available.

Aren't we paying enough money for Embarcadero to put this type of fix in place?

Anyway, I dug up the old instructions Glenn Dufke posted three years ago when this happened. And his instructions worked today, just like they did back then.


If this happens to you, here is the fix:

  1. Open an elevated Command Prompt
    Right-click Command Prompt ? Run as Administrator

  2. Navigate to your RAD Studio 13 bin folder
    cd "C:\Program Files (x86)\Embarcadero\Studio\37.0\bin"

  3. Run the command Dufke mentioned
    getitcmd.exe -c=useoffline typo
    getitcmd.exe -c=useonline


Semper Fi
Gunny Mike
https://zilchworks.com

Monday, August 18, 2025

Zilch and Delphi: Standing Strong Since 1991

 


Zilch and Delphi: Standing Strong Since 1991

I’ve heard it said that if you don’t tell your story, you may not like the story that’s been told. For more than three decades, the story of Zilch debt reduction software — built on Turbo Pascal and powered by Delphi — hasn’t really been told. Yet both Zilch and Delphi share a remarkable trait: they’ve quietly endured while so many giants of the software world have faded away.

Turbo Pascal first appeared in 1983, giving programmers an accessible, structured language at a fraction of the cost of its competitors. Three years later, in 1986, I saw Pascal for the first time when my college professor put C and Pascal source code side by side on the blackboard. The C code looked cryptic. The Pascal code? Clear as day. That choice — Pascal — shaped my entire path as a programmer.

Five years after that moment, in 1991, Zilch was born. And from the very beginning, it carried Pascal in its DNA. As Delphi evolved, Zilch evolved with it. The same clarity and stability that drew me to Pascal has allowed Zilch to keep going strong for decades.

And here’s the part I think the Delphi community will appreciate most: just as Turbo Pascal and Delphi have stood the test of time, so has Zilch. While giants like Lotus 1-2-3, Netscape Navigator, and MSN Messenger have all faded into history, Pascal/Delphi continues to endure — and so does Zilch.

👉 I just published the full story, including a list of 25+ once-dominant apps that disappeared while Zilch endured. You can read it here:
Zilch: Standing Strong Since 1991

If you’re part of the Delphi community, it would mean the world if you visited, left a comment, and helped boost the presence of this new blog. Your voice will help shine a light on one of Delphi’s quiet success stories — and on the remarkable longevity of Zilch and Delphi, standing strong together since 1991.

Semper Fi,
Gunny Mike
https://zilchworks.com


Saturday, July 26, 2025

💾 A 35-Year-Old Turbo Pascal Program Gets a Delphi 11.3 FMX Facelift

 Back in 1989, while stationed at MCAS Cherry Point as a U.S. Marine, I wrote a debt reduction program using Turbo Pascal. I called it Zilch. It was a side project—a DOS program to help people get out of debt faster by applying logic and structure to their monthly payments.

What I didn’t expect was that the program would still be alive 35 years later… and that I’d be rewriting it in Delphi 11.3 FMX to run natively on both Windows and macOS.

Today that same program—has helped over 16,000 people eliminate more than $114 million in debt. It’s been featured on Good Morning America, profiled in Military Lifestyle magazine, and used by people from all walks of life who just wanted a fair shot at financial freedom.

Turbo Pascal 1991 (640 x 480)


Delphi 5 2000 (640 x 480)


Delphi 5 2019 (640 x 480)


Delphi 11.3 FMX 2025 (Light)


Delphi 11.3 FMX 2025 (Dark)

🧰 Rewriting It with Delphi 11.3 FMX

After years of maintaining a Windows-only VCL version, I finally gave the software a full FireMonkey makeover. The new version runs beautifully on 64-bit Windows and macOS, thanks to Delphi’s powerful cross-platform capabilities.

Here’s what I used:

  • Delphi 11.3 Alexandria (FMX)

  • SQLite for local embedded storage

  • FastReport FMX for printable reports

  • Pure native code — no external dependencies, no subscriptions, no nonsense

I designed the UI using nested TLayout structures with TRectangle backgrounds and TLabel overlays for text. Simple. Clean. Predictable. Just the way I like it.

📣 Hoping to Share This Story Wider

I recently sent out a press release titled:

“Veteran’s 34-Year-Old Software Quietly Wipes Out $114M in Debt”


I'm hoping it catches the attention of journalists—not because it's flashy, but because it's quietly helped people get out of debt with logic, structure, and a clear plan.

But if the story does spread, I want the Delphi community to know this moment belongs to all of us.

I didn't build this alone.

🙏 Thank You, Delphi Community

I want to take a moment to thank the developers and authors who helped me along the way—people whose work made this possible, directly or indirectly:

  • Jeff Duntemann, whose Complete Turbo Pascal (1989) was my original gateway into programming. Without that book, none of this would have happened.

  • Ray Konopka, for his generous email responses and beautifully structured coding guidance. His style continues to shape how I write and organize code.

  • Cary Jensen, for his FireDAC and database wisdom. Cary’s knowledge and books helped me modernize the back-end without losing the software’s soul.

  • Ian Barker, for both encouragement and that persistent (okay, desperate) nudge to add a dark theme. You were right, Ian. It looks sharp. 😉

  • Andrea Magni, for Delphi GUI Programming with FireMonkey. His insights helped me tame layouts and think more visually in FMX.

  • David Cornelius, for Fearless Cross-Platform Development with Delphi. That book gave me the confidence to finally step outside of the Windows-only box.

  • Harry Stahl, for Cross-Platform Development with Delphi 10.2 and FireMonkey, which filled in several key gaps during this transition.

  • William Meyer, for Delphi Legacy Projects. His book helped me realize where I’d been going off track from the beginning—and finally set me straight in the right direction.

To all of you—thank you. Whether it was your book, your blog, your talk, or a few kind words on Twitter or in an email… you’ve helped keep ZilchWorks alive.

🧭 Final Thoughts

I’ve always believed that code should serve people—and this project has served thousands. Not because it’s cutting edge, but because it’s clear, honest, and built to last.

Delphi made that possible.

If you’re a Delphi developer with a legacy app—or a dusty old Turbo Pascal project—you don’t have to rewrite it in something new. Sometimes, all it needs is a fresh FMX coat of paint.

Thanks for reading.

Semper Fi,
Gunny Mike
https://www.zilchworks.com




Monday, June 2, 2025

The First Time I Met My Guardian Angel


The First Time I Met My Guardian Angel


I didn’t know it at the time, but that night was the beginning of everything.

Sergeant Pete Koutrouba walked through the front door, shook my hand, and said, “Hi, Michael. I’m Pete Koutrouba from the Marines.”

I couldn’t take my eyes off his dress blues. I don’t remember how, but somehow we all ended up sitting around the kitchen table—my mom and dad at one end, me and Sergeant Koutrouba at the other, and my younger brother David sitting across from him.

Sergeant Koutrouba slid a big blue binder over to me.

“Start looking through this book. Stop when you see something you like.”

As I flipped through the pages, my dad was busy telling Navy war stories. My mom just sat there, either staring at Sergeant Koutrouba or his dress blues—I couldn’t tell which. My brother Dave, on the other hand, kept pestering him.

“Can I blow stuff up?” Dave asked eagerly.

Sergeant Koutrouba chuckled. “You like that?”

I hadn’t even realized I’d stopped flipping pages until he looked over and noticed. My fingers were resting on a picture of airplanes.

“Yeah! Can I do this stuff?”

“If you’re qualified,” he said.

I was qualified. And just like that, my boot camp date was set for July 1977. My brother and I were both signing up under the Buddy Program. My parents were thrilled to finally get David out of their hair. That night, Sergeant Koutrouba walked into our house hoping for one enlistment contract. He walked out with two.

It was a win-win.

I enlisted on March 4, 1977—nineteen days before my 18th birthday. The months leading up to boot camp are mostly a blur, but I do remember one thing: Rocky.

The movie had just come out, and something about it got to me. I left the theater with a fire in my belly. If I was going to be a Marine, I had to get in shape. So, I started running every day.

"Feeling strong now!"

The night before boot camp, I barely slept.

I had seen the movies—the ones where drill instructors go absolutely ballistic on new recruits. I spent the whole night thinking about it.

"Riley, what have you gotten yourself into?"

It was my first time on a plane.

Twenty-two of us, a bunch of kids heading straight into the unknown.

They drank. They laughed. They flirted with the stewardesses. I sat by the window, watching the sky stretch endlessly ahead.

I wasn’t in the mood for shenanigans.

My mind kept circling back to those boot camp movies—the screaming, the chaos, the way the drill instructors broke down recruits.

How bad was it going to be?

We arrived at Parris Island in the dead of night. Lightning struck. Thunder cracked. Rain pounded the bus.

As we approached the gate, I caught a glimpse of the MPs standing guard.

They were laughing. At us.

The bus kept moving. Left. Right. Right again. Then left. No landmarks. No signs. Just darkness.

The driver was doing it on purpose—disorienting us so we had no idea where we were.

Every time lightning flashed, I saw the swamp outside. Gnarled trees. Black water.

What the hell? This place is creepy.

Then, the bus stopped.

The doors hissed open.

"HURRY UP! MOVE IT! MOVE IT! MOVE IT! MOVE IT!"

The drill instructors were already screaming before our feet even hit the ground.

Rain hammered down, soaking us instantly. We rushed out, heads down, trying to shield our faces.

No time to think. No time to process. No yellow footprints.

I had seen them in every documentary, every recruitment poster. The "legendary" yellow footprints—the first step in every Marine's journey.

I never got to stand on them.

They say the yellow footprints are where every Marine begins their journey. Not me.

Instead, we were shoved inside, where they stripped us of everything.

Pockets emptied. Jewelry gone—even church necklaces.

My small book of addresses. Gone.

Everything went into a cinch sack, never to be seen again.

Or so I thought.

ZIP! ZAP!

Hair—gone.

4:30 AM. Nighty night.

Ever try sleeping right after getting your head shaved? Ugh.

Two days later, we met our drill instructors.

We sat cross-legged on the floor while the lieutenant stood in front of us, giving a speech about the Marine Corps. Behind him stood four men:

• Senior Drill Instructor Staff Sergeant Noe

• Sergeant Logue

• Sergeant Hammrick

• Sergeant Fitzpatrick

The lieutenant finished speaking.

“Senior Drill Instructor, take charge!”

And that’s when all hell broke loose.

"ON YOUR FEET!"

Everything was a blur.

Drill Instructor Sergeant Fitzpatrick got in my face and started barking orders. I snapped to attention.

“SIR, YES SIR!”

“SIR, NO SIR!”

“SIR, YES SIR!”

And that’s when I first met my guardian angel.

Amidst the chaos, a voice—clear as day—spoke inside my head.

"Everything will be all right."

It was just like in the movies. A drill instructor was four inches from my face, screaming at me, while I stood there, shouting back, “SIR, YES SIR!”

And yet, everything around me faded into the background.

Time slowed.

I was having a private conversation in my head while the world around me roared in fast motion.

"Don't laugh. I know it’s funny, but don’t laugh."

My guardian angel continued.

"If you laugh, it won’t be good. But listen, I’ve got a secret for you."

I braced myself, resisting the urge to smile.

"Boot camp is going to be a breeze. Your mother yells louder than these drill instructors."


Sunday, May 11, 2025

Delphi Tip of the Day: A Better Way to Center Modal Forms


Yesterday, I was going through some final aesthetic checks on my FMX desktop software application. I have two modal forms that popup up during click events. One is help about which I set to screen center. And the other contains code that centers the form on it's parent window.

I was testing the behavior of this form toggling between light and dark themes. I noticed that with light theme the window just appears but with the dark theme I could see the window move it's way from the top of the screen to it's centered position and then switch to dark.

In the OnShow event handler I was calculating Left and Top like I have always done to center the window. This was the first time I'd ever seen the window reposition itself. This is the first time I'd ever used a dark theme. And, this is the first major application I'd written with FMX.

Left := ParentForm.Left + (ParentForm.Width - Self.Width) div 2;
Top := ParentForm.Top + (ParentForm.Height - Self.Height) div 2;
To say the least, I was annoyed by this split second flash centering itself on the parent window. I tried all kinds of stuff to minimize this flash. Nothing work.

There's got to be a better way!

I didn't realize I had left the Position property of the form set to Default. In essence that is screen position (0,0), or the top-left corner. 

The first line of my code was moving the form horizontally from the left edge to the center of its parent. (I never saw that move happening). The second line of code was moving the form vertically from the top edge to the center of its parent (I saw this move happening).

I thought there's got to be a better way? I don't want customers seeing this screen moving like this. I tried setting the form's Visible property to False before the centering code and setting the Visible to True after. Nope, that is unauthorized. 

I tried in the OnCreate instead. Nope. I had created public properties for the forms Left and Top along with getters and setters. I created a whole elaborate scheme to support positioning this form where I wanted it.

Then it dawned on me. "Isn't there a screen position property?"

Yes, there is.
MainFormCenter! It's a thing!

FMX Form Position Property

Are you kidding me. MainFormCenter! It's a thing! When did this show up?

I immediately set the form Position property to MainFormCenter and added an Exit statement to the top of the OnShow event handler. 

And voila! 

It works like a champ. No more flashy form realignment stuff happening.

I then removed all the getters, setters, and properties I added for manually doing the form centering activity. Simple, cleaner code. 😎

BTW, the same thing exists for VCL.

VCL Form Position Property

DocWiki Links:

Enjoy
Semper Fi
Gunny Mike

https://zilchworks.com