これで、一見落着に思えたのですが、1つ問題が出てきました。
OnGetStream イベントで戻す値は、AStream だけです。
AStream に nil を返すと、false と判断されます(ドロップに失敗)。
このとき、続くデータが存在したとしても、それ以降全ての処理がキャンセルされてしまいます。
例えば、
Data := TVirtualFileStreamDataFormat(dataFormatSource.DataFormat);Data.FileNames.Clear;for i := 0 to FTargets.Count - 1 doData.FilesNames.Add(FTargets[i]);
と、していたときに、最初の一個で失敗すると、全部失敗します。
これでは、FTP 系のソフトの操作として問題があるので、ソースを書き換えてしまいます。
DragDropFile.pas の 2476 行目に OnGetStream を呼ぶ記述があります。
その下に、Result := True; と書いて、常に成功状態にします。
FOnGetStream(Self, Index, Stream);Result := True;
これだけで、OKです。
0 件のコメント:
コメントを投稿