よろしくお願いします。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;
よろしくお願いします。
|