الحصول على / تعيين tshelllistView مسار / مجلد كسلسلة (لا تستخدم .root)
-
11-09-2019 - |
سؤال
أريد تعيين المسار للحصول على TshelllistView لعرض دليل الملفات باستخدام Delphi 2007. يمكنني في البداية استخدام TshelllistView.root لتعيين مسار الجذر مثل هذا ويظهر الدليل الذي أريده:
View := TShellListView.Create(Self);
// ...
View.Root := 'C:\Windows';
ولكن إذا كان المستخدم ينقل بعيدا عن هذا الدليل باستخدام Backspace وأحاول ضبط. Root مرة أخرى إلى الدليل الأصلي، لا يتغير الدليل المعروض. يبدو أنه يبدو أنه من المفترض أن تحدد جذر مساحة الاسم SHELT، وليس الدليل الحالي.
أيضا، إذا يتنقل المستخدم حول (باستخدام Backspace، وما إلى ذلك) لا يتم تحديث خاصية .root لتعكس المسار المعروض حاليا. لا يوجد خاصية.
ما أريده هو وسيلة للحصول على المسار الحالي وتحديده كسلسلة دون أن يلزم ربط TshelllistView إلى TshelltreeView وتعيين Tshelltreeview.path أو Hack ShellCtrls.pas منذ الأساليب ذات الصلة ل TshelllistView كلما تبدو خاصة. أجد صعوبة في الاعتقاد بأن لا توجد طريقة واضحة للحصول على / ضبط المسار، لذلك أفترض أنني أفتقد شيئا بسيطا هنا، لكن هذا المكون غير موثق على الإطلاق.
المحلول
يمكنك الحصول على المسار الذي تم تحميله حاليا باستخدام
ShellListView1.RootFolder.PathName
تعيين يعمل خصائص الجذر، ولكن لا يتم تحديثه عند تغيير المجلدات بشكل تفاعلي. لذلك تحتاج إلى إجبارها على التفكير هناك تغيير. يعمل هذا إذا كنت دائما إعادة تعيينه إلى نفس المسار الأصلي:
ShellListView1.Root := View.RootFolder.PathName; // Updates to current location
ShellListView1.Root := 'C:\Windows';
بدلا من ذلك، بالنسبة للمسارات التعسفية، يمكنك فقط إضافة / إزالة الزائدة من أجل خداع Sametext Check في Setroot:
if ShellListView1.Root[Length(ShellListView1.Root)] = '\' then
ShellListView1.Root := ExcludeTrailingPathDelimiter(ANewPath)
else
ShellListView1.Root := IncludeTrailingPathDelimiter(ANewPath);
نصائح أخرى
للحصول على المجلد الحالي كسلسلة، يمكنك الوصول إلى خاصية RootFolder.
procedure TForm2.Button1Click(Sender: TObject);
begin
showmessage(ShellListView1.RootFolder.PathName);
end;
لتعيين المجلد الحالي كسلسلة، يمكنك استخدام الممتلكات الجذرية.
procedure TForm2.Button2Click(Sender: TObject);
begin
ShellListView1.Root := 'C:\windows';
end;