Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ExtractAssociatedIcon 
:(
    Опции темы
<Spawn>
Дата 27.1.2004, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Делаю фрейм для просморта файлов на диске и использую данную функцию, для получения картинок, но тормоза от нее...(если ее убрать, то ни каких тормозов нет). Есть ли более быстрая функция? Пробовал ExtractIcon, но ей не вышло ни чего. Может я не так делалю чего:

Код
var
 sr : TSearchRec;
begin
...
ExtractIcon(hInstance, PAnsiChar(Dir + '\' + sr.Name), 0))
Возвращает 0.

Это сообщение отредактировал(а) <Spawn> - 27.1.2004, 15:47


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
p0s0l
Дата 27.1.2004, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Как это не удивительно, но у меня всё ок, выдирает:
Код
procedure TForm1.Button1Click(Sender: TObject);
var
 ic : HICON;
begin
 ic := ExtractIcon(hInstance, PAnsiChar('c:\project2.exe'), 0);
 application.Icon.Handle := ic;
 caption := inttohex(ic, 8);
end;

Может более полный код привидешь ?
И ты должен учесть, что принцип работы этих функций (ExtractIcon и ExtractAssociatedIcon) - разный, т.к. первая - берет иконку из файла, а вторая - ассоциированную иконку или иконку из файла, т.е. ExtractIcon для не .exe и .dll файлов будет возвращать нули...
Возможно для ускорения тебе лучше кэшировать иконки (т.е. два раза ExtractAssociatedIcon для одного и того же расширения (кроме exe и dll) не вызывать)...



--------------------
С уважением, г-н Посол.
PM   Вверх
x77
Дата 27.1.2004, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



<Spawn>, а куда кладутся иконки? эксплорер, если ты обращал внимание, не грузит их сразу все, а только для видимой части. если используется компоненты типа ListView, то имеет смысл работать через OnGetImageIndex, т.е. грузить иконку непосредственно перед тем, как её надо отрисовать на экране. про BeginUpdate .. EndUpdate - не говорю smile.gif если юзается ImageList - то тормозить всё на свете будет именно он.

в общем, покажи код smile.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
<Spawn>
Дата 27.1.2004, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



пока что все вот так тормознуто:

Код
procedure TfrFileDir.GetFiles(const Node: TTreeNode);
var
 sr: TSearchRec;
 ListItem: TListItem;
 NewIcon : TIcon;
 Dir: string;
 lpIcon: Word;
begin
 if not Assigned(Node) then
   Exit;

 lvFiles.Clear;
 FilesImgsList.Clear;

 Dir := GetDir(Node);
 if FindFirst(Dir + '\*' + FExt, faAnyFile, sr) = 0 then
 begin
   repeat
     if (sr.Attr and faDirectory) = 0 then
     begin
       NewIcon := TIcon.Create;
       NewIcon.Handle := ExtractAssociatedIcon(hInstance, PAnsiChar(Dir + '\'
                                     + sr.Name), lpIcon);
       ListItem := lvFiles.Items.Add;
       ListItem.Caption := sr.Name;
       ListItem.ImageIndex := FilesImgsList.AddIcon(NewIcon);
       Application.ProcessMessages;
     end;
   until FindNext(sr) <> 0;
   FindClose(sr);
 end;
end;


Попробую ваши советы внедрить в код)))

Это сообщение отредактировал(а) <Spawn> - 27.1.2004, 22:42


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 27.1.2004, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



x77 Я тоже не гружу все сразу - только первые 2 уровня, т.е. C:\... и для каждой папки еще итемы нахожу. Когда происходит выбор в TTreeView папки, то для всех ее подпапок проихводится поиск на 1 уровень. Но с этим все ок. Проблема в том что в TListView выводятся файлы, содержащиеся в выделеной папке - вот они и вызвают тормоз. Попробую кешировать и еще помучаю ExtractIcon.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
x77
Дата 27.1.2004, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



для ListView обязательно делай

Код

Items.BeginUpdate;
try
 Items.Clear;
 ...
finally
 Items.EndUpdate;
end;


а насчёт выделенной папки - OnGetImageIndex. т.е. капшены прописываешь сразу, а иконки подсасываешь по мере отображения файлов. сколько их одновременно отображается? десятка два от силы. а всего в папке их может быть и несколько тысяч, называется, почувствуйте разницу. smile.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
x77
Дата 27.1.2004, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



кстати, почему ты не освобождаешь NewIcon?


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
<Spawn>
Дата 27.1.2004, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Цитата(x77 @ 27.1.2004, 14:46)
кстати, почему ты не освобождаешь NewIcon?

Хех, а я почему то подумал, что TImageList сохраяняет переданый ему указатель) Подумал, но не проверил. Уже исправил.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0734 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.