2

クライアントからバグレポートがありました。私のプログラムでは、Delphi のディレクトリ選択機能を使用して、プログラムが使用するいくつかのディレクトリを選択できるようにしています。これらのディレクトリは、ネットワーク ドライブ上にあることが許可されています。バグレポートからの関連する抜粋は次のとおりです。

ディレクトリを変更しようとすると、ネットワーク ドライブがダイアログに表示されませんでした。ブラウズ メニューで [コンピュータ] を開くと、ローカル ドライブのみが表示されました。回避策は、ダイアログを開いたままにして、ネットワーク ドライブを切断し、ネットワーク ドライブを再接続することです。その後、ダイアログに表示されます。次のフォルダの場所を変更するときは、最初からやり直す必要があります。リセットするように見えるので、メインの技術者がこれを頻繁に行っていることがわかりました。

最初は、これは Windows がディレクトリを取得していないに違いないと思ったので、両方のコンピューター (クライアントとネットワーク ドライブのあるコンピューター) のネットワークの場所が [Work] に設定されていることを確認するように彼に依頼しました。クライアントにマップされ、ネットワーク検出がオンになっていることを確認し、エクスプローラーでドライブが正常に表示されることを確認します。彼はそうしましたが、バグは残ります。

これに関するGoogleまたはQCレポートでは何も調べていません.SelectDirExtOptsのドキュメントは、ネットワークドライブが「正常に機能する」ことを示唆しているようです.

だから私の質問:これに似たものに遭遇した人はいますか?Windows の問題である可能性が高いですか、それとも Delphi ですか?

どうもありがとう。

4

2 に答える 2

4

そのsdShowSharesフラグを含める限り、実際に機能するはずです。

関数のソースを見ると、セットアップと結果の読み取りにすぎSelectDirectoryないことがわかります。SHBrowseForFolder

SHBrowseForFolderは Windows シェル API 関数です。

function SHBrowseForFolder; external shell32 name 'SHBrowseForFolderW';

SHBrowseForFolderドライブは再接続後に正しく表示されるため、Delphi は返された結果を正しく解釈する必要があります。したがって、クライアントのマシンの Windows の問題だと思います。

于 2012-11-15T07:19:35.793 に答える
0

ただし、 DelphiSelectDirectoryは のラッパーです。関数は、XE2 およびそれ以前のバージョンの Delphi/C++ Builder のマップされたネットワーク ドライブを表示しないSHBrowseForFolderことに注意してください。新しいバージョンでは、正しく動作しているように見え、共有ネットワーク ドライブが表示されます。SelectDirectory

次のコードは、Delphi のすべての新しいバージョンで動作するはずです。

AOptions := [sdNewUI, sdShowShares];
Result := SelectDirectory(Caption, Root, Directory, AOptions, nil);

Delphi/C++ Builder の古いバージョンのユーザーは、SHBrowseForFolderW直接呼び出すことができます。いくつかのサンプル コードは、https ://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shbrowseforfolderw にあります。

于 2020-02-03T13:24:55.683 に答える