If you're prepared to write a wizard you might find something in this fragments from a very old wizard I no longer use:
procedure TMyWizMainForm.ShowInMessageView(const FileName, MessageStr: string;
LineNumber, ColumnNumber: Integer);
var
MessageServices: IOTAMessageServices40;
begin
MessageServices := BorlandIDEServices as IOTAMessageServices40;
MessageServices.ClearCompilerMessages;
MessageServices.ClearToolMessages;
MessageServices.AddToolMessage(FileName, MessageStr, '.....', LineNumber, ColumnNumber);
ShowMessageView;
end;
procedure TMyWizMainForm.ShowUnitSource(const FileName: string);
begin
(BorlandIDEServices as IOTAActionServices).OpenFile(FileName);
end;
procedure TMyWizMainForm.ShowParseError(e: EParseError);
var
EditorServices: IOTAEditorServices;
TopView: IOTAEditView;
EditActions: IOTAEditActions;
begin
ShowInMessageView(CurrUnit, e.Message, e.LineNo, e.ColumnNo);
EditorServices := BorlandIDEServices as IOTAEditorServices;
TopView := EditorServices.TopView;
if TopView = nil then
begin
ShowUnitSource(CurrUnit);
TopView := EditorServices.TopView;
end;
if TopView <> nil then
begin
EditActions := TopView as IOTAEditActions;
EditActions.NextError;
end;
Close;
Beep;
end;
It works (worked?) by inserting a custom line into the IDE's message window and make the IDE jump there.