いつもお世話になっております。Delphiの有名なファイラーを作るコンポーネントである
TurboPack Virtual Shell Toolsに含まれる「TVirtualExplorerCombobox」の挙動について
質問させてください。
(Win10 + Delphi 12 Community)
上記部品は、Windows標準のエクスプローラーの上の方についているような、ファイル
パスを表示させる部品です。
このコンポーネントについて、下記の操作を行うと、長時間固まったようにフリーズして
アプリが動かなくなります。
①FormにVirtualExplorerCombobox1を配置。
②プロパティを2つ変更。
・Active := True
・TextType := ecbtFullPath;
③アプリを実行し、VirtualExplorerCombobox1の内容をクリア。
実在するフォルダーのパスをコピー&ペーストして、エンターキーを押すと固まる。
このフリーズをなくす場合、どのようにすればよいか、情報をお持ちの方はお教えいた
だけますでしょうか。何卒よろしくお願いいたします。(ここ1週間、どのように解決
すべきかずっと悩んでおりますが、コンポーネントのコード量が多く、現実的に検証がう
まくできておりません。)
1点補足させていただきます。
Virtual Shell Toolsは、以下のものです。DelphiのGetItからのインストールにも
対応しており、実際にはそちらからインストールして使用しています。
https://github.com/TurboPack/MustangpeakVirtualshellTools
使用したことはありませんが、実在するフォルダーのパスを別のもの(C:\などのルート)にすると変化はありますか?
マイドキュメント内やネットワーク上のフォルダのパスを取得するのに失敗している可能性があります
一番良いのはコンポーネント内でブレイクポイントで止めてフリーズしている箇所を探すことかと思います
procedure TDropDownWnd.DropDownMessageLoop;
の感じがする
回答をいただいたにもか変わらず、お時間がたってしまい申し訳ありません。
少し時間をいただいて検証をしておりました。
フリーズはローカルにあるフォルダでも発生していました。
この部品はコンボボックス状になっているのですが、パスを入力する際、メニューがドロップダウン(開く)します。
この部品のプロパティにはdragmanagerというクラスがあり、そこでenabledを設定できます。
これをfalseに設定すると、ドロップメニューが開かなくなり、症状が大幅に軽減されました。
ただ、100%フリーズしないかと言うとそういう訳でもないため、現在は引き続き動作確認を行なっています。
//if GetMessage(Msg, 0, 0, 0) = True then
while GetMessage(Msg, 0, 0, 0) and (psRolledDown in FPopupStates) do
を
while psRolledDown in FPopupStates do
begin
if GetMessage(Msg, 0, 0, 0) = True then
while GetMessage(Msg, 0, 0, 0) and (psRolledDown in FPopupStates) do
begin
end
end
RollUp(False); //閉じない時があるので強制
終了時にエラーが出るようになるんだけどw
aaaaa様、わざわざコードを書いてくださり、誠にありがとうございます。該当箇所がわかるだけでも本当に助かります。今晩、該当部分を眺めてみて、フリーズが改善するか、やってみたいと思います。
編集 削除