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 14:46:00) [21]

Теперь белый фон, а не иконки:

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

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);
t.ImageIndex := 0;
end;

FindClose(F);

end;


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

SHGetFileInfo(PAnsiChar(F.Name), 0, fi,
SizeOf(fi), SHGFI_ICON or SHGFI_SMALLICON);
- не обращайте внимания- ещё не удалил.


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

см. Skier © (28.08.03 14:34) [6]


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

Функция появилась, но код неправильно работаёт - вместо иконок, чёрный квадраты.
Посмотрите, что не так:

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
SHGetFileInfo(PAnsiChar(F.Name), 0, fi,
SizeOf(fi), SHGFI_ICON or SHGFI_SMALLICON);

t := ListView1.Items.Add;
t.Caption := F.Name;

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);
t.ImageIndex := 0;
end;

FindClose(F);

end;


Skier   (2003-08-28 14:36:00) [25]

uses Commctrl;


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


> Юрий Федоров

Дельфи говорит, что такой функции нет :-(


Skier   (2003-08-28 14:34:00) [27]

а где ты ic создаёшь ? Не видно.


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

>>ImageList_GetIcon - не работает
Как не работает, что говорит SysErrorMessage(GetLastError)?


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

Вот исходник:

procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
t: TListItem;
fi, fif1, fif2: TSHFileInfo;
F: TSearchRec;
ic: TIcon;
SmallImages: TImageList;
SYSIL : THandle;
SFI : TSHFileInfo;

begin

/////////////////////////////////////////////////////////
FindFirst("c:\*.*", faAnyFile, F);

while FindNext(F) = 0 do
begin
SHGetFileInfo(PAnsiChar(F.Name), 0, fi,
SizeOf(fi), SHGFI_ICON or SHGFI_SMALLICON);

t := ListView1.Items.Add;
t.Caption := F.Name;

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 := SFI.iIcon; //ImageList1.GetIcon (SysIL, SFI.iIcon, 0)

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

FindClose(F);

end;


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

>Сергей Резников © (28.08.03 14:20)
А уже имея SFI.iIcon TIcon не пробовал задействовать ?


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


> Юрий Федоров

ImageList_GetIcon- не работает


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

function GetShellFileIcon(const FileName : string) : HICON;
var SYSIL : THandle;
SFI : TSHFileInfo;
begin
Result:=0;
FillChar(SFI, SizeOf(SFI), 0);
SysIL := SHGetFileInfo(PChar(FileName), 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
if SysIL <> 0
then Result:=ImageList_GetIcon(SysIL, SFI.iIcon, 0)
else RaiseLastOSError;

end;


Страницы:   1 2

Наверх

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