Otra solucion mas adecuada podria ser que tu bat genere un ticket.xml.cms.new y hacer algo como lo que sigue:
Código Delphi
[-]
winexec('p.bat', SW_HIDE); while True do
begin
if FileExists('ticket.xml.cms.new') then
begin
DeleteFile('ticket.xml.cms');
MoveFile(PChar('ticket.xml.cms.new'),PChar('ticket.xml.cms'));
DeleteFile('ticket.xml.cms.new');
break;
end;
Application.ProcessMessages;
end;
memo2.lines.LoadFromFile('ticket.xml.cms');
Algo largo, pero al menos te aseguras de la correcta lectura del archivo. Tambien puedes agregar algun control de excepciones adicionalmente. Ademas no impota cuanto tiempo demore en ejecutarse el .bat.
Por otra parte, no has pensado en integrar la funcionalidad del bat en un ejecutable? o incluso en el mismo exe que contiene el memo?