Eine ganz einfache Methode, aber sicher nicht die Ressourcenschonendste und beste ist das aktive warten darauf dass der Outputbuffer leer ist.
Delphi-Quellcode:
ApdComPort1.PutString(str);
while ApdComPort1.OutBuffUsed <> 0 do
Application.Processmessages;
Ich weiß, so macht man es eigentlich nicht. Aber so kannst Du zumindest einfach mal testen ob Du damit auch deinen Fehler provozierst.