Объединение ячеек в StringGrid делается элементарно, вот за 3 минуты накалякал пример:
Не в обиду будет сказано: Вы проверяли как работает ваш пример? Практически Excel 2007...
Не тратте зря время, воспользуйтесь каким-либо готовым компонентом.
Сам занимался этим давно. Просто могу описать алгоритм:
1. Создаётся двумерный текстовый массив, равный по размеру Вашему СтрингГриду.
2. В этот массив записывается информация о всех ячейках (текст в ячейке, где начинается объединение, где оно заканчивается, цвет шрифта в ячейке, выравнивание и т.д и т.п.).
3. В OnDrawCell анализируется массив и рисуются соответствующие Rect функцией DrawTextW (позволяет выравнивать текст флагами и отображает Unicode).
4. В событии StringGridDblClick снова анализируется массив (какую ячейку кликнули 2 раза для редактирования?) и создается TEdit в соответствующем месте и соответствующего размера.
5. В событии OnKeyDown (например) проверяете, нажат ли Enter. Если да, то вносите изменение в массив и удаляете TEdit.
Это алгоритм простейшего Excel листа и непаханное поле для его усовершенствования. Оно Вам сильно надо?