osapiutils
111 строк · 3.2 Кб
1unit OSAPIClipboardTextTable;
2
3{$mode objfpc}{$H+}
4
5interface
6
7uses Forms, Classes, SysUtils, ShlObj, ClipBrd, Windows, LazUtils;
8
9function CopyTextTableToClipboard(var AArray:Pointer): boolean;
10function CopyTextTableToClipboardLite(var AArray: Pointer): boolean;
11
12implementation
13
14function CopyTextTableToClipboard(var AArray: Pointer): boolean;
15var
16ArrTable : array of array of string;
17ir,ic :integer;
18sHTMLTable,
19sTable,
20sRow :String;
21begin
22Pointer(ArrTable):=AArray;
23
24try
25sTable:='';
26sHTMLTable:='<html>';
27sHTMLTable:=sHTMLTable+#13+'<head>';
28sHTMLTable:=sHTMLTable+#13+'<meta http-equiv=Content-Type content="text/html; charset=utf-8">';
29sHTMLTable:=sHTMLTable+#13+'<meta name=ProgId content=Excel.Sheet>';
30sHTMLTable:=sHTMLTable+#13+'<meta name=Generator content="Jadwiga">';
31//<link id=Main-File rel=Main-File href="file:///C:\Users\Pichugin\AppData\Local\Temp\msohtmlclip1\01\clip.htm">
32//<link rel=File-List href="file:///C:\Users\Pichugin\AppData\Local\Temp\msohtmlclip1\01\clip_filelist.xml">
33sHTMLTable:=sHTMLTable+#13+'<style>';
34sHTMLTable:=sHTMLTable+#13+'.xl65 {border:.5pt solid windowtext;}';
35sHTMLTable:=sHTMLTable+#13+'</style>';
36sHTMLTable:=sHTMLTable+#13+'</head>';
37sHTMLTable:=sHTMLTable+#13+'<body>';
38sHTMLTable:=sHTMLTable+#13+'<table>';
39for ir:=0 to high(ArrTable) do
40begin
41sHTMLTable:=sHTMLTable+'<tr>';
42for ic:=0 to high(ArrTable[ir]) do
43begin
44if ic=0 then
45begin
46sRow:=ArrTable[ir][ic];
47sHTMLTable:=sHTMLTable+'<td class=xl65>'+ArrTable[ir][ic]+'</td>';
48end
49else begin
50sRow:=sRow+#9+ArrTable[ir][ic];
51sHTMLTable:=sHTMLTable+'<td class=xl65>'+ArrTable[ir][ic]+'</td>';
52end;
53end;
54sTable:=sTable+#13+#10+sRow;
55sHTMLTable:=sHTMLTable+'</tr>';
56end;
57sHTMLTable:=sHTMLTable+'</table>';
58sHTMLTable:=sHTMLTable+#13+'</body>';
59sHTMLTable:=sHTMLTable+#13+'</html>';
60
61clipbrd.Clipboard.SetAsHtml(sHTMLTable,sTable);
62Result:=True;
63finally
64Result:=False;
65end;
66
67end;
68
69function CopyTextTableToClipboardLite(var AArray: Pointer): boolean;
70var
71ArrTable : array of array of string;
72ir,ic :integer;
73sHTMLTable,
74sTable,
75sRow :String;
76begin
77Pointer(ArrTable):=AArray;
78
79try
80sTable:='';
81sHTMLTable:='<table>';
82for ir:=0 to high(ArrTable) do
83begin
84sHTMLTable:=sHTMLTable+'<tr>';
85for ic:=0 to high(ArrTable[ir]) do
86begin
87if ic=0 then
88begin
89sRow:=ArrTable[ir][ic];
90sHTMLTable:=sHTMLTable+'<td>'+ArrTable[ir][ic]+'</td>';
91end
92else begin
93sRow:=sRow+#9+ArrTable[ir][ic];
94sHTMLTable:=sHTMLTable+'<td>'+ArrTable[ir][ic]+'</td>';
95end;
96end;
97sTable:=sTable+#13+#10+sRow;
98sHTMLTable:=sHTMLTable+'</tr>';
99end;
100sHTMLTable:=sHTMLTable+'</table>';
101//clipbrd.Clipboard.AsText:=sTable;
102clipbrd.Clipboard.SetAsHtml(sHTMLTable,sTable);
103Result:=True;
104finally
105Result:=False;
106end;
107
108end;
109
110
111end.
112
113