/
ClipBoard.prg
135 lines (116 loc) · 4.01 KB
/
ClipBoard.prg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//
// Copyright (c) XSharp B.V. All Rights Reserved.
// Licensed under the Apache License, Version 2.0.
// See License.txt in the project root for license information.
//
USING System.Collections.Specialized
/// <include file="Gui.xml" path="doc/Clipboard/*" />
CLASS Clipboard INHERIT VObject
/// <include file="Gui.xml" path="doc/Clipboard.Clear/*" />
METHOD Clear() AS VOID STRICT
System.Windows.Forms.Clipboard.Clear()
RETURN
/// <include file="Gui.xml" path="doc/Clipboard.FileCount/*" />
ACCESS FileCount AS LONG
LOCAL nCount AS LONG
LOCAL aFiles AS StringCollection
IF System.Windows.Forms.Clipboard.ContainsFileDropList()
aFiles := System.Windows.Forms.Clipboard.GetFileDropList()
nCount := aFiles:Count
ENDIF
RETURN nCount
/// <include file="Gui.xml" path="doc/Clipboard.GetItemSize/*" />
METHOD GetItemSize(kFormat AS LONG) AS LONG
LOCAL nSize AS LONG
LOCAL oImage AS System.Drawing.Image
LOCAL oStream AS System.IO.MemoryStream
LOCAL bytes AS BYTE[]
DO CASE
CASE (kFormat == STRINGFORMAT)
IF System.Windows.Forms.Clipboard.ContainsText()
nSize := System.Windows.Forms.Clipboard.GetText():Length
ENDIF
CASE (kFormat == BITMAPFORMAT)
IF System.Windows.Forms.Clipboard.ContainsImage()
oImage := System.Windows.Forms.Clipboard.GetImage()
oStream := System.IO.MemoryStream{}
oImage:Save(oStream,System.Drawing.Imaging.ImageFormat.Bmp)
bytes := oStream:GetBuffer()
nSize := bytes:Length
oStream:Close()
ENDIF
OTHERWISE
nSize := 0
ENDCASE
RETURN nSize
/// <include file="Gui.xml" path="doc/Clipboard.ctor/*" />
CONSTRUCTOR() STRICT
SUPER()
RETURN
/// <include file="Gui.xml" path="doc/Clipboard.Insert/*" />
METHOD Insert(xType AS USUAL) AS LOGIC
LOCAL lOk AS LOGIC
IF IsString(xType)
LOCAL cString AS STRING
cString := xType
IF !STRING.IsNullOrEmpty(cString)
System.Windows.Forms.Clipboard.SetText( cString)
ENDIF
lOk := TRUE
elseif xType is Bitmap var oBitMap
System.Windows.Forms.Clipboard.SetImage( (System.Drawing.Image) oBitMap)
lOk := TRUE
ELSE
WCError{#Insert,#Clipboard,__WCSTypeError,xType,1}:Throw()
lOk := FALSE
ENDIF
RETURN lOk
/// <include file="Gui.xml" path="doc/Clipboard.InsertRTF/*" />
METHOD InsertRTF(cText AS STRING) AS LOGIC
LOCAL lOk AS LOGIC
System.Windows.Forms.Clipboard.SetText((STRING) cText, System.Windows.Forms.TextDataFormat.Rtf)
lOk := TRUE
RETURN lOk
/// <include file="Gui.xml" path="doc/Clipboard.RetrieveBitmap/*" />
METHOD RetrieveBitmap(oBitmap AS Bitmap) as LOGIC
LOCAL lRetVal AS LOGIC
LOCAL oImage AS System.Drawing.Image
IF System.Windows.Forms.Clipboard.ContainsImage()
oImage := System.Windows.Forms.Clipboard.GetImage()
oBitmap:__SetImage(oImage)
lRetVal := TRUE
ENDIF
RETURN lRetVal
/// <include file="Gui.xml" path="doc/Clipboard.RetrieveFiles/*" />
METHOD RetrieveFiles(lMustExist AS LOGIC) AS ARRAY
LOCAL aFiles AS ARRAY
LOCAL aCollection AS StringCollection
aFiles := {}
IF System.Windows.Forms.Clipboard.ContainsFileDropList()
aCollection := System.Windows.Forms.Clipboard.GetFileDropList()
FOREACH IMPLIED s IN aCollection
AADD(aFiles,s)
NEXT
ENDIF
RETURN aFiles
/// <include file="Gui.xml" path="doc/Clipboard.RetrieveRTF/*" />
METHOD RetrieveRTF(nStringLength := -1 AS LONG) AS STRING
LOCAL cRetVal AS STRING
IF System.Windows.Forms.Clipboard.ContainsText(System.Windows.Forms.TextDataFormat.Rtf)
cRetVal := System.Windows.Forms.Clipboard.GetText(System.Windows.Forms.TextDataFormat.Rtf)
IF nStringLength >= 0
cRetVal := cRetVal:Substring(0, nStringLength)
ENDIF
ENDIF
RETURN cRetVal
/// <include file="Gui.xml" path="doc/Clipboard.RetrieveString/*" />
METHOD RetrieveString(nStringLength := -1 AS LONG) AS STRING
LOCAL cRetVal AS STRING
IF System.Windows.Forms.Clipboard.ContainsText()
cRetVal := System.Windows.Forms.Clipboard.GetText(System.Windows.Forms.TextDataFormat.UnicodeText)
IF nStringLength >= 0
cRetVal := cRetVal:Substring(0, nStringLength)
ENDIF
ENDIF
RETURN cRetVal
END CLASS