You've heard about Unicode, generics, and the like... but there is way more in Delphi 2009, including a few hidden (or not commonly mentioned) gems. Here is a random selection. I'm not 100% percent sure they are the 5 best, and all five hidden, but you get the idea. And they are not in any order:

  • Exit with a value (I know, this was blogged about, but worth repeating)
  • InnerException (that is you raise an exception while handling one... and both exception objects are kept around)
  • TTextReader interface for streams (and strings), this is so nice you won't care about StringBuilder
  • You can change the internal classes used by any DataSet by changing a global variable holding a class (FieldDefs, IndexDefs, Params... and many more)
  • TObject.ToString and the other new methods of the TObject class
  • commented deprecated (that is, deprecated with a string indicating an extra compiler hint, too bad it is not used much by the VCL)

(this was hinted by me repeating there are many goodies in the product over the two days seminar on Delphi 2009 I just did.) I could easily add 5 more covering VCL controls (aligned edits, text hints, balloon help, buttons with images, grouping in listview) but they are not so "hidden". Anything else you want to share? I'm pretty sure this list is far from complete... and there are others I had to leave out but would be worth adding.