Also ich habe es jetzt hinbekommen. Hatte die Lösung eigentlich schon recht lange, habe aber immer eine Unicode Executable erstellt und damit funktioniert es nicht. Und hier bräuchte ich nochmal Hilfe. Erst einmal der Code:
Code: Alles auswählen
gtk_init_(0,0)
; Clipboard Targets
Enumeration
#TARGET_STRING
#TARGET_RTF
EndEnumeration
Global Dim targets.GtkTargetEntry(2)
targets(0)\target=@"STRING"
targets(0)\flags=0
targets(0)\info=#TARGET_STRING
targets(1)\target=@"text/rtf"
targets(1)\flags=0
targets(1)\info=#TARGET_RTF
; Ende Target-Definition
Global n_targets=ArraySize(targets()) ; Anzahl der Targets
Global clipboard=gtk_clipboard_get_(GDK_SELECTION_PRIMARY) ;Clipboard oeffnen
Global rtf.s = "{\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\fswiss\fcharset0 Verdana;}}" ;rtf das kopiert wird
rtf.s + "{\colortbl ;\red255\green102\blue0;\red128\green128\blue128;}"
rtf.s + "\viewkind4\uc1\pard\qc\f0\fs20\par"
rtf.s + "\cf1\ul\b\i\fs28 RTF RTF \cf2\fs20\par"
rtf.s + "\cf0\ulnone\b0\i0\par"
rtf.s + "\cf2 geht fast alles \par"
rtf.s + "\par"
rtf.s + "\cf2 bis auf Umlaute \par"
rtf.s + "\par"
rtf.s + "}"
ProcedureC get_func(clipboard,selection_data,info,user_data) ;rtf ins Clipboard
length=Len(rtf)
Select info
Case #TARGET_STRING
gtk_selection_data_set_text_(selection_data,rtf,length)
Case #TARGET_RTF
gtk_selection_data_set_(selection_data,gdk_atom_intern_("text/rtf", #False),8,rtf,length)
EndSelect
EndProcedure
gtk_clipboard_set_with_data_(clipboard,targets(),n_targets,@get_func(),#Null,#Null) ;hier werden u.a. die Targets uebertragen targets()
; Dummy-Fenster, muss waehrend des Programmtests geoffnet bleiben
OpenWindow(0, 0, 0, 345, 105, "GTK clipboard test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Den Inhalt könnt Ihr z.B. in OpenOffice kopieren oder als Text in einen Editor.
Ein kleines Python-Skript zeigt schön die Targets und den Inhalt:
Code: Alles auswählen
#!/usr/bin/python
import glib, gtk
def test_clipboard():
clipboard = gtk.Clipboard()
targets = clipboard.wait_for_targets()
print "Targets available:", ", ".join(map(str, targets))
for target in targets:
print "Trying '%s'..." % str(target)
contents = clipboard.wait_for_contents(target)
if contents:
print contents.data
def main():
mainloop = glib.MainLoop()
def cb():
test_clipboard()
mainloop.quit()
glib.idle_add(cb)
mainloop.run()
if __name__ == "__main__":
main()
Und hiermit kann man das Problem erkennen. Wenn ich Unicode Executable auswähle, stimmen die Targets nicht mehr, statt "text/rtf" steht nur noch "t" und statt "STRING" nur noch "S". Die Daten sind zwar im Clipboard, aber keine Anwendung kann mit "t" oder "S" etwas anfangen.
Hat jemand eine Idee, wie es mit Unicode klappen könnte?