Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2010, 01:08   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
Вопрос Вывод иконок программ в ListView в стиле vsReport

Доброго времени суток!
Вопрос:
Как вывести список exe файлов и их иконок в стиле vsReport компонента ListView?

Предпологается что при добавлении элемента к писку , уже известны его имя exe и путь до exe. Хочу выводить рядом с exe его иконку.
Человек_Борща вне форума Ответить с цитированием
Старый 09.11.2010, 13:27   #2
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

для получения иконки ассоциированной с расширением в реестре можно использовать такое:
Код:
function GetRegistryIconHandle(FileName: string): HICON;
var
  R: TRegistry;
  Alias, //псевдвним для расширения в реестре
  IconPath: string; //путь для файла с иконкой
  IconNum, //номер иконки в файле
  QPos: Integer; //позиция запятой в записи реестра
begin
  IconNum := 0;

  R := TRegistry.Create;

  try
    R.RootKey := HKEY_CLASSES_ROOT;

    //чтение псевданима
    if R.OpenKey('\' + ExtractFileExt(FileName), True) then
      Alias := R.ReadString('');
    R.CloseKey;

    //чтение записи об иконке
    if R.OpenKey('\' + Alias + '\DefaultIcon', True) then
      IconPath := R.ReadString('');
    R.CloseKey;

    //поиск запятой
    QPos := Pos(',', IconPath);

    //чтение номера иконки в файле если она имеется
    if QPos <> 0 then
    begin
      IconNum := StrToInt(Copy(IconPath, QPos + 1, 4));
      IconPath := Copy(IconPath, 1, QPos - 1)
    end;

  finally
    R.Free;
  end;

  //передача хендлера иконки как рещультат выполнения
  Result := ExtractIcon(hInstance, PChar(IconPath), IconNum);
end;
Пример использования:
GetRegistryIconHandle('c:\winnt\win .ini');

Для получения иконок из файлов .EXE, .DLL, .ICO, в модуле ShellAPI, есть функция:

Код:
function ExtractIcon(Inst: THandle; FileName: PChar; IconIndex: Word): HIcon;
где

Inst - указатель на приложение вызвавшее функцию,
FileName - имя файла из которого необходимо получить иконку,
IconIndex - номер необходимой иконки.

Если функция возвращает значение не равное нулю, то в файле есть следующая иконка.

Пример:

В данном примере в компонент Image1 выводится иконка запущенного файла.

Код:
............ 

USES ShellAPI; 

............ 

procedure TForm1.FormCreate(Sender: TObject); 
VAR A: ARRAY [0..78] OF Char; 
begin 

{Получение имени запущенного файла}
StrPCopy(A, ParamStr(0));
{Вывод на экран нулевой иконки из файла}
Image1.Picture.Icon.Handle := ExtractIcon(HInstance, A, 0); 

end;
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Stilet; 09.11.2010 в 13:44.
Johnson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ListView (vsReport) показываем/прячем колонки Upgrades Общие вопросы Delphi 2 21.08.2010 18:13
ListView вывод иконок Rolls Компоненты Delphi 2 13.05.2010 07:56
как работать с новыми CheckBox в ListView в режиме vsReport cybopob90 Компоненты Delphi 2 24.03.2009 13:02
CheckBox в ListView в режиме vsReport cybopob90 Компоненты Delphi 0 24.03.2009 12:31
Коллекция иконок в стиле WinVista ZloVred Свободное общение 0 18.11.2007 04:53