我有一個電子郵件客戶端,它允許用戶更改字體,字體大小,我有粗體,斜體等設置字體大小
問題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