Clipboard Accsess
BlitzMax Forums/BlitzMax Programming/Clipboard Accsess
| ||
Does anybody know, why this doesn't work ? Const CF_TEXT = 1 Extern "Win32" Function OpenClipboard:Int (hwnd:Int) Function CloseClipboard:Int () Function IsClipboardFormatAvailable:Int (format:Int) Function EmptyClipboard:Int () Function GetClipboardData:String (format:Int) Function SetClipboardData:Int (format:Int,str:String) End Extern Function ClipboardRead:String () Local clip:String OpenClipboard 0 If IsClipboardFormatAvailable (CF_TEXT) clip = GetClipBoardData (CF_TEXT) EndIf CloseClipboard Return clip End Function Graphics 1024,768 txt:String = "" Repeat Cls If KeyDown(Key_LControl) And KeyHit(Key_V) txt = ClipboardRead() DrawText "< "+txt+" >",100,100 Flip FlushMem Until KeyHit(Key_Escape) This is an one to one copy of the Blitz3D-Userlib-version. It always returns an "Unhandled Memory Exception Error"... Need help for this. |
| ||
Extern "Win32" Function OpenClipboard:Int (hwnd:Int) Function CloseClipboard:Int () Function IsClipboardFormatAvailable:Int (format:Int) Function EmptyClipboard:Int () Function GetClipboardData(format:Int) Function SetClipboardData:Int (format:Int,str:String) End Extern Function ClipboardRead:String() Const CF_TEXT = 1 Local clip:String Local cbd:Int If OpenClipboard(0) If IsClipboardFormatAvailable(CF_TEXT) cbd=GetClipBoardData(CF_TEXT) clip=clip.FromCString(Byte Ptr cbd) EndIf CloseClipboard Return clip EndIf End Function Graphics 1024,768,0 Global txt:String = "" Repeat Cls If (KeyDown(Key_LControl) And KeyHit(Key_V)) txt = ClipboardRead() DrawText "< "+txt+" >",100,100 Flip FlushMem Until KeyHit(Key_Escape) |
| ||
Thank you JB, this is great work. Where did you got the "FromCString" from ? Can't find it... |
| ||
Welcome. Have a look in Language Reference > Strings |
| ||
Very usefull ! many thanks. |
| ||
I have try to make a function to put text in clipboard but seem don'"t work ? |
| ||
I have find (thanks Birdie) |
| ||
thanks for sharing d:bug and Filax :) |
| ||
Nothing :) |
| ||
Bump - how do I get a pixmap from an image copied to the clipboard? I know that you have you use CF_BITMAP (2) instead of CF_TEXT, but I get a memory exception error if I try to do anything with the pointer I get back, do I have to do something with GlobalAlloc? Also, some applications can accept pasted "files" (like MSN messenger opens the "send file" dialog if you copy a file icon in Windows Explorer and paste it into a conversation window.) How easy is that to do? I would've thought it's just a string containing the file path, though it isn't stored as CF_TEXT. |
| ||
Mysterious errors, something in filax code seems to be wrong or the cooperation between Blitzmax and MS Windows is the problem: If I write ClipboardWrite("TEST") ONE time in source code then I can use ClipboardRead() as many times as desired. But if I write earlier ClipboardWrite("TEST") (exactly) 4 times (simulating the user copying the text several times into clipboard) and then call ClipboardRead() several times, I got after some times "Unhandled memory exception error" in the line: cbd=GetClipBoardData(CF_TEXT). And now if I use in the beginning ClipboardRead("TEST") 5 (!) times I got "Unhandled memory exception error" in line: DrawText "< "+txt+" >",100,100 even before I press any key, just directly after BM finished compiling ! I am working with BM 1.16 and MS Windows XP Version 5.1 Service Pack 2. |
| ||
This is a very old thread over here. In the meantime there a several new methods for doing this :D Try this one or look over here Extern "Win32" Function OpenClipboard(hwnd:Int) Function CloseClipboard() Function EmptyClipboard() Function SetClipboardData(format:Int,hMem:Byte Ptr) Function GlobalAlloc:Byte Ptr(uflags:Int,bytes:Int) Function GlobalFree(buffer:Byte Ptr ) End Extern ?win32 Const GMEM_FIXED = 0 Const CF_TEXT=$01 Function TextToClipboard (txt:String) If txt <> "" Local CPTR:Byte Ptr = GlobalAlloc(GMEM_FIXED,Len(txt)+1) For Local i = 0 Until Len(txt) CPTR[i] = txt[i] Next CPTR[Len(txt)+1]=0 If OpenClipboard(0) EmptyClipboard() SetClipboardData (CF_TEXT,CPTR) CloseClipboard() EndIf If CPTR Then GlobalFree (CPTR) EndIf End Function ? 'rem TextToClipboard ("HubbaBubba schmeckt scheisse") 'end rem |