Там по сути ничего сложного, есть два основных варианта:
1. Отрисовывать "пузыри", картинки и текст на холсте. Лучше это делать при помощи графической библиотеки, например AggPas или BGRABitmap, там есть сглаживание линий и шрифтов, всякие визуальные эффекты. Но перед отрисовкой нужно для каждого элемента просчитать координаты и размеры. В графических библиотеках для этого есть удобные средства - виртуальный холст с изменяемым viewport (видимая область), и где можно без тормозов рисовать сотни тысяч объектов не заморачиваясь с границами видимости, системой координат, скроллингом, масштабом и прочими вещами.
2. Создать свои визуальные компоненты (контролы), которые умеют себя отрисовывать по команде Paint(). В таком случае упрощается расчет положения элементов текста, можно использовать стандартные контейнеры контролов - TFlowPanel, TScrollBox. Вот пример исходников такого чата -
https://github.com/serbod/talaria/blob/ ... tframe.pas