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

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

как получить hIcon иконки файла, используя SHGetFileInfo ? [D7, Win2k]


Страницы:   1 2

Сергей Резников ©   (2003-08-28 14:08:00) 

Подскажите, пожалуйста, как получить hIconиконки файла по его имени, используя SHGetFileInfo?
Именно любой- т.е. если это текстовый файл, то вернуть его иконку.


Сергей Резников   (2003-08-28 15:57:00) [1]

Пасиба всем, кто помог !


Сергей Резников   (2003-08-28 15:48:00) [2]

Рабочий код !!!:

procedure TForm1.FormCreate(Sender: TObject);
var
t: TListItem;
F: TSearchRec;
ic: TIcon;
Image: TImageList;
SysIl : THandle;
SFI : TSHFileInfo;
i: integer;
begin
FindFirst("c:\*.*", faAnyFile, F);
ImageList1.Clear;
i := 0;
while FindNext(F) = 0 do
begin
t := ListView1.Items.Add;
t.Caption := F.Name;
ic := TIcon.Create;
FillChar(SFI, SizeOf(SFI), 0);
SysIL := SHGetFileInfo(PChar("c:\" + F.Name), 0, SFI, SizeOf(SFI), SHGFI_SMALLICON or SHGFI_ICON or SHGFI_SYSICONINDEX );
if SysIL <> 0
then ic.Handle := ImageList_GetIcon (SysIL, SFI.iIcon, 0)
else RaiseLastOSError;

ImageList1.AddIcon(ic);
ic.SaveToFile("C:\Documents and Settings\Administrator\Desktop\bla.ico");
ic.Free;
t.ImageIndex := i;
i := i + 1;
end;

FindClose(F);

end;


Сергей Резников   (2003-08-28 15:36:00) [3]

SysIL := SHGetFileInfo(PChar("c:\" + F.Name)- появляется стандартная иконка у всех файлов и папок ... :-(


Skier   (2003-08-28 15:35:00) [4]

>Сергей Резников © (28.08.03 15:33)
Так может путь F.Name неверный ?
Проверь через FileExists(...)


Сергей Резников   (2003-08-28 15:33:00) [5]

System error. Code: 2. The system cannot find the file specified


Юрий Федоров   (2003-08-28 15:25:00) [6]

if SysIL <> 0
Выполняется условие ?
(зря raise убрал)


Сергей Резников   (2003-08-28 15:22:00) [7]

Ноль имоций.


Skier   (2003-08-28 15:20:00) [8]

SHGFI_LARGEICON or SHGFI_SMALLICON or SHGFI_ICON ?


Сергей Резников   (2003-08-28 15:15:00) [9]

SHGFI_SYSICONINDEX or SHGFI_SMALLICON- неправильные параметры, я думаю.


Сергей Резников   (2003-08-28 15:14:00) [10]


> Skier © (28.08.03 15:10) [21]

Icon image is not valid ...


Сергей Резников   (2003-08-28 15:12:00) [11]


> Юрий Федоров © (28.08.03 15:08) [20]

иначе к ListView1 иконку не привяжишь.


Skier   (2003-08-28 15:10:00) [12]

А ежели для контроля сохранить ic в файл ? Что там будет ?


Юрий Федоров   (2003-08-28 15:08:00) [13]

t.ImageIndex := 0;
???


Сергей Резников   (2003-08-28 15:03:00) [14]

procedure TForm1.FormCreate(Sender: TObject);
var
t: TListItem;
F: TSearchRec;
ic: TIcon;
SmallImages: TImageList;
SysIl : THandle;
SFI : TSHFileInfo;
begin
FindFirst("c:\*.*", faAnyFile, F);
while FindNext(F) = 0 do
begin
t := ListView1.Items.Add;
t.Caption := F.Name;
ic := TIcon.Create;

FillChar(SFI, SizeOf(SFI), 0);
SysIL := SHGetFileInfo(PChar(F.Name), 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
if SysIL <> 0
then ic.Handle := ImageList_GetIcon (SysIL, SFI.iIcon, 0);

ImageList1.AddIcon(ic);
ic.Free;
t.ImageIndex := 0;
end;

FindClose(F);

end;


Сергей Резников   (2003-08-28 14:59:00) [15]

It does not work.


Skier   (2003-08-28 14:53:00) [16]

>Сергей Резников © (28.08.03 14:52)
Кысмет ! :))


Юрий Федоров   (2003-08-28 14:53:00) [17]

И создавать ic тоже внутри цикла while


Сергей Резников   (2003-08-28 14:52:00) [18]

Нет.


Юрий Федоров   (2003-08-28 14:51:00) [19]

t.ImageIndex := ImageList1.AddIcon(ic);
ic.Free;


Skier   (2003-08-28 14:49:00) [20]

Попробуй так :

...then Icon.Handle := ImageList_GetIcon (SysIL, SFI.iIcon, 0);

У формы иконка не изменится ?


Страницы:   1 2

Наверх

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