Добрый день.
Насчет п. 1 - перед записью нового значения строку надо очищать.
Операция типа
не "перезаписывает" строку, а только изменяет первые три байта.StringVar := 'Tok';
Причем код типа
тоже не "чистит" строку, а просто записывает 0x00 в ее начальный байт. Остальные байты сохраняют свои значения, в результате чего может получиться мусор.StringVar := '';
Для очистки можно воспользоваться функцией MemFill из библиотеки CAA Memory.
Upd.: собственно, именно это и имел в виду Приборист.