PDA

View Full Version : سوال: مشكل با DirectoryListBox



sr2m72
سه شنبه 07 آذر 1391, 23:43 عصر
سلام!
چرا DirectoryListBox پوشه هايي كه خاصيت سيستمي دارند رو نمايش نميده!
چكار كنم كه اونها رو هم نمايش بده؟

با تشكر! :d

BORHAN TEC
چهارشنبه 08 آذر 1391, 01:52 صبح
سلام
به نظر من DirectoryListBox یک کامپوننت قدیمی و تقریباً منسوخ شده است و متاسفانه چنین قابلیتی ندارد و به جای آن باید از روشهای جایگزین استفاده کرد. مثلاً:
uses SHlObj;

procedure TForm4.Button1Click(Sender: TObject);
var
BrInfo: _browseinfoW;
Dispname: pchar;
begin
with BrInfo do
begin
hwndOwner := self.handle;
ulFlags := BIF_RETURNONLYFSDIRS;
pszDisplayName := Dispname;
pidlRoot := nil;
lpszTitle := 'title';
lpfn := nil;
end;
ShBrowseforFolder(BrInfo);
showmessage(strpas(BrInfo.pszDisplayName));
end;
و یا استفاده از کامپوننت TJvBrowseForFolderDialog از مجموعه JVCL و ... .

Felony
چهارشنبه 08 آذر 1391, 08:28 صبح
مشکل شما به این خاطر هست که DirectoryListBox با تابع زیر پوشه های یک مسیر رو لیست میکنه و براش پوشه های سیستمی و مخفی تعریف نشدن پس اون رفتار طبیعی هست :

function TDirectoryListbox.ReadDirectoryNames(const ParentDirectory: string;
DirectoryList: TStringList): Integer;
var
Status: Integer;
SearchRec: TSearchRec;
begin
Result := 0;
Status := FindFirst(SlashSep(ParentDirectory, '*.*'), faDirectory, SearchRec);
try
while Status = 0 do
begin
if (SearchRec.Attr and faDirectory = faDirectory) then
begin
if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
begin
DirectoryList.Add(SearchRec.Name);
Inc(Result);
end;
end;
Status := FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
end;
end;

همونطور که شاهین گفت DirectoryListBox یک کامپوننت قدیمی هست ولی من موندم چرا به روز رسانیش نمیکنن ( چندین کامپوننت در دلفی نیاز به تغییرات اساسی دارن که کار مشکلی هم نیست ) ، مثلا همون تابع بالا رو میتون با 3 ، 4 خط با استفاده از توابع کتابخانه IOUtils بازنویسی کنن .

sr2m72
چهارشنبه 08 آذر 1391, 17:57 عصر
و یا استفاده از کامپوننت TJvBrowseForFolderDialog از مجموعه JVCL و ... .

سلام!
ميشه اين كامپوننت رو اينجا بزاريد واسه دانلود!!!

سعید صابری
چهارشنبه 08 آذر 1391, 19:15 عصر
http://jvcl.delphi-jedi.org/