喫茶XRAYトップページ

[スレッド全体
]

[2412] TreeViewに他コンポからドラグドロップの勉強中です。返信 削除
2009/6/3 (水) 14:41:54 宮 〔HomePage
よろしくお願いします。winXP Delphi 6 Personalです。
MrXRAYさんのサンプルプログラム800-01のFolderTree1をモデルに
エクスプローラなどからドロップしてコピー、移動が出来るように
挑戦していますが、TreeViewのフォルダを反転表示して指定できません。

MrXRAYさんのサンプルでそういうのがないか探したのですが
残念ながら簡易エクスプローラもやっておられないので
質問させていただきました。

TreeView内のノードのドラッグドロップは自分もやっているのですが
他のコンポからのドラッグのサンプルを見かけません。
もしかして非常に難しいのでしょうか?

サンプル800-01に下記のようなコードを追加してみました。
(自分の能力で書いたのではなく拾い集めたものです)
しかし、Listboxには確かにドロップしているのですが
フォルダを指定(反転表示できない)
が出来ないのでコピーコードなど書けません。

  private
  //------ドラッグドロップ関係追加
   TreeView1OldProc: TWndMethod;
   procedure TreeView1NewProc(var message: TMessage);

procedure TForm1.FormCreate(Sender: TObject);
 // 以前のプロシージャを保存
 TreeView1OldProc := TreeView1.WindowProc;
 // 新しいプロシーシャをセット
 TreeView1.WindowProc := TreeView1NewProc;
 // ファイル受け取りの登録
 DragAcceptFiles(TreeView1.Handle, True);

procedure TForm1.TreeView1NewProc(var message: TMessage);
var
 FileName: array[0..MAX_PATH] of Char;
 i, Count: Integer;
begin
 if (message.Msg = WM_DROPFILES) and (TreeView1.Visible=true) then
 begin  // WM_DROPFILES の処理を横取りする
  Count := DragQueryFile(message.wParam, $FFFFFFFF, nil, 0);
  for i := 0 to Count - 1 do
  begin
   DragQueryFile( message.wParam, i, FileName, SizeOf(FileName));
   ListBox1.Items.Add(FileName);
  end;
  DragFinish(message.wParam); // 忘れないように
 end
 else
 TreeView1OldProc(message);
 // それ以外のメッセージは元のプロシージャを実行する
end;

なお、画面右半分にTWebBrowser貼り付けて、
テストが簡単になるように下記のコードを追加しています。
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
 WebBrowser1.Navigate(FullPath); //--------追加
end;

よろしくお願いします。

[2484] エクスプローラからDrag & DropでTreeViewに返信 削除
2009/6/19 (金) 19:15:22 Mr.XRAY
サンプル作成してみました.
Vistaでは反転表示できません.

http://mrxray.on.coocan.jp/Delphi/plSamples/800_FolderTree.htm#04

コンポーネントにして内部処理をすれば可能なのかも知れませんが,
現在のところ何とも言えません.


[2485] Re:エクスプローラからDrag & DropでTreeViewに返信 削除
2009/6/20 (土) 09:57:39 宮 〔HomePage
▼ Mr.XRAYさん
>>
>XPになって,どうもマウスか,エクスプローラだか分かりませんが,

動きが微妙になったようですね.

やはりそうですか。
違うフォルダに落としているのが、こんなに多いとは
いよいよ自分も惚けてきて手の自由がきかなくなったのか
と思っていました。

ドラッグドロップは、ツリービューで
フォルダやファイルの移動などには使うべきではないですね。

> コンポーネントにして内部処理をすれば可能なのかも知れませんが,
> 現在のところ何とも言えません.


有り難うございました。
ご苦労様でした。
勉強になりますから、研究させてください。
では。


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82