Open "1.txt" For Input As 1
Input #1,date
Close 1
OpenClipboard(0)
Declare Function EmptyClipboard Lib "user32" ( ) As Long
SetClipboardData(CF_DSPTEXT,date)
CloseClipboard()
で、クリップボードにtxtの文字列をコピーしたいのですが、
Dim date As BytePtr としても失敗してしまいます。
dateはどのような変数定義にすればいいのですか。
txtの文字をクリップボードに
ファイル系Input文を使う時は、String型にしないといけなかった気がします。
String型→BytePtr型の変換にはStrPtr関数が使えます。
date:日付
data:データ、資料
ところで、EmptyClipboard関数が、定義されてるだけで使われていないように見えるんですが・・・?
String型→BytePtr型の変換にはStrPtr関数が使えます。
date:日付
data:データ、資料
ところで、EmptyClipboard関数が、定義されてるだけで使われていないように見えるんですが・・・?
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
適当にググったら(Cですが)コードが出てきた。
ABに移植するとこんな感じ
http://nienie.com/~masapico/api_SetClipboardData.html
ABに移植するとこんな感じ
コード: 全て選択
Dim data As String
Dim lpText As BytePtr,hText As HGLOBAL
Open "1.txt" For Input As 1
Input #1,data
Close 1
hText=GlobalAlloc(GMEM_DDESHARE Or GMEM_MOVEABLE,Len(data)+1)
lpText=GlobalLock(hText)
lstrcpy(lpText,StrPtr(data))
GlobalUnlock(hText)
OpenClipboard(0)
EmptyClipboard()
SetClipboardData(CF_TEXT,hText)
CloseClipboard()
GlobalFree(hText)
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
失礼します。
クリップボードに取り付けする作業を2回やりたいのですが、
Open "2.txt" For Input As 1
Input #1,data
Close 1
hText=GlobalAlloc(GMEM_DDESHARE Or GMEM_MOVEABLE,Len(data)+1)
lpText=GlobalLock(hText)
lstrcpy(lpText,StrPtr(data))
GlobalUnlock(hText)
OpenClipboard(0)
EmptyClipboard()
SetClipboardData(CF_TEXT,hText)
CloseClipboard()
GlobalFree(hText)
とkonisiさんのコードに付け加えても、2回目がうまく取り付けできません。
どこがいけないのですか。
クリップボードに取り付けする作業を2回やりたいのですが、
Open "2.txt" For Input As 1
Input #1,data
Close 1
hText=GlobalAlloc(GMEM_DDESHARE Or GMEM_MOVEABLE,Len(data)+1)
lpText=GlobalLock(hText)
lstrcpy(lpText,StrPtr(data))
GlobalUnlock(hText)
OpenClipboard(0)
EmptyClipboard()
SetClipboardData(CF_TEXT,hText)
CloseClipboard()
GlobalFree(hText)
とkonisiさんのコードに付け加えても、2回目がうまく取り付けできません。
どこがいけないのですか。
このへんがかなり気になったので調べてみました。イグトランス さんが書きました:SetClipborardDataしたものはGlobalFreeをする必要がない,というよりしてはなりません。
SetClipboardData (日本語)
日本語版では「CloseClipboard() するまではメモリを解放してはいけない」となっていて、見方を変えると「CloseClipboard() したらメモリを解放してもよい(すべき?)」てな感じに受け取れます。アプリケーションはデータを読み取れますが、CloseClipboard 関数を呼び出すまでは、そのハンドルを解放することや、ロックし続けることを避けなければなりません。
SetClipboardData Function (英語)
あれ?なんか言ってること全然違うような・・・The application may not write to or free the data once ownership has been transferred to the system, but it can lock and read from the data until the CloseClipboard function is called.
どちらの情報が正しいのかはこれだけでは判断できないのでサンプルプログラムもあさってみたのですが、困ったことに MS 公式の文書でも、事後に GlobalFree() しているサンプルもあればしていないサンプルもあったり・・・。
結局どちらが正しいのか判断できませんでした。すみません。