在BeforeNavigate2事件里处理一下就可以了.主要你分析得足够,肯定没有问题.
procedure TDirMailForm.HtmlViewerBeforeNavigate2(Sender: TObject;
const pDisp: IDispatch
var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant
var Cancel: WordBool);
var i : integer;
em, sub : String;
begin
if pos('mailto:', Lowercase(url)) < 0 then
begin
ShellExecute(handle,nil,pchar(url),nil,nil,sw_shownormal);
Cancel := True;
end;
end;