I've used Delphi since 1994, but never updated beyond Delphi 6.
I recently decided to convert a simple Delphi 6 drawgrid program to Lazarus/FreePascal to make it 64-bit.
The only time I previously used Lazarus/FreePascal was in 2011 to convert a 32-bit DLL to 64-bit. As I recall, at that time you had to install Lazarus and FreePascal separately.
This time I was pleasantly surprised to find a single download let me install everything I needed, and the Delphi conversion menu option made the conversion relatively quick and easy.
My first compilation failed because a Windows globalalloc() and globalfree() call was being made. It wasn't clear to me why the conversion didn't include the windows.pas unit like the original program did, so I added windows.pas to my uses and tried compiling again.
Now various trect references failed, like drawgrid.selection := tgridrect(rect(...
Apparently a Windows trect and a FreePascal trect weren't the same, for some unclear reason. The easiest solution was to remove windows.pas from my uses, and change globalalloc()/globalfree() to getmem()/freemem(). Now the program compiled and ran.
Unfortunately, grid row selection wasn't working properly. My code used the .VisibleRowCount property to compute the middle row in the grid, and that property was always returning zero. Apparently the property is declared but not actually implemented.
It would probably be much better if declared but unimplemented features caused an exception, otherwise bugs are introduced.