Во избежание недоразумений небольшое уточнение: Код выделенный синим цветом в правленой процедуре следует удалить (он приведен для информации). Ну или в WinApi.GetTextExtentPoint32A(dc, str, 1, s) вместо 1 поставить 2.