ファイルの「切り取り」について。

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
bee

ファイルの「切り取り」について。

#1 投稿記事 by bee »

http://www.activebasic.com/forum/viewto ... 5%D4%A1%BC
こちらの7さんの記事を参考にファイルの「切り取り」に挑戦しています。
パスと一緒に"Preferred DropEffect"でコピーか貼り付けかを指定して
クリップボードに貼り付ければいいらしく、一応プログラムで切り取って、
エクスプローラ上で貼り付ける事はできました。
ただ、普通切り取ってから貼り付けられた場合はクリップボードが空になるはずですが、
それが起きず残ったままになってしまいます。
貼り付ける時にエクスプローラが勝手にクリップボードの中身をクリアしてくれるものだと思っていたのですが…。
こちらでクリアしなければいけないものなのでしょうか?(切り取ったファイルを監視する等??)
もしくは下記ソースがおかしいのでしょうか?もし分かる方がいらっしゃいましたらご教示ください。
よろしくお願いします。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

ファイルの場合、「切り取り」で実際にクリップボードにコピーされるのはファイルの位置情報(c:/とかで始まる、URLみたいな奴)であって、内容ではありません。

explorerの場合は、切り取り後に貼り付けを行うと元ファイルのメタが削除されるため2箇所以上に貼り付けることは出来ませんが、それでもクリップボードにはファイルの位置情報は文字列として残っているので、そのような状態になります。

別の例で言うと、プログラム側で「切り取り」あるいは「コピー」を行ってもどちらを行ったかはexplorerには伝わらないので、「コピー」のつもりだったのに元ファイルが「消し飛んだ」なんてことになったら困るわけです。

ということで、切り取り-貼り付け後に空になるのは「クリップボード」ではなく「元ファイルのメタ情報」なので、勘違いしないでください。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
bee

#3 投稿記事 by bee »

konisiさん。返信ありがとうございます。
ただ、いまいち納得がいきません。
> ファイルの場合、「切り取り」で実際にクリップボードにコピーされるのはファイルの位置情報(c:/とかで始まる、URLみたいな奴)であって、内容ではありません。

理解していたつもりです。

> explorerの場合は、切り取り後に貼り付けを行うと元ファイルのメタが削除されるため2箇所以上に貼り付けることは出来ませんが、それでもクリップボードにはファイルの位置情報は文字列として残っているので、そのような状態になります。

実際確認しましたが、エクスプローラ上で「切り取り」-「貼り付け」を行うとクリップボードにファイルの位置情報を表す文字列は残っていません。
一方、「コピー」-「貼り付け」を行った場合は位置情報を表す文字列はクリップボードに残ったままで、複数の場所へ貼り付けが可能です。
恐らく「切り取り」-「貼り付け」を行った場合はエクスプローラがクリップボードをクリアしているということではないでしょうか?

> 別の例で言うと、プログラム側で「切り取り」あるいは「コピー」を行ってもどちらを行ったかはexplorerには伝わらないので、「コピー」のつもりだったのに元ファイルが「消し飛んだ」なんてことになったら困るわけです。

それをエクスプローラに付加情報として伝えるのが"Preferred DropEffect"ではないのでしょうか?


しかし、今回「切り取り」をプログラム上で行い「貼り付け」をエクスプローラ上で行ってもその位置情報を表す文字列が消えないためこちらで質問いたしました。やはりDropEffectあたりが悪いのでしょうか…?
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#4 投稿記事 by konisi »

すんません、あまり調べずに、而も寝起きで物言ったもので。

色々なことをやってるコードだとは思いますが、ちょっと新しいことを吸収するのは得意ではないので別の人に解説頼みます。

#ところで、->ってどういう意味でしたっけ?
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#5 投稿記事 by 7 »

> それをエクスプローラに付加情報として伝えるのが"Preferred DropEffect"ではないのでしょうか?
「コピー」を行ったのか「切り取り」を行ったのかを伝える役目みたいですね。

> しかし、今回「切り取り」をプログラム上で行い「貼り付け」をエクスプローラ上で行ってもその位置情報を表す文字列が消えないためこちらで質問いたしました。やはりDropEffectあたりが悪いのでしょうか…?
エクスプローラ上で「貼り付け」を行うと、切り取ったファイルはちゃんと削除されるので、一応、切り取りはできてると思うんですよね。だからDropEffectは大丈夫だと思います。
ただ、切り取ったのを貼り付けたときにクリップボードの中身が消去されてないだけなんだと思うんですけど、そこら辺はこっち側でやるもんだったんでしょうかね? こっちでやるにしても、どうやって「貼り付け」されたことを感知するんでしょうね?
クリップボードビューアでクリップボードの内容が変更されたときは感知できますけど、クリップボードの内容をペーストしたときっていうのはなさそうですし。

う~ん?
bee

#6 投稿記事 by bee »

7さん。返信ありがとうございます。

> ただ、切り取ったのを貼り付けたときにクリップボードの中身が消去されてないだけなんだと思うんですけど、そこら辺はこっち側でやるもんだったんでしょうかね? こっちでやるにしても、どうやって「貼り付け」されたことを感知するんでしょうね?
> クリップボードビューアでクリップボードの内容が変更されたときは感知できますけど、クリップボードの内容をペーストしたときっていうのはなさそうですし。


ですよね。実は今ファイラーもどきを作っているのですが、私も「切り取り」をした後、クリップボードビュアーで監視し、クリアされたら画面を更新しようと思っていました。

・こちらでクリップボードをクリアするという事を考えると、切り取ったファイルの存在を監視し続けることぐらいしかアイデア浮かびません…(苦笑) 

・「切り取り」について解説しているページはいくらかは見つかるのですが、このような問題についてのものは見つかりません。

と考えると、なにかこちら側に問題があるのか…?と思ってしまいます。「一応切り取りができているように見えるが、実は何かおかしいところがある」のかと。(現に"Preferred DropEffect"を抜いてもコピーができますし)

やはり何かコードの中におかしい箇所があるのではないでしょうか?(特にGlobal~あたりにあまり自信がないもので…。)
お手間をかけて申し訳ないのですが、よろしくお願いします。
返信する