From 333b9070ef7343384e0d8546416b867455287dc6 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Thu, 24 Sep 2015 21:56:19 +0000 Subject: [PATCH] fpspreadsheet: Add 2nd html format for copying to clipboard. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4359 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/fpspreadsheet/fpshtml.pas | 6 ++++-- components/fpspreadsheet/fpspreadsheetctrls.pas | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/components/fpspreadsheet/fpshtml.pas b/components/fpspreadsheet/fpshtml.pas index 0288ca766..73e0b9ffe 100644 --- a/components/fpspreadsheet/fpshtml.pas +++ b/components/fpspreadsheet/fpshtml.pas @@ -1677,15 +1677,17 @@ end; procedure TsHTMLWriter.WriteToClipboardStream(AStream: TStream); begin + {$IFDEF MSWINDOWS} FClipboardMode := true; AppendToStream(AStream, Format( NATIVE_HEADER, [0, 0, 0, 0])); // value will be replaced at end - WriteToStream(AStream); - AStream.Position := 0; AppendToStream(AStream, Format( NATIVE_HEADER, [FStartHTMLPos, FEndHTMLPos, FStartFragmentPos, FEndFragmentPos])); + {$ELSE} + WriteToStream(AStream); + {$ENDIF} end; procedure TsHTMLWriter.WriteToStream(AStream: TStream); diff --git a/components/fpspreadsheet/fpspreadsheetctrls.pas b/components/fpspreadsheet/fpspreadsheetctrls.pas index 32a2da191..63bcf4e40 100644 --- a/components/fpspreadsheet/fpspreadsheetctrls.pas +++ b/components/fpspreadsheet/fpspreadsheetctrls.pas @@ -471,6 +471,7 @@ var cfBiff8Format: Integer = 0; cfBiff5Format: Integer = 0; cfHTMLFormat: Integer = 0; + cfTextHTMLFormat: Integer = 0; cfCSVFormat: Integer = 0; {@@ ---------------------------------------------------------------------------- @@ -1174,6 +1175,10 @@ begin if cfHTMLFormat = 0 then cfHTMLFormat := RegisterClipboardFormat('HTML Format'); + cfTextHTMLFormat := Clipboard.FindFormatID('text/html'); + if cfTextHTMLFormat = 0 then + cfTextHTMLFormat := RegisterClipboardFormat('text/html'); + // dto with CSV clipboard format cfCSVFormat := Clipboard.FindFormatID('CSV'); if cfCSVFormat = 0 then @@ -1189,10 +1194,13 @@ begin // Then write BIFF5 format FWorkbook.CopyToClipboardStream(stream, sfExcel5); Clipboard.AddFormat(cfBiff5Format, stream); + (stream as TMemoryStream).Clear; // Then write HTML format FWorkbook.CopyToClipboardStream(stream, sfHTML); Clipboard.AddFormat(cfHTMLFormat, stream); + Clipboard.AddFormat(cfTextHTMLFormat, stream); + (stream as TMemoryStream).Clear; // Then write CSV format csv := CSVParams; @@ -1201,12 +1209,14 @@ begin CsvParams.SheetIndex := FWorkbook.GetWorksheetIndex(FWorkbook.ActiveWorksheet); FWorkbook.CopyToClipboardStream(stream, sfCSV); Clipboard.AddFormat(cfCSVFormat, stream); + (stream as TMemoryStream).Clear; // Finally write TEXT format CsvParams.Delimiter := #9; FWorkbook.CopyToClipboardStream(stream, sfCSV); Clipboard.AddFormat(CF_TEXT, stream); CSVParams := csv; + (stream as TMemoryStream).Clear; // To do: XML format // I don't know which format is written by xlsx and ods natively.