TreeViewの残像について

解決


吉岡  2003-12-18 12:52:40  No: 6310  IP: [192.*.*.*]

相変わらず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;

編集    削除
残像君  2003-12-20 00:39:21  No: 6311  IP: [192.*.*.*]

試してみましたが、上のコードだけでは残像は出ませんでした。
DragOver以外の処理では、何をやっていますか?

編集    削除
吉岡  2003-12-20 12:18:26  No: 6312  IP: [192.*.*.*]

お返事が遅くなりまして申し訳ありません。

> DragOver以外の処理

リストアイテムやツリーのノード自体をDBで管理してます関係上、コードをそのまま掲載しても意味不明になってしまいますので、解説をさせていただきますと、DragDropにてツリーからツリーの場合はフォルダの移動です。
リストからツリーの場合はリストアイテムの所属フォルダの変更処理を行っております。

この部分をコメントアウトしても残像は残ってしまいます。

// ここ以下を追加したら残像が出るようになりました

より以下をコメントアウトすると残像は生じません。
移動処理そのものはうまく行ってますので、多分、描画の問題だとは思うのですが・・

編集    削除
にしの  2003-12-20 22:28:48  No: 6313  IP: [192.*.*.*]

新規プロジェクトを作成して試してみてはどうでしょうか。
そのコードで再現できなければ、別の箇所に原因があるのだと思います。

編集    削除
残像君  2003-12-20 23:24:57  No: 6314  IP: [192.*.*.*]

こうするとどうでしょうか?
Accept:= (Source=TreeView1) or (Source=ListView1);

編集    削除
吉岡  2003-12-22 10:14:14  No: 6315  IP: [192.*.*.*]

すみません。出張に出てて返信が遅くなりました。

> こうするとどうでしょうか?

残像さま。ありがとうございます。
ご教授くださったコードで試したところ残像現象は無くなりました(感涙)。
レス感謝致します。

> 新規プロジェクトを作成して試してみてはどうでしょうか。

なるほど。
今回は残像さんのレスで解決できましたが、今度袋小路に迷った際はぜひそうさせて頂きます。レス感謝致します。

編集    削除