Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рогатые иконки, как улучшить их вид? 
:(
    Опции темы
addnr
Дата 26.8.2007, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сделал ListView со списком файлов, но вот иконки в этом списке рогато выглядят, подскажите как можно улучшить их вид?

Класс для получения иконок из файлов и папок и изображение-пример.
PM MAIL ICQ   Вверх
shurik247
Дата 27.8.2007, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Занимался както этим, только на WinAPI, надо получать их из системного листа, это должно помочь:
Код

public static System.Drawing.Icon GetFolderIcon2( IconSize size, FolderType folderType )
        {
            

            // Need to add size check, although errors generated at present!
            uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES;

            if (FolderType.Open == folderType)
            {
                flags += Shell32.SHGFI_OPENICON;
            }
            
            if (IconSize.Small == size)
            {
                flags += Shell32.SHGFI_SMALLICON;
            } 
            else 
            {
                flags += Shell32.SHGFI_LARGEICON;
            }

            flags += Shell32.SHGFI_SYSICONINDEX;

            Shell32.SHFILEINFO FI = new Shell32.SHFILEINFO();

            // System listView
            IntPtr hSysLV = Shell32.SHGetFileInfo("C:\\", 0, ref FI,
                (uint) System.Runtime.InteropServices.Marshal.SizeOf(FI),
                flags);

            
            // Get the folder icon
            Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO();
            Shell32.SHGetFileInfo(    null, 
                Shell32.FILE_ATTRIBUTE_DIRECTORY, 
                ref shfi, 
                (uint) System.Runtime.InteropServices.Marshal.SizeOf(shfi), 
                flags );


            IntPtr hIcon = CommCtl32.ImageList_GetIcon(hSysLV, shfi.iIcon, flags);

            System.Drawing.Icon.FromHandle(hIcon);    // Load the icon from an HICON handle

            // Now clone the icon, so that it can be successfully stored in an ImageList
            System.Drawing.Icon icon = (System.Drawing.Icon)System.Drawing.Icon.FromHandle(shfi.hIcon).Clone();

            User32.DestroyIcon( shfi.hIcon );        // Cleanup
            return icon;
        }    
    }
public class CommCtl32
    {
        [DllImport("comctl32.dll")]
        public static extern IntPtr ImageList_GetIcon(IntPtr himl, int i, uint flags);
    }


Добавлено через 1 минуту и 39 секунд
Да, в ImageList_GetIcon флаги другие их надо в вин айпях смотреть smile
PM MAIL   Вверх
altarvic
Дата 27.8.2007, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я тоже когда-то такое делал. Лучше всего назначить ListView системный ImageList, один раз. Не надо будет извлекать, добавлять иконки. Ставим просто индекс иконки в системной листе и все.
PM MAIL   Вверх
addnr
Дата 27.8.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



shurik247
что то твой код не хочет компилиться, даже после редактирования.
не можешь помоч?
PM MAIL ICQ   Вверх
shurik247
Дата 29.8.2007, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Енто не мой код, а твой я прсто добавил в твой файл, который ты написал пару строк:
Код

//--------------------------------------------------------------------------------
            // Что бы получить индекс иконки в системном листе
            flags += Shell32.SHGFI_SYSICONINDEX;

            // Получаем хандле системного листа с иконками
            IntPtr hSysLV = Shell32.SHGetFileInfo("C:\\", 0, ref FI,
                (uint) System.Runtime.InteropServices.Marshal.SizeOf(FI),
                flags);

            // Получаем хандле самой иконки из системного листа
            // flags сдесь надо поменять на нормальные для этой функции (типа ILD_32 вроде, но не точно)
            IntPtr hIcon = CommCtl32.ImageList_GetIcon(hSysLV, shfi.iIcon, flags);
//---------------------------------------------------------------------------------
public class CommCtl32
    {
        //-- Здесь должны еще быть флаги для этой функции, которые можно достать из сишного h файла или еще гденить
        [DllImport("comctl32.dll")]
        public static extern IntPtr ImageList_GetIcon(IntPtr himl, int i, uint flags);
    }


И у меня все компилиться
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




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


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

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