Webseitenmarkiertes direkt ins TDBVRichViewEdit kopieren

General TRichView support forum. Please post your questions here
Post Reply
j&b
Posts: 197
Joined: Mon Sep 05, 2005 1:35 pm

Webseitenmarkiertes direkt ins TDBVRichViewEdit kopieren

Post by j&b »

Ich möchte einen markierten Bereich (enthält formatierten Text und eine Grafik) über Strg+c kopieren und über Strg+v in mein TDBVRichViewEdit-Memo einfügen (ohne den Zwischenschritt über WORD gehen zu müssen).
Ich habe es mit KI so weit hinbekommen, dass der markierte Text mit den Schriftattributen zu 9x % korrekt ins Memo übergeben wird. Eine im Text enthaltene Grafik wird zwar in die Zwischenablage übernommen, aber nicht ins Memo übergeben.
Wer hat einen Code für W11, D7, TDBVRichViewEdit Version v24.0.1, der beides ins Memo übergibt?
j&b
Posts: 197
Joined: Mon Sep 05, 2005 1:35 pm

Re: Webseitenmarkiertes direkt ins TDBVRichViewEdit kopieren

Post by j&b »

Zum besseren Verständnis:

Es soll heißen:
Markiertes aus Webseiten direkt ins TDBVRichViewEdit kopieren

Beispiel siehe ganz unten

Mein Code sieht bisher so aus:

1.
unit xxx;
interface
uses
Windows, Messages, ...., jpeg,clipbrd, RVClipboard, RVFile, ...

2.
procedure TForm1.FormCreate(Sender: TObject);
var ...
begin
...
//zusätzlich:
memo.AcceptPasteFormats := memo.AcceptPasteFormats + [rvddHTML]; //HTML-Einfügen dauerhaft erlauben
memo.Options := memo.Options + [rvoShowGridLines];
//memo.HTMLImportOptions := memo.HTMLImportOptions + [rvhtmlioNoImages];
memo.OnImportFile := nil; //stellt sicher, dass kein altes Event im Hintergrund aktiv ist:
end; //of FormCreate

3.
procedure TForm1.memoPaste(Sender: TCustomRichViewEdit; var DoDefault: Boolean);
var //memo (TDBRichViewEdit) - Ereignisse - OnPaste doppelklicken
HtmlFormatID: Word;
DataHandle: THandle;
DataPtr: Pointer;
HtmlStr: String;
CleanStr: String;
StartPos, EndPos: Integer;
begin
// 1. Registriert das Windows-HTML-Format
HtmlFormatID := RegisterClipboardFormat('HTML Format');

if memo.CanPasteHTML then begin
// 2. Zwischenablage öffnen und das echte HTML auslesen
Clipboard.Open;
try
if Clipboard.HasFormat(HtmlFormatID) then begin
DataHandle := Clipboard.GetAsHandle(HtmlFormatID);
if DataHandle <> 0 then begin
DataPtr := GlobalLock(DataHandle);
try
HtmlStr := PChar(DataPtr);
finally
GlobalUnlock(DataHandle);
end;
end;
end;
finally
Clipboard.Close;
end;

// 3. DER ABSTURZ-FILTER: Alle <img...>-Tags restlos aus dem Text löschen
//wg. Bereichprüfungsfehler + (anschließend -OK+F9-) Unbekannte Bilddateierweiterung (.webp?v=1762252438)
CleanStr := HtmlStr;
while Pos('<img', LowerCase(CleanStr)) > 0 do begin
StartPos := Pos('<img', LowerCase(CleanStr));
EndPos := Pos('>', Copy(CleanStr, StartPos, MaxInt));
if EndPos > 0 then
Delete(CleanStr, StartPos, EndPos)
else
Delete(CleanStr, StartPos, 5);
end;

// 4. DER ENTSCHEIDENDE SCHRITT: Zwischenablage vollständig bereinigen
Clipboard.Open;
try
Clipboard.Clear; // Vernichtet das störende RTF-Format des Browsers samt der Bildfehler!

// ' sauberes' HTML zurückschreiben
DataHandle := GlobalAlloc(GMEM_MOVEABLE, Length(CleanStr) + 1);
if DataHandle <> 0 then begin
DataPtr := GlobalLock(DataHandle);
try
Move(PChar(CleanStr)^, DataPtr^, Length(CleanStr) + 1);
finally
GlobalUnlock(DataHandle);
end;
SetClipboardData(HtmlFormatID, DataHandle);
end;
finally
Clipboard.Close; // Gibt die Tastatur sofort wieder für Windows frei!
end;

// 5. Parser übernimmt sauberes HTML - Ein Absturz in RVClasses ist unmöglich, da keine Bilder mehr existieren!
memo.PasteHTML;
DoDefault := False;
end;
end;

procedure TForm1.memoImportFile(Sender: TCustomRichView; const Location: TRVUnicodeString; out Content: TStream);
begin //memo (TDBRichViewEdit) - Ereignisse - OnImportFile doppelklicken
Content := nil; //Stream auf nil etzen
end;
Attachments
WebMarkiertes.jpg
WebMarkiertes.jpg (54.82 KiB) Viewed 32 times
Sergey Tkachenko
Site Admin
Posts: 18193
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Re: Webseitenmarkiertes direkt ins TDBVRichViewEdit kopieren

Post by Sergey Tkachenko »

Aus welcher Anwendung kopieren Sie das Dokument?
Welches Bildformat hat es? Falls es WebP ist: Verfügt Ihre Anwendung über eine Grafikklasse, die WebP unterstützt?

Wenn Sie Delphi 7 verwenden, ist mir leider nicht bekannt, wie man WebP-Unterstützung hinzufügt. Möglicherweise bieten einige Drittanbieterklassen diese Funktion. In neueren Delphi-Versionen wird diese Unterstützung von Skia bereitgestellt. Sie müssen Skia aktivieren und die Unit RVSkia in Ihr Projekt einbinden.

---

Which application are you copying the document from?
What image format is it? If it's WebP, does your application have a graphics class that works with WebP?

If you're using Delphi 7, unfortunately, I don't know how to add WebP support. Perhaps some third-party classes support it.
In newer versions of Delphi, this support is provided by Skia. You need to enable Skia and include the RVSkia unit in your project.
Post Reply