クリップボード操作命令

クリップボードとは何かという説明は不要ですね?

コピーした内容を一時的に保存して置くところですね。

クリップボードに入るのは文字列だけでなく画像内の一部だったりファイルそのものだったりと様々です。

HSP(細かくはhspext.dll)ですべてが操作できるわけではなく、操作できるのは、

「クリップボードに文字列転送」「クリップボード内の文字列取得」「クリップボードに画像転送」

上記の3つだけしかできません。ウィンドウ内に画像を貼り付けたりとかは出来ないです。

ファイルの移動・コピーのために転送することも出来ないわけですが、これはbcopyでできますよね…。

3種類しかないので即効でこの章終了してしまいますがご了承ください。

そもそも使い方は直感だけで出来ますのでこの章自体不必要な気がかなりしないでもないのですが…(^^;

まぁhspext.dllを一通り説明するということですので入れてあるだけ、とお考えください。

そもそも使い方は直感だけで出来ますのでこの章自体不必要な気がかなりしないでもないのですが…(^^;

 

まずはclipsetgでクリップボードに画像を転送してみましょう。

#include "hspext.as"
	bgscr 0,480,200,,dispx-480/2,dispy-200/2
	title "画像転送サンプル"
	color 200,100,100 : boxf : color 50,50,200
	font "MS 明朝",30,1
	pos 40,winy-30/2 : mes "このウィンドゥを転送します"
	clipsetg
	end

現在の選択ウィンドウをそのままクリップボードへ転送します。

気づく方がいらっしゃると思いますけどbgscrでやっていますよね?

なぜscreenでやらないのでしょう…?

試していただければわかることですがウィンドウの右端や下端まで完全に入っていないはずです。

私の考えですのでかなり間違っているような気がしますので見るだけにしておいてください(^^;

どうやらスクリーン座標でのウィンドウ左上の位置からウィンドウサイズ分だけを転送するようなのです。

screenだとウィンドウサイズはウィンドウ内だけで枠等は入りません。

bgscrは通常(ID2以上)は枠等はないウィンドウとなります。

bgscrのp1が0だとどういう仕掛け(?)なのかわかりませんが、ウィンドウ右下端まできちんと行ってくれます。

内部で枠等のサイズを足してくれているのかどうかはしりませんがうまくいくようなのです。

	screen 0,,,,100,100
	color 255 : boxf
	bgscr 2,,,,100,100
	color ,255 : boxf : color 255,255,255
	font "MS 明朝",14,1
	pos 100,430 : mes "これが「screen」と「bgscr」との差で「screen」だと描画されなくなる"
	pos 610,430 : mes "→"
	pos 600,455 : mes "↓"
	stop

話を戻しまして、クリップボードに画像を転送すれば「ペイント」とかに貼り付けることが出来ます。

 

続きましてclipsetで文字列をクリップボードに転送したいと思います。

clipsetのパラメータにコピーしたい文字列を指定するだけです。

逆のクリップボードから指定ウィンドウのオブジェクトに貼り付けるclipgetの説明を。

HSP以外のウィンドウでコピーされた文字列でも当然HSPに貼り付けることが出来ます。

半角64文字以上を取得したい場合はp2に取得したいバイト数の上限を入力してください。

取得したサイズがその上限値に満たなくてもエラーにはなりません。

上限値が変数の確保サイズを上回っており、実際に取得してしまうとHSPが落ちてしまうかもしれません。

	screen 0,,,,100,100
	gsel 0,2
	sdim data,16000 ; 大きめに確保
	title "文字列限定クリップボードマネージャ"
	clipset "" ; クリップボードを空にする
	mesbox data,640,480,5
	exec windir+"\\notepad.exe"

*main
	repeat
	 wait 5
	 clipget data,16000
	 if data!="" : break 
	loop
	objprm 0,data
	goto *main

とっても短かったですけどコレで終了いたします。