TIcon *ic = new TIcon();
DWORD Result;
SHFILEINFO Info;
String path = "c:\\";
Result = SHGetFileInfo(path.c_str(),0,&Info,sizeof(Info),SHGFI_SMALLICON | SHGFI_ICON | SHGFI_SYSICONINDEX | SHGFI_TYPENAME);
if(Result != 0) {
ic->Handle = Info.hIcon;
ImageList1->AddIcon(ic);
}
Создание файлового браузера
Код:
Собственно поиск файлов, директорий.
Код:
TSearchRec sr;
String path = "C:\\";
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
do {
//файл нужно добавить
} while (FindNext(sr) == 0);
FindClose(sr);
}
String path = "C:\\";
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
do {
//файл нужно добавить
} while (FindNext(sr) == 0);
FindClose(sr);
}
Теперь про скорость.
Все это работает не очень быстро.
Может кто знает ф-ции быстрее приведенных выше? :)
Тормозит непосредственно сам поиск или отображение найденных файлов?
Цитата: IL84
Тормозит непосредственно сам поиск или отображение найденных файлов?
Цитата: zheka3
Получение иконки файла.
Собственно поиск файлов, директорий.
Теперь про скорость.
Все это работает не очень быстро.
Может кто знает ф-ции быстрее приведенных выше? :)
Код:
TIcon *ic = new TIcon();
DWORD Result;
SHFILEINFO Info;
String path = "c:\\";
Result = SHGetFileInfo(path.c_str(),0,&Info,sizeof(Info),SHGFI_SMALLICON | SHGFI_ICON | SHGFI_SYSICONINDEX | SHGFI_TYPENAME);
if(Result != 0) {
ic->Handle = Info.hIcon;
ImageList1->AddIcon(ic);
}
DWORD Result;
SHFILEINFO Info;
String path = "c:\\";
Result = SHGetFileInfo(path.c_str(),0,&Info,sizeof(Info),SHGFI_SMALLICON | SHGFI_ICON | SHGFI_SYSICONINDEX | SHGFI_TYPENAME);
if(Result != 0) {
ic->Handle = Info.hIcon;
ImageList1->AddIcon(ic);
}
Собственно поиск файлов, директорий.
Код:
TSearchRec sr;
String path = "C:\\";
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
do {
//файл нужно добавить
} while (FindNext(sr) == 0);
FindClose(sr);
}
String path = "C:\\";
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
do {
//файл нужно добавить
} while (FindNext(sr) == 0);
FindClose(sr);
}
Теперь про скорость.
Все это работает не очень быстро.
Может кто знает ф-ции быстрее приведенных выше? :)
в основном тормозит из за ф-ии получения инфы и иконки...
в system32 - 2293 объектов
только 20 нодов с иконками, остальное - список.
Код:
...
float i = GetTickCount();
PVirtualNode NewNode;
PLeftFileNode NewRec;
TSearchRec sr;
String path = "C:\\Windows\\system32\\";
int c=0;
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
do {
c++;
NewNode = tvLeft->AddChild(NULL);
NewRec = (PLeftFileNode)tvLeft->GetNodeData(NewNode);
NewRec->Name=sr.Name;
NewRec->ImageIndex = leftFLicons->Count-1;
if(c <= 20) {
NewRec->Name=sr.Name;
NewRec->ImageIndex = leftFLicons->Count-1;
TIcon *ic = new TIcon();
String cFileType;
GetFileIcon(path+ sr.Name, ic, cFileType);
leftFLicons->AddIcon(ic);
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
i = (GetTickCount() - i);
i = i/1000;
ShowMessage(i);
...
float i = GetTickCount();
PVirtualNode NewNode;
PLeftFileNode NewRec;
TSearchRec sr;
String path = "C:\\Windows\\system32\\";
int c=0;
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
do {
c++;
NewNode = tvLeft->AddChild(NULL);
NewRec = (PLeftFileNode)tvLeft->GetNodeData(NewNode);
NewRec->Name=sr.Name;
NewRec->ImageIndex = leftFLicons->Count-1;
if(c <= 20) {
NewRec->Name=sr.Name;
NewRec->ImageIndex = leftFLicons->Count-1;
TIcon *ic = new TIcon();
String cFileType;
GetFileIcon(path+ sr.Name, ic, cFileType);
leftFLicons->AddIcon(ic);
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
i = (GetTickCount() - i);
i = i/1000;
ShowMessage(i);
...
отображается в TVirtualStringTree за 0,3 с.
список + иконки
Код:
...
float i = GetTickCount();
PVirtualNode NewNode;
PLeftFileNode NewRec;
TSearchRec sr;
String path = "C:\\Windows\\system32\\";
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
do {
NewNode = tvLeft->AddChild(NULL);
NewRec = (PLeftFileNode)tvLeft->GetNodeData(NewNode);
NewRec->Name=sr.Name;
NewRec->ImageIndex = leftFLicons->Count-1;
TIcon *ic = new TIcon();
String cFileType;
GetFileIcon(path+ sr.Name, ic, cFileType);
leftFLicons->AddIcon(ic);
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
i = (GetTickCount() - i);
i = i/1000;
ShowMessage(i);
...
float i = GetTickCount();
PVirtualNode NewNode;
PLeftFileNode NewRec;
TSearchRec sr;
String path = "C:\\Windows\\system32\\";
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
do {
NewNode = tvLeft->AddChild(NULL);
NewRec = (PLeftFileNode)tvLeft->GetNodeData(NewNode);
NewRec->Name=sr.Name;
NewRec->ImageIndex = leftFLicons->Count-1;
TIcon *ic = new TIcon();
String cFileType;
GetFileIcon(path+ sr.Name, ic, cFileType);
leftFLicons->AddIcon(ic);
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
i = (GetTickCount() - i);
i = i/1000;
ShowMessage(i);
...
отображается в TVirtualStringTree за 6 с.
только список
Код:
...
float i = GetTickCount();
PVirtualNode NewNode;
PLeftFileNode NewRec;
TSearchRec sr;
String path = "C:\\Windows\\system32\\";
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
do {
NewNode = tvLeft->AddChild(NULL);
NewRec = (PLeftFileNode)tvLeft->GetNodeData(NewNode);
NewRec->Name=sr.Name;
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
i = (GetTickCount() - i);
i = i/1000;
ShowMessage(i);
...
float i = GetTickCount();
PVirtualNode NewNode;
PLeftFileNode NewRec;
TSearchRec sr;
String path = "C:\\Windows\\system32\\";
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
do {
NewNode = tvLeft->AddChild(NULL);
NewRec = (PLeftFileNode)tvLeft->GetNodeData(NewNode);
NewRec->Name=sr.Name;
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
i = (GetTickCount() - i);
i = i/1000;
ShowMessage(i);
...
отображается в TVirtualStringTree за 0,2 с
Код:
...
float i = GetTickCount();
PVirtualNode NewNode;
PLeftFileNode NewRec;
TSearchRec sr;
String path = "C:\\Windows\\system32\\";
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
do {
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
i = (GetTickCount() - i);
i = i/1000;
ShowMessage(i);
...
float i = GetTickCount();
PVirtualNode NewNode;
PLeftFileNode NewRec;
TSearchRec sr;
String path = "C:\\Windows\\system32\\";
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
do {
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
i = (GetTickCount() - i);
i = i/1000;
ShowMessage(i);
...
простой поиск 0,01 с
чтоб по мере прокрутки была загрузка остальных.
как думаете, скорость повыситься?