Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по KOLmdvShellControls [Delphi, Windows]


Страницы:   1 2

SergeR ©   (2007-09-11 16:15:00) 

Понадобилось в проекте использовать сабж.
Но хотелось, чтоб в KOLmdvShellListView отображались иконки файлов и папок. Это как нибудь можно реализовать?
В демопроекте - ShellComboBox они тоже не отображаются.


SergeR   (2007-10-01 18:08:00) [1]

Да. Стало работать на много быстрее. Спасибо !


mdw   (2007-10-01 17:21:00) [2]

+ поддержка WinCE


mdw   (2007-10-01 17:20:00) [3]

Если интересно, обновил на kolnmck.ru. Много переделал, стало работать в разы быстрее.


SergeR   (2007-09-13 15:27:00) [4]

Огромадный биг сенкс )) !!!


mdw   (2007-09-13 14:57:00) [5]

Поставил Висту. Победил!!! :)) Сам дурак был.

> Кстати формирование списка на Висте происходит очень медленно.

И формирование быстрее стало на висте:)
Сегодня обновлю. Сейчас займусь, много чего обновить есть.


SergeR   (2007-09-13 14:34:00) [6]

Такой способ пробовал еще вначале. Не помогает.

Думается трабла не в GetIcons или GetIconIndexes, а где то еще.
Т.к. в комбобоксе ведь всё нормально отображается хоть со smallicon, хоть с Largeicon, а там эти функции ведь тоже используются.
  Кстати формирование списка на Висте происходит очень медленно.
Я попробовал зайти в windows\system32. Всё прога задумалась надолго.
Пришлось вырубать из диспетчера.
Пробовал тоже на XP\Win2003 - читает на порядок быстрее.


mdw   (2007-09-12 13:37:00) [7]

В общем, пока не знаю, в чем причина. Нужно ставить висту и смотреть.
Попробуй такой вариант, может поможет, хотя врядли:
function TShellFileSys.GetIcons(Index: Integer): PImageList;
begin
   case Index of
     SHGFI_ICON: if FIcons <> nil then Exit;
     SHGFI_SMALLICON: if FSmallIcons <> nil then Exit;
   end;
   Result:= NewImageList(Applet);
   Result.LoadSystemIcons(SHGFI_SMALLICON = Index);
   case Index of
     SHGFI_ICON: FIcons:= Result;
     SHGFI_SMALLICON: FSmallIcons:= Result;
   end;
end;
Ну еще можно попробовать GetIconIndexs поставить SHGFI_ICON.


SergeR   (2007-09-12 12:53:00) [8]


> Попрубуй все же SHGFI_LARGEICON, возможно в Висте это принципиально?

в Висте никак не отображается в LV.

> Гм . Может Висту пора поставить? типа тестировать? Мне просто
> и ХР зватает. На работе по любому XP или 2k, а дома не очень
> много мощи - Atlon XP2000...

У меня сейчас виста стоит с Весны на celeron 2.4Ghz с встроенной видюхой и 1ггб памяти (было 512 - но мало ей) + комп работает, как проксик для инета с полным протоколированием на 10 машин+ наставлено куча всяких MS SQL Server 2005 и подобной чуши.
Вроде нормально пашет.
Второй осью XP стоит.
Виста грузится быстрее, работает, субъективно, не медленнее XP.
Покрайней мере после использования XP в течение года я обычно сношу её нафик - тупить начинает страшно.
А Виста пока держится.


mdw   (2007-09-11 21:54:00) [9]

Попрубуй все же SHGFI_LARGEICON, возможно в Висте это принципиально?

Гм . Может Висту пора поставить? типа тестировать? Мне просто и ХР зватает. На работе по любому XP или 2k, а дома не очень много мощи - Atlon XP2000...


SergeR   (2007-09-11 19:40:00) [10]


>
> посмотри тогда еще по
> Result.Handle:= SHGetFileInfo('', 0, SHFileInfo, SizeOf(SHFileInfo),
>  SHGFI_SYSICONINDEX or Index);
>

