http://forum.sources.ru/index.php?showtopic=126092&view=findpost&p=981950
| Код | function GetRegistryIconHandle(FileName: string): HICON; var R: TRegistry; Alias, //псевдвним для расширения в реестре IconPath,Ext: string; //путь для файла с иконкой IconNum, //номер иконки в файле QPos: Integer; //позиция запятой в записи реестра begin IconNum := 0; Ext:=ExtractFileExt(FileName); if (Ext='.exe') or (ext='.EXE') then ext:='.com';
R := TRegistry.Create;
try R.RootKey := HKEY_CLASSES_ROOT;
//чтение псевданима if R.OpenKey('\' + Ext, 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); if result=0 then Result:=LoadIcon(Hinstance,'NO_FILE'); end;
|
Как я понимаю, что этот код возвращает слишком большую иконку, когда её рисуешь в гриде, то качество не очень. Что нужно поменять в этой функции, чтобы она возвращала иконку размером 16х16? К сожалению, я с графикой не очень подружился.
Добавлено через 2 минуты и 37 секунд Вот так в гриде (cxGrid) рисую в событии OnCustomDrawCell
| Код | DrawIconEx(ACanvas.Handle, AViewInfo.ClientBounds.Left + 1, AViewInfo.ClientBounds.Top + 1, vIconHandle, 16, 16, 0, 0, DI_NORMAL);
|
|