ab.com コミュニティ https://www.activebasic.com/forum/ |
|
クリップボード操作関数 https://www.activebasic.com/forum/viewtopic.php?t=1145 |
ページ 1 / 1 |
作成者: | みどるべあ [ 2006年6月10日(土) 18:33 ] |
記事の件名: | クリップボード操作関数 |
既出だったら申し訳ない… 仕様 ClipTextSave ・pBuffer 保存するバッファのアドレス ・戻り値 成功なら1、失敗なら0 ClipTextOpen ・戻り値 取得した文字列へのアドレス 使ったあとは必ずfreeしてください ClipTextSave [ここをクリックすると内容が表示されます] コード: Function ClipTextSave(ByVal pBuffer As BytePtr) As Long Dim hGlobal As HGLOBAL ClipTextSave=0 hGlobal=GlobalAlloc(GHND,lstrlen(pBuffer)+1) lstrcpy(GlobalLock(hGlobal),pBuffer) GlobalUnlock(hGlobal) If OpenClipboard(0)=0 Then GlobalFree(hGlobal):ExitFunction EmptyClipboard() SetClipboardData(CF_TEXT,hGlobal) CloseClipboard() ClipTextSave=1 End Function ClipTextOpen [ここをクリックすると内容が表示されます] コード: Function ClipTextOpen() As BytePtr Dim hGlobal As HGLOBAL Dim pBuffer As BytePtr ClipTextOpen=0 If OpenClipboard(0)=0 Then ExitFunction hGlobal=GetClipboardData(CF_TEXT) If hGlobal=0 Then ExitFunction pBuffer=calloc(GlobalSize(hGlobal)) lstrcpy(pBuffer,GlobalLock(hGlobal)) GlobalUnlock(hGlobal) CloseClipboard() ClipTextOpen=pBuffer End Function 使用例 [ここをクリックすると内容が表示されます]
取得と修得を間違えていたorz
コード: Dim pBuf As BytePtr pBuf=ClipTextOpen() MessageBox(0,pBuf,"",0) ClipTextSave(Ex"テストな文字列\r\n改行とかは「\\r\\n」でできます。") pBuf=ClipTextOpen() MessageBox(0,pBuf,"",0) free(pBuf) |
作成者: | 淡幻星 [ 2006年6月10日(土) 19:02 ] |
記事の件名: | Re: クリップボード操作関数 |
重箱の隅を突くようで申し訳ないですが、 ClipTextOpen() でfree() を必須にするよりは、 ユーザーが確保したバッファを渡して書き込むか、 もしくはString型を返す方が良いと思います。 人によっては(私とか)、calloc() じゃなくてHeapAlloc() を 使いたいときもあるので。 あと、これも個人的好き嫌いの問題かも知れませんが、 calloc() +free() は対にして使いたいので、 関数の中で確保したバッファを返されるのは嬉しくなかったり・・・。 なお、参考までに。 http://www.activebasic.com/forum/viewtopic.php?t=54 http://www.activebasic.com/forum/viewtopic.php?t=214 でも、まったく同じコードで無い限り、既出でも良いと思います。 それだけユーザーの選択の幅が広がるので。 |
作成者: | みどるべあ [ 2006年6月11日(日) 12:27 ] |
記事の件名: | |
とりあえず、Stringを返すのとNULLを指定すると文字数を返すのを作りました。 Longで文字数を返すCilpTextOpen [ここをクリックすると内容が表示されます] コード: Function ClipTextOpen(ByVal pBuffer As BytePtr) As Long Dim hGlobal As HGLOBAL ClipTextOpen=-2 If OpenClipboard(0)=0 Then ExitFunction hGlobal=GetClipboardData(CF_TEXT) If hGlobal=0 Then ClipTextOpen=0:ExitFunction If pBuffer Then lstrcpy(pBuffer,GlobalLock(hGlobal)) GlobalUnlock(hGlobal) ClipTextOpen=-1 Else ClipTextOpen=GlobalSize(hGlobal) End If CloseClipboard() End Function戻り値 ・-2 あかなかった ・-1 あいて、pBufferに入れた ・0 クリップボードが空っぽ ・1以上 クリップの中身サイズ Stringで返すCilpTextOpen$ [ここをクリックすると内容が表示されます]
コード: Function ClipTextOpen$() As String Dim Buffer$ As String Dim hGlobal As HGLOBAL If OpenClipboard(0)=0 Then ExitFunction hGlobal=GetClipboardData(CF_TEXT) If hGlobal=0 Then ExitFunction Buffer$=MakeStr(GlobalLock(hGlobal)) GlobalUnlock(hGlobal) CloseClipboard() ClipTextOpen$=Buffer$ End Function |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |