Большое спасибо откликнувшимся!
Я ширину бордюра пробовал учитывать, но у меня не пляшет не на 4 пикселя, а на все 4 символа. Кроме бордюра надо еще учитывать отступ текста от края слева и ширину скрола если он есть, так что способ Freeman универсальнее, за что ему отдельное спасибо (правда отступ слева по-моему даже так не учтен).
Но проблему у меня даже "ListBox1.Width := ln + ListBox1.Width - ListBox1.ClientWidth;" не убирает и я разобрался почему - у меня в настройках семерки стоит отображение шрифтов 125% (или как оно там будет называться по русски) если поставить 100% то все будет идеально (кроме отступа слева

). Как учесть 125%?