我使用
为段落IHTMLElement设置属性样式
Elem.style.setAttribute(' TEXT-ALIGN''中心',0);
样式是用html编写的,但TWebBrowser组件不会使文本居中。
保存并重新打开html文档后,文本显示在中心。
我应该怎样做才能让风格改变立即生效?
答案 0 :(得分:1)
以下对我来说很好(在D7中,在Win7 64位上使用IE 11)。
单击Button1后,WebBrowser会按预期右对齐显示“Some text”。后 单击Button2,“某些文本”立即显示居中对齐。希望, 与您的代码并排比较将揭示出与众不同之处。如果以下方法没有帮助,如果您向q添加SSCCE,则可能会得到更好的答案。
HTML
<html>
<body>
<div id="adiv" style="text-align: right; color: Gray">Some text</div>
</body>
</html>
代码
procedure LoadWBFromString(WB : TWebBrowser; AString : String; out Doc2 : IHtmlDocument2);
var
V : OleVariant;
begin
WB.Navigate('about:blank');
Doc2 := WB.Document as IHTMLDocument2;
Doc2.clear;
V := VarArrayCreate([0, 0], varVariant);
V[0] := AString;
try
Doc2.Write(PSafeArray(TVarData(v).VArray));
finally
Doc2.Close;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Doc2 := Nil;
LoadWBFromString(WebBrowser1, Memo1.Lines.Text, Doc2);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
E : IHtmlElement;
Doc3 : IHtmlDocument3;
S : String;
begin
Doc2.QueryInterface(IHtmlDocument3, Doc3);
Assert(Doc3 <> Nil);
E := Doc3.GetElementByID('adiv');
if E <> Nil then begin
E.Style.SetAttribute('text-align', 'center', 0);
S := E.Style.GetAttribute('text-align', 0);
Caption := S;
end;
end;
更新:在WinXP上使用IE6的评论中提到的OP。我试过代码 安装了IE8的WinXP VM并获得了OP描述的行为。打电话后 SetAttribute,“text-align:center”被添加为样式的最后一个属性 并没有采取行动,文本保持右对齐(和原始 大写的“text-align:right”出现在样式属性列表的开头。)
但是,以下更改导致文本按照需要居中。
if E <> Nil then begin
E.style.set_textalign('center');
// E.style.setAttribute('text-align', 'center', 0);
// S := E.Style.GetAttribute('text-align', 0);
// Caption := S;
Memo2.Lines.Text := Doc2.body.OuterHtml;
end;
(我删除了代码以获取并使用text-align属性,因为 GetAttribute在WinXP / IE8上引发了异常。)
据推测,有人会了解IE的DOM和渲染历史的细节 可以解释IE11和IE6 / 8的行为之间存在这种差异的原因。