create a new page, using OOoBasic/Generic/Clipboard as a template.
Front page
Search
掲示板
Reload
Help
Browse Log
掲示板の使い方
OOo 掲示板3
OOo 掲示板2
OOo 掲示板
掲示板
雑談掲示板
New
List of pages
Recent changes
Backup
簡単ヘルプ
整形ルール
Start:
*クリップボード [#la16025e]
コピー、ペースト関連。
#contents
mime-type は Iana に登録されているもの http://www.iana.or...
**システムクリップボード [#yb999369]
***内容の変更 [#jb106149]
デスクトップ環境のクリップボードの内容を変更します。
クリップボードの要求に対して返す com.sun.star.datatransfe...
コードのあるライブラリのあるドキュメントを閉じるとクリッ...
#code(ob){{
Global sTxtCString As String
Sub clipboard_1
sText = "123456"
CopyToClipBoard(sText)
End Sub
Sub CopyToClipBoard( sText )
' create SystemClipboard instance
oClip = CreateUnoService( _
"com.sun.star.datatransfer.clipboard.SystemClipboar...
oTR = createUnoListener("Tr_", _
"com.sun.star.datatransfer.XTransferable")
' set data
oClip.setContents(oTR,Null)
sTxtCString = sText
'oClip.flushClipboard() ' does not work
End Sub
Function Tr_getTransferData( _
aFlavor as com.sun.star.datatransfer.DataFlavor)
If (aFlavor.MimeType = "text/plain;charset=utf-16") Then
Tr_getTransferData() = sTxtCString
End If
End Function
Function Tr_getTransferDataFlavors()
Dim aFlavor As new com.sun.star.datatransfer.DataFlavor
aFlavor.MimeType = "text/plain;charset=utf-16"
aFlavor.HumanPresentableName = "Unicode-Text"
Tr_getTransferDataFlavors() = array(aFlavor)
End Function
Function Tr_isDataFlavorSupported( _
aFlavor as com.sun.star.datatransfer.DataFlavor) as B...
If aFlavor.MimeType = "text/plain;charset=utf-16" Then
Tr_isDataFlavorSupported = true
Else
Tr_isDataFlavorSupported = false
End If
End Function
}}
***内容の取得 [#c57b688d]
システムクリップボード内の内容を取得します。内容の種類を...
#code(ob){{
Sub clipboard_2
oClip = CreateUnoService( _
"com.sun.star.datatransfer.clipboard.SystemClipboar...
oTransfer = oClip.getContents()
' sequence of com.sun.star.datatransfer.DataFlavor
aDataFlavors = oTransfer.getTransferDataFlavors()
bType = False
For i = 0 To UBound(aDataFlavors) Step 1
aDataFlavor = aDataFlavors(i)
If aDataFlavor.MimeType = "text/plain;charset=utf-16"...
bType = True
Exit For
End If
Next
If bType Then
' convert utf-16 to UNO string
oConverter = CreateUnoService( _
"com.sun.star.script.Converter")
sData = oConverter.convertToSimpleType( _
oTransfer.getTransferData(aDataFlavor), _
com.sun.star.uno.TypeClass.STRING)
msgbox sData
End If
End Sub
}}
**ドキュメント [#h7e681f8]
ドキュメントのみのデータ取り扱いがあります。ドキュメント...
効果は一度のみでシステムクリップボードなどには関与しませ...
#code(ob){{
Global sTxtCString As String
Sub clipboard_3
sText = "abc..."
CopyToClipBoard(sText)
End Sub
Sub CopyToClipBoard( sText )
oTR = createUnoListener("Tr_", _
"com.sun.star.datatransfer.XTransferable")
ThisComponent.getCurrentController().insertTransferable...
sTxtCString = sText
End Sub
Function Tr_getTransferData( _
aFlavor as com.sun.star.datatransfer.DataFlavor)
If (aFlavor.MimeType = "text/plain;charset=utf-16") Then
Tr_getTransferData() = sTxtCString
End If
End Function
Function Tr_getTransferDataFlavors()
Dim aFlavor As new com.sun.star.datatransfer.DataFlavor
aFlavor.MimeType = "text/plain;charset=utf-16"
aFlavor.HumanPresentableName = "Unicode-Text"
Tr_getTransferDataFlavors() = array(aFlavor)
End Function
Function Tr_isDataFlavorSupported( _
aFlavor as com.sun.star.datatransfer.DataFlavor) as B...
If aFlavor.MimeType = "text/plain;charset=utf-16" Then
Tr_isDataFlavorSupported = true
Else
Tr_isDataFlavorSupported = false
End If
End Function
}}
**クリップボードの内容 [#fd67b02c]
OpenOffice.org 上でコピーを実行した後のクリップボードの内...
特に、MimeType が application/x-openoffice-embed-source-x...
このクリップボードの内容を取得、保存してやるとドキュメン...
注: 以下のコードは Python-UNO で書かれています。
#code(python){{
import uno
from com.sun.star.ui.dialogs.ExecutableDialogResults impo...
from com.sun.star.ui.dialogs.TemplateDescription import \
FILESAVE_SIMPLE as TD_FILESAVE_SIMPLE
def saveclip():
ctx = XSCRIPTCONTEXT.getComponentContext()
smgr = ctx.ServiceManager
desktop = smgr.createInstanceWithContext(
"com.sun.star.frame.Desktop",ctx)
# create SystemClipboard service
sc = smgr.createInstanceWithContext(
"com.sun.star.datatransfer.clipboard.SystemClipboard",c...
contents = sc.getContents()
if not contents:
message(ctx,"Clipboard is empty.")
tf = u'application/x-openoffice-embed-source-xml;windows...
flavors = contents.getTransferDataFlavors()
for f in flavors:
if f.MimeType == tf:
if contents.isDataFlavorSupported(f):
data = contents.getTransferData(f)
#byte_data = data.value
url = get_fileurl(ctx,smgr)
if url:
sfa = smgr.createInstanceWithContext(
"com.sun.star.ucb.SimpleFileAccess",ctx)
out = sfa.openFileWrite(url)
out.writeBytes(data)
out.flush()
out.closeOutput()
return
message(ctx,"This kind of the clipboard content is not s...
def get_fileurl(ctx,smgr):
ooofilepicker = smgr.createInstanceWithContext(
"com.sun.star.ui.dialogs.FilePicker",ctx)
ooofilepicker.initialize((TD_FILESAVE_SIMPLE,))
ooofilepicker.setMultiSelectionMode(False)
ooofilepicker.appendFilter("All Files (*.*)","*.*")
ooofilepicker.setCurrentFilter("All Files (*.*)")
filepath = ""
if ooofilepicker.execute() == EDR_OK:
filepaths = ooofilepicker.getFiles()
filepath = filepaths[0]
return filepath
else:
return False
# needs OOo 2.2 or later
def message(ctx,msg="",title=""):
desktop = ctx.ServiceManager.createInstanceWithContext(
"com.sun.star.frame.Desktop",ctx)
frame = desktop.getCurrentFrame()
win = frame.getContainerWindow()
toolkit = win.getToolkit()
rect = uno.createUnoStruct("com.sun.star.awt.Rectangle")
msgbox = toolkit.createMessageBox(
win,rect,"messbox",1,title,msg)
msgbox.execute()
g_exportedScripts = saveclip,
}}
End:
*クリップボード [#la16025e]
コピー、ペースト関連。
#contents
mime-type は Iana に登録されているもの http://www.iana.or...
**システムクリップボード [#yb999369]
***内容の変更 [#jb106149]
デスクトップ環境のクリップボードの内容を変更します。
クリップボードの要求に対して返す com.sun.star.datatransfe...
コードのあるライブラリのあるドキュメントを閉じるとクリッ...
#code(ob){{
Global sTxtCString As String
Sub clipboard_1
sText = "123456"
CopyToClipBoard(sText)
End Sub
Sub CopyToClipBoard( sText )
' create SystemClipboard instance
oClip = CreateUnoService( _
"com.sun.star.datatransfer.clipboard.SystemClipboar...
oTR = createUnoListener("Tr_", _
"com.sun.star.datatransfer.XTransferable")
' set data
oClip.setContents(oTR,Null)
sTxtCString = sText
'oClip.flushClipboard() ' does not work
End Sub
Function Tr_getTransferData( _
aFlavor as com.sun.star.datatransfer.DataFlavor)
If (aFlavor.MimeType = "text/plain;charset=utf-16") Then
Tr_getTransferData() = sTxtCString
End If
End Function
Function Tr_getTransferDataFlavors()
Dim aFlavor As new com.sun.star.datatransfer.DataFlavor
aFlavor.MimeType = "text/plain;charset=utf-16"
aFlavor.HumanPresentableName = "Unicode-Text"
Tr_getTransferDataFlavors() = array(aFlavor)
End Function
Function Tr_isDataFlavorSupported( _
aFlavor as com.sun.star.datatransfer.DataFlavor) as B...
If aFlavor.MimeType = "text/plain;charset=utf-16" Then
Tr_isDataFlavorSupported = true
Else
Tr_isDataFlavorSupported = false
End If
End Function
}}
***内容の取得 [#c57b688d]
システムクリップボード内の内容を取得します。内容の種類を...
#code(ob){{
Sub clipboard_2
oClip = CreateUnoService( _
"com.sun.star.datatransfer.clipboard.SystemClipboar...
oTransfer = oClip.getContents()
' sequence of com.sun.star.datatransfer.DataFlavor
aDataFlavors = oTransfer.getTransferDataFlavors()
bType = False
For i = 0 To UBound(aDataFlavors) Step 1
aDataFlavor = aDataFlavors(i)
If aDataFlavor.MimeType = "text/plain;charset=utf-16"...
bType = True
Exit For
End If
Next
If bType Then
' convert utf-16 to UNO string
oConverter = CreateUnoService( _
"com.sun.star.script.Converter")
sData = oConverter.convertToSimpleType( _
oTransfer.getTransferData(aDataFlavor), _
com.sun.star.uno.TypeClass.STRING)
msgbox sData
End If
End Sub
}}
**ドキュメント [#h7e681f8]
ドキュメントのみのデータ取り扱いがあります。ドキュメント...
効果は一度のみでシステムクリップボードなどには関与しませ...
#code(ob){{
Global sTxtCString As String
Sub clipboard_3
sText = "abc..."
CopyToClipBoard(sText)
End Sub
Sub CopyToClipBoard( sText )
oTR = createUnoListener("Tr_", _
"com.sun.star.datatransfer.XTransferable")
ThisComponent.getCurrentController().insertTransferable...
sTxtCString = sText
End Sub
Function Tr_getTransferData( _
aFlavor as com.sun.star.datatransfer.DataFlavor)
If (aFlavor.MimeType = "text/plain;charset=utf-16") Then
Tr_getTransferData() = sTxtCString
End If
End Function
Function Tr_getTransferDataFlavors()
Dim aFlavor As new com.sun.star.datatransfer.DataFlavor
aFlavor.MimeType = "text/plain;charset=utf-16"
aFlavor.HumanPresentableName = "Unicode-Text"
Tr_getTransferDataFlavors() = array(aFlavor)
End Function
Function Tr_isDataFlavorSupported( _
aFlavor as com.sun.star.datatransfer.DataFlavor) as B...
If aFlavor.MimeType = "text/plain;charset=utf-16" Then
Tr_isDataFlavorSupported = true
Else
Tr_isDataFlavorSupported = false
End If
End Function
}}
**クリップボードの内容 [#fd67b02c]
OpenOffice.org 上でコピーを実行した後のクリップボードの内...
特に、MimeType が application/x-openoffice-embed-source-x...
このクリップボードの内容を取得、保存してやるとドキュメン...
注: 以下のコードは Python-UNO で書かれています。
#code(python){{
import uno
from com.sun.star.ui.dialogs.ExecutableDialogResults impo...
from com.sun.star.ui.dialogs.TemplateDescription import \
FILESAVE_SIMPLE as TD_FILESAVE_SIMPLE
def saveclip():
ctx = XSCRIPTCONTEXT.getComponentContext()
smgr = ctx.ServiceManager
desktop = smgr.createInstanceWithContext(
"com.sun.star.frame.Desktop",ctx)
# create SystemClipboard service
sc = smgr.createInstanceWithContext(
"com.sun.star.datatransfer.clipboard.SystemClipboard",c...
contents = sc.getContents()
if not contents:
message(ctx,"Clipboard is empty.")
tf = u'application/x-openoffice-embed-source-xml;windows...
flavors = contents.getTransferDataFlavors()
for f in flavors:
if f.MimeType == tf:
if contents.isDataFlavorSupported(f):
data = contents.getTransferData(f)
#byte_data = data.value
url = get_fileurl(ctx,smgr)
if url:
sfa = smgr.createInstanceWithContext(
"com.sun.star.ucb.SimpleFileAccess",ctx)
out = sfa.openFileWrite(url)
out.writeBytes(data)
out.flush()
out.closeOutput()
return
message(ctx,"This kind of the clipboard content is not s...
def get_fileurl(ctx,smgr):
ooofilepicker = smgr.createInstanceWithContext(
"com.sun.star.ui.dialogs.FilePicker",ctx)
ooofilepicker.initialize((TD_FILESAVE_SIMPLE,))
ooofilepicker.setMultiSelectionMode(False)
ooofilepicker.appendFilter("All Files (*.*)","*.*")
ooofilepicker.setCurrentFilter("All Files (*.*)")
filepath = ""
if ooofilepicker.execute() == EDR_OK:
filepaths = ooofilepicker.getFiles()
filepath = filepaths[0]
return filepath
else:
return False
# needs OOo 2.2 or later
def message(ctx,msg="",title=""):
desktop = ctx.ServiceManager.createInstanceWithContext(
"com.sun.star.frame.Desktop",ctx)
frame = desktop.getCurrentFrame()
win = frame.getContainerWindow()
toolkit = win.getToolkit()
rect = uno.createUnoStruct("com.sun.star.awt.Rectangle")
msgbox = toolkit.createMessageBox(
win,rect,"messbox",1,title,msg)
msgbox.execute()
g_exportedScripts = saveclip,
}}
Page: