IpHtmlPanel
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
IpHtmlPanel
Hallo,
ist es möglich einen Text mit seiner Darstellung und Bilder aus einem "IpHtmlPanel" in ein geöffnetes
Textverarbeitungsprogram (z.B. Word) über die Zwischenablage einzufügen?
Wenn ja, wie?
"IpHtmlPanel.CopyToClipboard" übergibt nur den reinen Text, ohne Formatierung und Bilder.
Für eine Antwort wäre ich Dankbar.
Gruß
ist es möglich einen Text mit seiner Darstellung und Bilder aus einem "IpHtmlPanel" in ein geöffnetes
Textverarbeitungsprogram (z.B. Word) über die Zwischenablage einzufügen?
Wenn ja, wie?
"IpHtmlPanel.CopyToClipboard" übergibt nur den reinen Text, ohne Formatierung und Bilder.
Für eine Antwort wäre ich Dankbar.
Gruß
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: IpHtmlPanel
Für die Bilder müsstest du das testen, Formatierungen bekommst du wenn du das ganze HTML in die Zwischenablage kopierst. Wenn die Bilder auf der Festplatte liegen und die Pfade stimmen könnte das mit den Bildern auch klappen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: IpHtmlPanel
Danke für die Antwort.Christian hat geschrieben:Für die Bilder müsstest du das testen, Formatierungen bekommst du wenn du das ganze HTML in die Zwischenablage kopierst. Wenn die Bilder auf der Festplatte liegen und die Pfade stimmen könnte das mit den Bildern auch klappen.
Zusätlich habe ich das gesammte html in einem FileStream, aber wie bekomme ich den dieses in das Clipboard?
Mit "IpHtmlPanel.SelectAll" wird zwar alles markiert, doch wahrscheilicht nicht das gesammte html.
"IpHtmlPanel.CopyToClipboard" überträgt dann das markierte.
Mit "IpHtmlPanel.SetHtmlFromFile('....') wird ein gesammtes html geschrieben.
Wie bekomme ich denn nun alles ins Clipboard? Ich finde einfach keine Möglichkeit das gesammte zu übergeben.
Gruß
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: IpHtmlPanel
Code: Alles auswählen
aFormat := Clipboard.FindFormatID('text/html');
if Clipboard.FindFormatID('text/html') = 0 then
aFormat := RegisterClipboardFormat('text/html');
Clipboard.AddFormat(aFormat,aMStream);
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: IpHtmlPanel
Vielen Dank,
Der Stream aMStream(Type TMemoryStream) wird nicht übertragen.
Bei aMStream.SaveToFile('testen.htm') wird die htm Datei mit Inhalt erzeugt;
gruß
Leider funktioniert es nicht.Christian hat geschrieben:Code: Alles auswählen
aFormat := Clipboard.FindFormatID('text/html'); if Clipboard.FindFormatID('text/html') = 0 then aFormat := RegisterClipboardFormat('text/html'); Clipboard.AddFormat(aFormat,aMStream);
Der Stream aMStream(Type TMemoryStream) wird nicht übertragen.
Bei aMStream.SaveToFile('testen.htm') wird die htm Datei mit Inhalt erzeugt;
gruß
Re: IpHtmlPanel
Bei mir geht das:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var aSStream:TStringStream;
aFormat:TClipBoardFormat;
begin
aSStream:=TStringStream.Create('<html>aha <i> aha </i> aja</html>');
aSStream.Position:=0;
aFormat := Clipboard.FindFormatID('text/html');
if Clipboard.FindFormatID('text/html') = 0 then
aFormat := RegisterClipboardFormat('text/html');
Clipboard.AddFormat(aFormat,aSStream);
aSStream.free;
end;
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: IpHtmlPanel
Hallo,theo hat geschrieben:Bei mir geht das:
ja wahrscheinlich weil bei dem Beispiel aSStream ein TStringStream ist.
Ich habe da meine Schwierigkeit meinen TMemoryStream umzuwandeln.
Gruß
Re: IpHtmlPanel
@hbr: unter welchem System versuchst Du das?
Unter Win7 funktioniert das mir so nicht (Lazarus1.3 und 1.2.4 gleiches Verhalten). z.B:liefert einen leeren Inhalt, siehe Bild unten. Verwende ich statt 'text/html' -> 'text/plain' wird der Text übergeben, aber selbst da ist das letzte Zeichen nicht mit dabei. Funktionieren tutaber halt nur als String und nicht html. Diese Verhalten ist mMn nicht gewünscht und sollte als Bug gemeldet werden!
Generell: Was ist das letztendliche Ziel, evtl. gibt es ja noch andere Möglichkeiten?!
Unter Win7 funktioniert das mir so nicht (Lazarus1.3 und 1.2.4 gleiches Verhalten). z.B:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var
aSStream: TStringStream;
aFormat: TClipBoardFormat;
begin
aSStream:=TStringStream.Create('<html>aha <i> aha </i> aja</html>');
aSStream.Position:=0;
// aFormat:=ClipBoard.FindFormatID('text/plain');
// if ClipBoard.FindFormatID('text/plain') = 0 then
// aFormat:=RegisterClipBoardFormat('text/plain');
aFormat:=ClipBoard.FindFormatID('text/html');
if ClipBoard.FindFormatID('text/html') = 0 then
aFormat:=RegisterClipBoardFormat('text/html');
ClipBoard.AddFormat(aFormat, aSStream);
aSStream.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
s: String;
begin
s:='';
for i:=0 to ClipBoard.FormatCount-1 do
s:=s + ClipBoardFormatToMimeType(ClipBoard.Formats[i]) + LineEnding;
s:=s + LineEnding;
s:=s + ClipBoard.AsText;
ShowMessage(s);
end;
Code: Alles auswählen
ClipBoard.AsText:=aSStream.DataString;
Generell: Was ist das letztendliche Ziel, evtl. gibt es ja noch andere Möglichkeiten?!
- Dateianhänge
-
- ClipBoard.png (1.7 KiB) 1941 mal betrachtet
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: IpHtmlPanel
Folgendes,
ich habe das ganze mal mit 'TMemoryStream' versucht was ja eigentlich auch funktionieren müsste.
als Kontrolle ob etwas in aMStream steckt, habe ich es zusätzlich in ein File gespeichert.
In der Zwischenablage befindet sich nichts.
Nach Ausführung (Button), wird Word gestartet und es ist nichts vorhanden.
Nun möchte ich den Inhalt so wie er ist in eine Textverarbeitung übergeben.
Also über die Zwischenablage.
Nun gelingt es mir nicht den html- Text aus dem IpHtmlPanel komplett in die Zwischenablage zu übergeben sodass ich ihn z.B in word einfügen kann.
Lazarus v1.2.0
Zusatz:
Ja das wars, 'text/plain'
jetzt habe ich zwar den HTML Text aber nicht die Textformatierungen wie Christian meint.
Ich habe das ganze mal mit rtf versucht, wenn ich rtf-Code in Word oder SWriter reinziehe, dann wird diese dargestellt.
aber dafür breäuchte ich eine rtf-Datei und das sieht ja bei Lazarus gan böse aus, wegen RichEdit.
Welche Möglichkeiten habe ich Sonst?
ich habe das ganze mal mit 'TMemoryStream' versucht was ja eigentlich auch funktionieren müsste.
Code: Alles auswählen
procedure TInfos.Button1Click(Sender: TObject);
var //aMStream: TMemoryStream; --- ist Global und wird an anderer Stelle gefüllt
aFormat:TClipBoardFormat;
begin
aMStream.Position:=0;
aFormat := Clipboard.FindFormatID('text/html');
if Clipboard.FindFormatID('text/html') = 0 then
aFormat := RegisterClipboardFormat('text/html');
Clipboard.AddFormat(aFormat,aMStream);
aMStream.SaveToFile('d:\testen.htm');
aMStream.free;
end;
In der Zwischenablage befindet sich nichts.
Nach Ausführung (Button), wird Word gestartet und es ist nichts vorhanden.
Also generell stelle ich Html-Text in einem IpHtmlPanel dar.Michl hat geschrieben: Generell: Was ist das letztendliche Ziel, evtl. gibt es ja noch andere Möglichkeiten?!
Nun möchte ich den Inhalt so wie er ist in eine Textverarbeitung übergeben.
Also über die Zwischenablage.
Nun gelingt es mir nicht den html- Text aus dem IpHtmlPanel komplett in die Zwischenablage zu übergeben sodass ich ihn z.B in word einfügen kann.
Lazarus v1.2.0
Zusatz:
Ja das wars, 'text/plain'
jetzt habe ich zwar den HTML Text aber nicht die Textformatierungen wie Christian meint.
Ich habe das ganze mal mit rtf versucht, wenn ich rtf-Code in Word oder SWriter reinziehe, dann wird diese dargestellt.
aber dafür breäuchte ich eine rtf-Datei und das sieht ja bei Lazarus gan böse aus, wegen RichEdit.
Welche Möglichkeiten habe ich Sonst?
Zuletzt geändert von hbr am Mi 13. Aug 2014, 15:03, insgesamt 1-mal geändert.
Re: IpHtmlPanel
Auch dein Bsp. funktioniert bei mir leicht abgeändert.Michl hat geschrieben: Unter Win7 funktioniert das mir so nicht
Getestet unter GTK/Linux und Win64/Wine
Code: Alles auswählen
var
Form1: TForm1;
aFormat: TClipBoardFormat;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
aSStream: TStringStream;
begin
aSStream:=TStringStream.Create('<html>aha <i> aha </i> aja</html>');
aSStream.Position:=0;
aFormat:=ClipBoard.FindFormatID('text/html');
if ClipBoard.FindFormatID('text/html') = 0 then
aFormat:=RegisterClipBoardFormat('text/html');
ClipBoard.AddFormat(aFormat, aSStream);
aSStream.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
aSStream: TStringStream;
var
i: Integer;
s: String;
begin
aSStream:=TStringStream.Create('');
s:='';
for i:=0 to ClipBoard.FormatCount-1 do
s:=s + ClipBoardFormatToMimeType(ClipBoard.Formats[i]) + LineEnding;
s:=s + LineEnding;
ClipBoard.GetFormat(aFormat,aSStream);
s:=s +aSStream.DataString;
ShowMessage(s);
aSStream.free;
end;
Zuletzt geändert von theo am Mi 13. Aug 2014, 15:15, insgesamt 1-mal geändert.
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: IpHtmlPanel
Danke, aber
Sorry, ich arbeite mit einem 'TMemoryStream'
welches 2-3 Seiten HTM-Code beinhaltet.
Versucht habe ich es immer mit einem gefüllten TMemoryStream.
Und wenn ich wie Michl berichtet 'text/plain' verwende,
dann geht das auch bei mir mit meinem 'TMemoryStream'.
Nur halt als reiner Text ohne die Vormatierungen.
Ansonsten bleibt es leer.
Ich komme also so nicht weiter.
Gruß
Sorry, ich arbeite mit einem 'TMemoryStream'
welches 2-3 Seiten HTM-Code beinhaltet.
Versucht habe ich es immer mit einem gefüllten TMemoryStream.
Und wenn ich wie Michl berichtet 'text/plain' verwende,
dann geht das auch bei mir mit meinem 'TMemoryStream'.
Nur halt als reiner Text ohne die Vormatierungen.
Ansonsten bleibt es leer.
Ich komme also so nicht weiter.
Gruß
Re: IpHtmlPanel
hbr hat geschrieben:Danke, aber
Sorry, ich arbeite mit einem 'TMemoryStream'
welches 2-3 Seiten HTM-Code beinhaltet.
Na und? Das ist doch völlig wumpe, nur umständlicher.
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
const Dta='<html>aha <i> aha </i> aga</html>';
var
aMStream: TMemoryStream;
begin
aMStream:=TMemoryStream.Create;
aMStream.Write(Dta,Length(Dta));
aMStream.Position:=0;
aFormat:=ClipBoard.FindFormatID('text/html');
if ClipBoard.FindFormatID('text/html') = 0 then
aFormat:=RegisterClipBoardFormat('text/html');
ClipBoard.AddFormat(aFormat, aMStream);
aMStream.Free;
end;
Re: IpHtmlPanel
@theo: Das von Dir geänderte Bsp. liefert den Html-Code zurück. D.h. er wurde ins ClipBoard kopiert (inkl. HTML-Tags). Beim debuggen wird 'text/html' gefunden, sollte ja auch gültig sein! Jetzt ist bei mir ebenfalls das Problem, dass sich dieser Inhalt nirgends einfügen lässt, weder in einem OpenOfficeDokument oder sonstwo. Wenn ich aus FireFox einen Text mit/ohne Bilder kopiere, wird unter Button2 der Text ordentlich im Memo dargestellt, die HTML-Tag nicht - so wie es sein sollte! Irgendwas läuft unter Win7 hier schief!
Edit: Vermutung: Wenn ich mir den ClipBoard-Inhalt einer vom Browser kopierten Seite anschaue, werden HTML-Tags, Objekte etc. jeweils mit einer FormatID versehen. Einträge, wie Text, werden entsprechend gekennzeichnet. Übergebe ich den kompletten HtmlCode als 'text/html' wird dieser wahrscheinlich nicht geparst nach HTML-Tags und Text, somit gibt es für ein Textprogramm auch nichts zum einfügen?!
Edit: Vermutung: Wenn ich mir den ClipBoard-Inhalt einer vom Browser kopierten Seite anschaue, werden HTML-Tags, Objekte etc. jeweils mit einer FormatID versehen. Einträge, wie Text, werden entsprechend gekennzeichnet. Übergebe ich den kompletten HtmlCode als 'text/html' wird dieser wahrscheinlich nicht geparst nach HTML-Tags und Text, somit gibt es für ein Textprogramm auch nichts zum einfügen?!
Ich hatte in den letzten Tagen WACEF und fpCEF3 getestet da ging Copy/Paste problemlos -> ist aber für Deine Aufgabe evtl. mit Kanonen auf Spatzen geschossen?!hbr hat geschrieben:Welche Möglichkeiten habe ich Sonst?
Zuletzt geändert von Michl am Mi 13. Aug 2014, 15:36, insgesamt 1-mal geändert.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: IpHtmlPanel
Unter Linux geht's wie oben geschrieben. Mit Libreoffice und Caligra Words getestet.Michl hat geschrieben:Jetzt ist bei mir ebenfalls das Problem, dass sich dieser Inhalt nirgends einfügen lässt, weder in einem OpenOfficeDokument oder sonstwo.
Re: IpHtmlPanel
Hatte eben noch eine Vermutung zuvor hineineditiert...
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;