#include "llmod.as"
#define CF_TEXT 1 ;文字列形式
#define CF_BITMAP 2 ;ビットマップ形式
#module
#deffunc getclipboard val,int
mref hobj,16 ;クリップボードのデータを格納する数値型変数
mref format,1 ;データ形式
mref state,64
prm=0
dllproc "OpenClipboard",prm,1,D_USER ;クリップボードを開く
if dllret@=0 : state=1 : return
dllproc "GetClipboardData",format,1,D_USER ;データ取得
hobj=dllret@
dllproc "CloseClipboard",prm,0,D_USER ;クリップボードを閉じる
if hobj {
state=0
} else {
state=2
}
return
#deffunc setclipboard int,int
mref hobj,0 ;クリップボードにセットするデータ
mref format,1 ;データ形式
mref state,64
prm=0
dllproc "OpenClipboard",prm,1,D_USER ;クリップボードを開く
if dllret@=0 : state=1 : return
dllproc "EmptyClipboard",prm,0,D_USER ;クリップボードの中身を初期化
prm=format,hobj
dllproc "SetClipboardData",prm,2,D_USER ;クリップボードにデータをセット
dllproc "CloseClipboard",prm,0,D_USER ;クリップボードを閉じる
state=0
return
#global
screen 0,200,20
objmode 1,1
objsize 100,20
button "クリップボードへコピー",*set
pos 100,0 : button "クリップボードを取得",*get
stop
*set
dialog "bmp;*.jpg",16
if stat=0 : stop
mref bmscr,67
sdim path,1024 : path=refstr : getptr ppath,path
prm=bmscr.14,ppath,0,0,0,$50
dllproc "LoadImageA",prm,6,D_USER ;ファイルからビットマップオブジェクトを作成
hbmp=dllret
setclipboard hbmp,CF_BITMAP ;ビットマップをクリップボードへ送る
stop
*get
getclipboard hbmp,CF_BITMAP ;クリップボードのビットマップを取得
if stat=1 : dialog "クリップボードを開けませんでした" : stop
if stat=2 : dialog "データ形式がビットマップではありません" : stop
getptr pbitmap,bitmap
prm=hbmp,24,pbitmap
dllproc "GetObjectA",prm,3,D_GDI ;ビットマップ情報を取得
screen 2,bitmap.1,bitmap.2,8
mref bmscr,67
dllproc "CreateCompatibleDC",bmscr.4,1,D_GDI ;メモリデバイスコンテキストを作成
hmemdc=dllret
prm=hmemdc,hbmp
dllproc "SelectObject",prm,2,D_GDI ;ビットマップをデバイスコンテキストに割り当て
prm=bmscr.4,0,0,winx,winy,hmemdc,0,0,$CC0020
dllproc "BitBlt",prm,9,D_GDI ;ウィンドウへコピー
dllproc "DeleteDC",hmemdc,1,D_GDI ;デバイスコンテキストを破棄
redraw ;再描画
stop
|