AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
CAD作ろ! クリップボード
メモ帳やワードパッド、テキストエディタやワープロソフト等には、ある一部の文章を移動したりコピーしたりするのに、その部分を反転させて「切り取り」(カット;[CTRL]+[X])又は「複写」(コピー;[CTRL]+[C])を行い、移動/コピーしたい先で、「貼り付け」(ペースト;[CTRL]+[V])を行います。
同じく、ペイントソフト・ドローソフトでも移動や複写を行う際に同様の操作をしますし、CADソフトでも同様の操作を行うものがあります。
この時に利用されるのが、Windowsの「クリップボード」です。これは、Windowsが一時的にデータを保管してくれる領域(1つだけですが)です。データの種類には、文字形式、ビットマップ形式、メタファイル形式、等があります。CADの場合は、どれにも当てはまらないとして「その他の形式」のクリップボードや、独自のデータ保管領域を使う場合があります。
 
さて、ここでは、お絵かきプログラムを作っていますので、ビットマップ形式のクリップボードを利用する機能を作ってみます。
 
まず、コピーしたい範囲選択を行う項目をメニューに設定し、この項目を指定したら、青いラバーバンドを描き、青い四角を描きます。通常のラバーバンドとは異なり、四角を描いた後、すぐに消すのではなくそのまま残し、他のコマンドを動かす直前に消すようにします。何故なら、編集|コピーって行う時に、範囲選択BOXが表示されていないと、どの部分をコピーするのか分からなくなるからです。この範囲選択指示は、DrawMode=9の時に始点指示、DrawMode=10の時に終点指示、終点を指示したらDrawMode=11にしています。
次に、編集メニューに「コピー(&C)」を追加します。切り取りは通常、背景色で塗り潰したりしますが、本質的に「コピー」と同様、クリップボードに入れた後に、背景色で塗り潰しするだけなので、このプログラムでは簡単化するために省略します。勿論、付けたい方はご自由に付けてください。なお、[CTRL]+[C]のショートカットに対応するため、メニュー項目の「ShortCut」プロパティを「Ctrl+C」にしておきましょう。
 
ビットマップ形式のクリップボードへのコピーは以外と簡単で、まず、uses節に「clipbrd」を追加しておき、
Clipboard.Assign(Image1.Picture.Bitmap);
また、ビットマップであると分かっている場合には、
Clipboard.Assign(Image1.Picture);
のようにすれば、クリップボードに Image1の画像をコピーする事が出来ます。
しかしこれだと、Image1全体がクリップボードに入ってしまいます。そのため、一旦、新しいBitmap型のオブジェクトを生成して、そこに、範囲指定した内容をコピーして、その新しいオブジェクト全体をクリップボードに入れます。用事の済んだそのオブジェクトは解放(Free)しておきます。
 
さて、それでは次に、編集メニューに「貼り付け(&P)」を追加します。[CTRL]+[V]のショートカットに対応するため、メニュー項目の「ShortCut」プロパティを「Ctrl+V」にしておきます。
 
ビットマップ形式のクリップボード内容を貼り付ける場合には、まず、クリップボードにビットマップ形式データがあるかどうかをチェックします。これは、
if (Clipboard.HasFormat(CF_BITMAP)) then begin
 〜
end;
で判定出来ます。また、
if (Clipboard.HasFormat(CF_PICTURE)) then begin
 〜
end;
でも、ビットマップに貼り付ける場合には問題ありません。こうしておくとメタファイル形式のクリップボードでも取り込む事が出来るようになります。(拡張メタファイル形式の場合、OSがWindows9x/Meだと取り込む事は出来ないようです)
 
ここで注意するのは、貼り付けの際、先程コピーコマンドを使ったか?を判定するのではない、という事です。一般的なクリップボード経由で貼り付けを行う際には、他のアプリケーション(ペイント等)からもちゃんと受け付ける事が出来るようにしておく必要があります。
 
クリップボードからビットマップへデータを持ってくる場合には、上記と同様、uses節に「clipbrd」を追加しているのを確認し、
Image1.Picture.Assign(Clipboard);
のようにすれば、Image1にクリップボードの画像をコピーする事が出来ます。
しかしこれだと、Image1全体がクリップボードと置き換わってしまいますので、一旦、新しいBitmap型のオブジェクトを生成して、そこに、クリップボードの内容を入れ、Image1のどこの場所にクリップボード画像を挿入するかを指定させるようにします。
 
貼り付け時は、ドラッグ操作ではなく、マウスを移動している際に画像の大きさを意味する四角を表示させ、マウス・クリックした時に、Image1への貼り付け処理を行っています。Image1.Canvas.Drawメソッドで、一時的に作成したビットマップオブジェクトからImage1へ画像をコピーします。
 
今回のプログラムは少しややこしくなっています(苦笑)ので、どういう動きをするかを確認してみて、いろいろ触ってみて下さい。
ソース・プログラム
 
 
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
 ▲PREV
 ▼NEXT
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.