Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание файлового браузера

11K
25 марта 2007 года
zheka3
27 / / 28.11.2006
Получение иконки файла.
 
Код:
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);
   }


Теперь про скорость.
Все это работает не очень быстро.
Может кто знает ф-ции быстрее приведенных выше? :)
497
26 марта 2007 года
IL84
267 / / 24.04.2003
Тормозит непосредственно сам поиск или отображение найденных файлов?
11K
26 марта 2007 года
zheka3
27 / / 28.11.2006
Цитата: 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);
   }


Собственно поиск файлов, директорий.
 
Код:
TSearchRec sr;
String path = "C:\\";
if(FindFirst(path + "*.*", faAnyFile, sr) == 0) {
      do {
      //файл нужно добавить
      } while (FindNext(sr) == 0);
   FindClose(sr);
   }


Теперь про скорость.
Все это работает не очень быстро.
Может кто знает ф-ции быстрее приведенных выше? :)



в основном тормозит из за ф-ии получения инфы и иконки...

11K
26 марта 2007 года
zheka3
27 / / 28.11.2006
дано: комп... c AMD Athlon 64 3200+ (2GHz), RAM 1 Gb
в 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);
...


отображается в 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);
...


отображается в 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);
...


отображается в 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);
...


простой поиск 0,01 с
11K
26 марта 2007 года
zheka3
27 / / 28.11.2006
так вот луше сделать чтоб видимая часть была с иконками, невидимая соответственно без них?
чтоб по мере прокрутки была загрузка остальных.
11K
26 марта 2007 года
zheka3
27 / / 28.11.2006
как думаете, скорость повыситься?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог