Hallo Marco,
gut, dass du deinen Quelltext bereit gestellt hast. Ich weiß jetzt, dass du
(1) Text im IE markierst
(2) diesen Text in die Zwischenablage kopierst
(3) diesen Text von dort mit einer eigenen Funktion abholen willst
(4) ihn dann in einer HTM-Datei speichern willst
(5) dich dann wunderst, warum er im Browser falsch angezeigt wird
(6) dich wunderst, dass er im NOTEPAD richtig angezeigt wird
(7) nach Speichern in NOTEPAD auch vom Browser richtig gezeigt wird.
Die ersten zwei Schritte sind unkritisch. Damit der IE die Zwischenablage richtig beschicken kann, registriert er sein eigenes Clipboard-Format mit Namen "
HTML Format" und erhält vom System einen Formatschlüssel zurück. In deinem Code verwendest du eine Konstante, die es so nicht gibt.
Delphi-Quellcode:
var
CF_HTML: integer;
begin
CF_HTML := RegisterClipboardFormat('
HTML Format');
end;
So geht das richtig. Nur am Rande möchte ich erwähnen, dass du beim Arbeiten mit der Delphi ClipBoard-Komponente die Methode HasFormat() statt der
API-Funktion IsClipboardFormatAvailable() hättest benutzen können. Ab der Stelle, an der du den Datenzeiger hast, geht es endgültig schief. Das Format CF_HTML ist UTF-8 codiert. Du übernimmst es einfach als AnsiString - das muss schief gehen.
Im Prinzip musst du den Prolog des Formates auswerten. Näheres dazu erfährst du im Platform
SDK. Im Prolog erfährst du die Positionen des
HTML-Context, des
HTML-Fragments und der eigentlichen Selektion, die markiert und kopiert wurde. Erst mit diesen Angaben kannst du vernünftig auf den Speicher zugreifen. Alle im
HTML-Context enthaltenen Zeichen solltest du mittels UTF8Decode() für die Weiterverarbeitung nach
Ansi umwandeln.
Hast du endlich den
HTML-Code in einer korrekten Form erhalten, dann macht sich eigentlich erst das größere Problem bemerkbar: Was wirst du wirklich übernehmen? Das Fragment? Die Selektion? Den ganzen Context? Irgendeinen
HTML-Abschnitt zwischen Context und Fragment?
Das wird sicherlich spannend. Und am Ende kommt heraus, dass du eigentlich nur den Text haben wolltest - den du mit ClipBoard.AsText() hättest erhalten können.
Freundliche Grüße vom marabu