Nun, du bist der Lösung ja schon sehr nah! Du musst die Unterstreichung genau so beginnen wie die Textausgabe. Also: Zuerst Leerzeichen, dann Text, noch 'mal Leerzeichen, dann Unterstriche. Die Zahl der Leerzeichen übergibst du der Prozedur, also in etwa so
Delphi-Quellcode:
procedure MyWriteln(AnzLeerzeichen:Byte;Text:String);
var i : Byte;
begin
for i:=1 to AnzLeerzeichen do write(' '); writeln(Text);
for i:=1 to AnzLeerzeichen do write(' ');
for i:=1 to length(Text) do write('-');
end;