El programita esta muy bueno y sensillo pero yo hice algunos retoques.
Resulta que usando el código anterior se presentan dos problemas en el evento onTitleClick. El primero es, que cuando se hace un click por primera vez sobre el título de la grilla, PreviousColumnIndex vale -1 y DBGrid1.Columns[PreviousColumnIndex] produce error porque no existe el elemento -1. Para solucionarlo, cambio try por if; y queda:
Código Delphi
[-]
if PreviousColumnIndex > -1 then
begin
DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
end;
El segundo problema se produce cuando la columna no tiene asignado un campo para mostrar (ojo, esto tal vez sea un error lógico en el diseño de la ventana). Para evitar el error se agrega un if antes del último if; y queda:
Código Delphi
[-]
if Column.Field <> nil then
if (Pos(Column.Field.FieldName, SortFieldNames) = 1)
...
¿Qué opinan?