我有一个电子邮件客户端,它允许用户更改字体,字体大小,我有粗体,斜体等设置字体大小
问题l为当升尝试改变的字体大小选择向上或向下我得到一个“EVariantTypeCastError”与消息“无法将类型Null的变体类型转换为OleStr类型”。此异常将在TextRange.queryCommandValue('FONTSIZE')上引发。
procedure TForm1.act_FontIncreaseExecute(Sender: TObject);
var
Selection: IHTMLSelectionObject;
HtmlPage: IHTMLDocument2;
TextRange: IHTMLTxtRange;
Parent: IHTMLElement2;
s: string;
i, mode: Integer;
begin
HtmlPage := self.HtmlEditor.Document as IHTMLDocument2;
Selection := HtmlPage.Selection;
TextRange := Selection.createRange as IHTMLTxtRange;
if (TextRange <> nil) then
begin
s := TextRange.queryCommandValue('FONTSIZE');
val(s, i, mode);
if mode = 0 then
HtmlPage.execCommand('FONTSIZE', False, inttostr(i + 1))
end;
end;
这是增加选择字体大小的正确方法吗?
编辑1:
样本HTML:
<HTML><HEAD></HEAD>
<BODY>
<P>
<SPAN style='FONT-SIZE: 7pt;'>
Test Text
</SPAN>
</P>
</BODY></HTML>
看起来问题出在FONT-SIZE样式。当这被取出时,不会抛出异常。我的最终目标是能够从Outlook复制和粘贴,这是一个简单的例子。当我使用其他样式,如颜色:红色,则不会抛出异常。所以它看起来就像它刚刚出现的字体大小一样。
编辑2
异常堆栈跟踪
Query/Exec的支出是Olevariant。 FontSize不会总是返回一个整数,在你的情况下它似乎没有返回任何东西(null)。但是,我无法重现您的错误,您是否可以编辑问题并包含一段能够重现错误的HTML? – whosrdaddy
感谢您的帮助,我会用示例更新问题 – MattLaza
'FONTSIZE'命令是指文本范围周围的'FONT'标记:例如, '测试文本'。在你的HTML例子中,你需要处理style属性/元素。 – kobik