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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание виртуальной папки (shell extensions)... несколько вопросов по реализации... 
:(
    Опции темы
davinchi
Дата 12.7.2012, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bems, 
Цитата(bems @  12.7.2012,  11:41 Найти цитируемый пост)
... а отдним CPU сыт не будешь

ага, и я о том же...

Цитата(bems @  12.7.2012,  11:41 Найти цитируемый пост)
да, похоже на то. попробую прикрутить

я тебе таааак благодарен буду если сделаешь рабочий пример под семерку х64, с жескозахардкоденными итемами... а то сразу еще и в реализацию итемов через коллекцию тяжело въехать...

Это сообщение отредактировал(а) davinchi - 12.7.2012, 11:21
PM   Вверх
bems
Дата 14.7.2012, 06:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Мне не удалось заставить отладчик подцепить отладочную информацию, поэтому я воспользовался пунктом меню Load process
в дереве слева выбирал local, в строке process указал путь к проводнику C:\Windows\explorer.exe
в source path указал папку с проектом
теперь можно отлаживать, предварительно прибивши дефолтный проводник из таск менеджера

Касательно интерфейса IPersistFolder2, я сделал такую реализацию метода:
Код

function TFolder.GetCurFolder(var ppidl: PItemIdList): HResult;
begin
  ppidl := CoTaskMemAlloc(Length(FRoot));
  if ppidl = nil
     then Result := E_OUTOFMEMORY
     else begin
          Move(Pointer(FRoot)^, ppidl^, Length(FRoot));
          Result := S_OK;
          end;
end;


потом в процессе отладки выяснилось, что когда оболочки запрашивает заголовки колонок (вызов GetDetailsOf с pidl = nil) у меня еще нет этой информации, я возвращаю ошибку и отображение папки наламывается. Видимо в ХР порядок вызовов был другим и такая ситуация не возникала. Чтобы исправить это, я изменил таким образом:
Код

function TTextFileCollection.GetDetailPair(iColumn: UINT; out StringList: THashedStringList;
 out Index: Integer; out AClass: TBaseItemClass): HResult;
var
 PrevIndex: Integer;
 Groups: TDetailGroups;
 Cls: TBaseItemClass;
begin
 PrevIndex := -1;
 Groups := FCopybleFields.DetailGroups as TDetailGroups;
 if Groups.Classes.Count = 0 then LoadFromFile;

 for Cls in Groups.Classes do
  begin
   StringList := Groups.GetStringList(Cls);
   if (Integer(iColumn) > PrevIndex) and (Integer(iColumn) <= PrevIndex + StringList.Count) then
    begin
     Index := Integer(iColumn) - (PrevIndex + 1);
     AClass := Cls;
     Exit(S_OK);
    end;
   Inc(PrevIndex, StringList.Count)
  end;
 Result := E_FAIL
end;
добавлена тут строка if Groups.Classes.Count = 0 then LoadFromFile;

Теперь папка открывается, но при выборе элемента падает с эксцепшном. Дебажу дальше

Это сообщение отредактировал(а) bems - 14.7.2012, 06:20


--------------------
Обижено школьников: 8
PM MAIL   Вверх
bems
Дата 14.7.2012, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Не хватало IsMultithread := True; в дпр-файле
больше не падет


--------------------
Обижено школьников: 8
PM MAIL   Вверх
davinchi
Дата 15.7.2012, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bems, спасибо! папка открылась, но при смене фокуса от одного итема к другому explorer падает...
и как итемам задать иконки и реакцию на клик?

Это сообщение отредактировал(а) davinchi - 15.7.2012, 16:56
PM   Вверх
bems
Дата 16.7.2012, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(davinchi @  15.7.2012,  16:54 Найти цитируемый пост)
 при смене фокуса от одного итема к другому explorer падает

это уже с IsMultithread := True ?


Цитата(davinchi @  15.7.2012,  16:54 Найти цитируемый пост)
и как итемам задать иконки и реакцию на клик?

реализовать IContextMenu с действиями по умолчанию (CMF_DEFAULTONLY)


--------------------
Обижено школьников: 8
PM MAIL   Вверх
crazynetwork
Дата 21.7.2012, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(davinchi @ 9.7.2012,  12:51)
Ne1tr1n0, спасибо конечно... но на исходниках я был, я оттуда и взял работы за основу, но там не одно задание на Deplhi XE2 под х64 не компилируется, хотя работа Bems'a видимо то что мне нужно...
Shell+ я тоже находил, я так понимаю это платные компоненты? И не факт что они сделают, то что мне нужно...

В этих библиотеках есть компонент TSxChangeNotifier. Он следит за изменениями файлов в папках. Кто знает как его заставить следить и за папками тоже??
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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