相変わらずTreeView関連で悩んでおります。
エクスプローラー風のフォームを作っているのですが、左ペインにTreeView、右ペインにListViewがレポート形式でそれぞれ配置してあります。
TreeViewをクリックするとListViewの表示が更新されます。
TreeViewからTreeViewにドラッグすることも可能です。
(エクスプローラーで言うとディレクトリの移動です)
ListViewからTreeViewにドラッグすることも可能です。
(エクスプローラーで言うとファイルの移動です)
上記の機能はおおむね満たしておりますが、ListViewからTreeViewにドラッグしている最中にマウスカーソルがTreeView上に、まるで残像のように残ってしまいます。
TreeViewからTreeViewの処理だけの時は残像が残らなかったのですが、ListViewからTreeViewへの処理を追加した際に残像が表示されるようになってしまいました。
この残像という表現が悪いのか、検索エンジンでも対策が検索できず困っております。ご教授頂けませんでしょうか?
以下、ソースです。
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
if ( Source is TTreeView ) then
begin
if ( (Source as TTreeView) = TreeView1 ) then
begin
Accept := True;
end else begin
Accept := False;
end;
end;
// ここ以下を追加したら残像が出るようになりました
if ( Source is TListView ) then
begin
if ( (Source as TListView) = ListView1 ) then
begin
Accept := True;
end else begin
Accept := False;
end;
end;
end;
試してみましたが、上のコードだけでは残像は出ませんでした。
DragOver以外の処理では、何をやっていますか?
お返事が遅くなりまして申し訳ありません。
> DragOver以外の処理
リストアイテムやツリーのノード自体をDBで管理してます関係上、コードをそのまま掲載しても意味不明になってしまいますので、解説をさせていただきますと、DragDropにてツリーからツリーの場合はフォルダの移動です。
リストからツリーの場合はリストアイテムの所属フォルダの変更処理を行っております。
この部分をコメントアウトしても残像は残ってしまいます。
// ここ以下を追加したら残像が出るようになりました
より以下をコメントアウトすると残像は生じません。
移動処理そのものはうまく行ってますので、多分、描画の問題だとは思うのですが・・
新規プロジェクトを作成して試してみてはどうでしょうか。
そのコードで再現できなければ、別の箇所に原因があるのだと思います。
こうするとどうでしょうか?
Accept:= (Source=TreeView1) or (Source=ListView1);
すみません。出張に出てて返信が遅くなりました。
> こうするとどうでしょうか?
残像さま。ありがとうございます。
ご教授くださったコードで試したところ残像現象は無くなりました(感涙)。
レス感謝致します。
> 新規プロジェクトを作成して試してみてはどうでしょうか。
なるほど。
今回は残像さんのレスで解決できましたが、今度袋小路に迷った際はぜひそうさせて頂きます。レス感謝致します。