Hallo,
ich bin jetzt langsame am verzweifeln.
Ich möchte in den WebBrowser zwei unterschiedliche
html-Dokumente im Designmodus laden.
Wobei das erste Dokument immer in utf-8 codierung ist und das zweite kann beliebig sein.
Mein Problem ist jetzt, wenn ich für das Zweite Dokument eine iso-8859-1 charset habe sind alle Umlaute und
Sonderzeichen falsch dargestellt.
Die Funktionen die ich zum Einfügen verwende sind:
Delphi-Quellcode:
procedure LoadTextInside(Text : String);
var
WebDoc: HTMLDocument;
WebBody: HTMLBody;
begin
WebDoc := WebBrowser1.Document as HTMLDocument;
WebBody := WebDoc.body as HTMLBody;
WebBody.insertAdjacentHTML('AfterBegin', Text);
end;
und:
Delphi-Quellcode:
procedure LoadHTML(WebBrowser: TWebBrowser; HTMLCode: string);
var
sl: TStringList;
ms: TMemoryStream;
begin
if Assigned(WebBrowser.Document) then
begin
sl := TStringList.Create;
try
ms := TMemoryStream.Create;
try
sl.Text := HTMLCode;
sl.SaveToStream(ms);
ms.Seek(0, 0);
(WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
finally
ms.Free;
end;
finally
sl.Free;
end;
end;
end;
Ich habe jetzt zwei Lösungsideen, die eine ist, dass ich zuerst das Dokument mit der unbekannten Lodierung lade
und diese dann neucodiere mit dem WebBrowser. Dafür habe ich folgendes gefunden:
Delphi-Quellcode:
procedure SetCharSet(AWebBrowser: TWebBrowser; ACharSet: String);
var
RefreshLevel: OleVariant;
begin
IHTMLDocument2(AWebBrowser.Document).Set_CharSet(ACharSet);
RefreshLevel :=7;
AWebBrowser.Refresh2(RefreshLevel);
end;
Was bei mir jedoch nicht klappt, oder dass der WebBrowser den String auf seine Codierung hin überprüft, während er ihn einfügt.
Aber das klappt irgendwie nicht mit insertAdjacentHTML.
Kann mir vielleicht jemand dabei helfen??
Ach pasteHTML habe ich auch probiert, hat aber leider auch nicht geklappt:
Delphi-Quellcode:
procedure LoadTextInside(Text : String);
var
DisplayServices: IDisplayServices;
Caret: IHTMLCaret;
p : TagPoint;
Range : IHTMLTxtRange;
begin
(WebBrowser1.Document as IHTMLDocument2).QueryInterface(IID_IDisplayServices, DisplayServices);
if assigned(DisplayServices) then
begin
// DisplayServices.GetCaret(Caret);
// Caret.GetLocation(P, 0);
Range := ((WebBrowser1.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange;
Range.collapse(False);
Range.pasteHTML((Text));
end;
end;
Grüße,
KM