Windows エクスプローラーからドロップされたファイルを受け入れる TShellListView の子孫を作成しようとしています。コンポーネントを使用するアプリケーションにドラッグ アンド ドロップを実装せずに、コンポーネント定義でドラッグ アンド ドロップを処理したい (Windows エクスプローラーからドロップされたファイルを受け入れる例を見つけたが、すべてアプリケーション/TForm レベルである)。
コンストラクターで DragAcceptFiles() を呼び出しており、WM_DROPFILES のメッセージ ハンドラーを定義しています。ただし、サンプル プロジェクトでこのコンポーネントを使用し、Windows エクスプローラーからファイルをドラッグすると、次のようになります。
ファイルをドロップできるという表示ではなく、「承認されていません」アイコン (スラッシュ付きの円) が表示されます。
ファイルをドロップしようとしても、Beep() は聞こえません。
コントロールがドラッグされたファイルを受け入れたいという事実をWindowsに適切に警告していないと思います。誰かが私が欠けているものを提案できますか?
興味のないビットを削除したコンポーネント コードを次に示します。
unit LJLShellListView;
interface
type
TLJLShellListView = class(TShellListView)
private
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
published
constructor Create(AOwner: TComponent);
end;
implementation
uses ShellAPI;
constructor TLJLShellListView.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
DragAcceptFiles(self.Handle, True);
end;
procedure TLJLShellListView.WMDropFiles(var Msg: TWMDropFiles);
begin
Beep(); // I never hear this.
end;
end.