Хендл возвращает + см [10], т.е. SHGetFileInfo отрабатывет нормально.

> Слошай, а VCL ShellListView работает? Если да, тогда можно
> там покопать.
Не знаю, я VCL весь с панели убрал, чтоб глаза не мозолил ))


mdw   (2007-09-11 19:29:00) [11]


> > со SMALLICON работает с Large не проверял. Если надо -
>  могу > проверить.Да зачем, если и так работает?

Хотя в Висте может стоит попробовать.


mdw   (2007-09-11 19:13:00) [12]


> со SMALLICON работает с Large не проверял. Если надо - могу
> проверить.

Да зачем, если и так работает?

> По структуре SHFileInfo изменений нет никаких вроде.

посмотри тогда еще по
Result.Handle:= SHGetFileInfo('', 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_SYSICONINDEX or Index);

Слошай, а VCL ShellListView работает? Если да, тогда можно там покопать.


SergeR   (2007-09-11 19:11:00) [13]

Кстати если использовать связку ListView + imagelist
и дерево грузить вручную  то всё прекрасно работает.
Т.е. SHGetFileInfo() в loadsystemicons() в KOL.pas отрабатывает нормально...


SergeR   (2007-09-11 19:05:00) [14]


> Кстати, заработало с SHGFI_SMALLICON или SHGFI_LARGEICON?

со SMALLICON работает с Large не проверял. Если надо - могу проверить.

> Под Вистой возможно, у меня нет. Тестировал под XP и 2k.
>  Смотри по висте MSDN, если что накопаешь, то поправим для
> универсальности.

MSDN нового нету, только 2005. Гуглю пока.  
По структуре SHFileInfo изменений нет никаких вроде.


mdw   (2007-09-11 18:52:00) [15]

Под Вистой возможно, у меня нет. Тестировал под XP и 2k. Смотри по висте MSDN, если что накопаешь, то поправим для универсальности.

Кстати, заработало с SHGFI_SMALLICON или SHGFI_LARGEICON? Я просто не стал добавлять разную обработку SMALLICON и LARGEICON, т.к.  и так SMALLICON работало...


SergeR   (2007-09-11 18:26:00) [16]

Хм. Перегрузился под XP. Там всё работает оказывается.
Под Вистой не работает...странно


sergeR   (2007-09-11 17:59:00) [17]

PS. Win Vista & XP SP2. KOL last ver


SergeR   (2007-09-11 17:56:00) [18]

Не помогло (.
в SHFileInfo.iIcon возвращается вроде норм - цифирь >0 ))
Result.Handle в GetIcons так же присутствует...


mdw   (2007-09-11 17:34:00) [19]

Посмотрел.
попробуй в процедуре GetIconIndexs SHGFI_SMALLICON заменить на SHGFI_LARGEICON

procedure GetIconIndexs(ID: PItemIDList; var Normal, Selected: integer);
...
   if SHGetFileInfo(PChar(ID), 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_PIDL or SHGFI_SYSICONINDEX or {SHGFI_SMALLICON}SHGFI_LARGEICON) = 0 then Normal:= -1
   else Normal:= SHFileInfo.iIcon;
   if SHGetFileInfo(PChar(ID), 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_PIDL or SHGFI_SYSICONINDEX or {SHGFI_SMALLICON}SHGFI_LARGEICONor SHGFI_OPENICON) = 0 then Selected:= -1
...
У меня правда и так работает.....
Если не поможет посмотри что вообще возвращается в SHFileInfo.iIcon.

Еще можно глянуть в
function TShellFileSys.GetIcons(Index: Integer): PImageList;
что возвращается в строчке:
   Result.Handle:= SHGetFileInfo('', 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_SYSICONINDEX or Index);


mdw   (2007-09-11 17:15:00) [20]

А вот скрин у меня
www.kolnmck.ru/img/2.jpg

Сейчас посмотрю где и куда копать.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо