Einzelnen Beitrag anzeigen

Koma-Code
(Gast)

n/a Beiträge
 
#1

In den Webbrowser zwei html-Dkumente laden (Design-Modus)

  Alt 2. Okt 2006, 21:38
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
  Mit Zitat antworten Zitat