проблемы с палитрой
От: alexnmsk  
Дата: 27.01.03 07:09
Оценка:
Есть созданная на delphi переменаая типа TIcon и есть иконка, извлеченная при помощи WINAPI (имеем HICON)
Кто знает, можно ли палитру ли из HICON назначить для класса TIcon?
Если кто знаком с delphi, то пример на delphi плиз...


27.01.03 11:47: Перенесено модератором из 'C/C++' — ПК
Re: А это не WinAPI ли часом? (-)
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 27.01.03 07:14
Оценка:
- Искренне ваш, Поросенок Пафнутий
Re[2]: А это не WinAPI ли часом? (-)
От: alexnmsk  
Дата: 27.01.03 08:17
Оценка:
Судя по всему WinApi класса TIcon не понимает. Хотя если поможете решить задачу средствами Api буду оч признателен. В принципе тремуется извлечь определенную иконку из файла (dll, ico и т.д.), как большую так и маленькую и каждую сохранить в файле ico без потери качества.
Такое возможно?
Re[3]: А это не WinAPI ли часом? (-)
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 28.01.03 11:26
Оценка:
Здравствуйте, alexnmsk, Вы писали:

A>Судя по всему WinApi класса TIcon не понимает. Хотя если поможете решить задачу средствами Api буду оч признателен. В принципе тремуется извлечь определенную иконку из файла (dll, ico и т.д.), как большую так и маленькую и каждую сохранить в файле ico без потери качества.

A>Такое возможно?

Вполне

1. Читаем доку по ExtractIconEx...
2. Извлекаем иконки из файла с помощью этой функции.
3. Создаем экземпляр класса TIcon.
4. Делаем следующее:


TIcon* icon = new TIcon;

DWORD CountIcons = (DWORD) ExtractIconEx("C:\\Test.exe",-1,NULL,NULL,0);

if(CountIcons != NULL)
 {
  HICON* iconLarge = new HICON[CountIcons];
  HICON* iconSmall = new HICON[CountIcons];

   if(ExtractIconEx("C:\\Test.txt",0, iconLarge, iconSmall,CountIcons))
     {
      String sFileName = "C:\\"; 
       for(int i=0;i<CountIcons;i++)
        {
          icon->Handle = iconLarge[i];
          icon->SaveToFile(sFileName + "large" + IntToStr(i) + ".ico");
          DestroyIcon(iconLarge[i]);

          icon->Handle = iconSmall[i];
          icon->SaveToFile(sFileName + "small" + IntToStr(i) + ".ico");
          DestroyIcon(iconSmall[i]);


        } // for
     } // if

 delete [] iconLarge;
 delete [] iconSmall;

 } // if

delete icon;


В общем, где-то так... Код не компилил и не проверял — писал навскидку... Так чта все равно TFM на всякий случай...
Re[4]: А это не WinAPI ли часом? (-)
От: alexnmsk  
Дата: 28.01.03 11:59
Оценка:
Здравствуйте, Flamer, Вы писали:

[скипаем... ]

Собственно здесь повторился мой уже существующий код на Delphi. Все бы было очень просто, если б не было сложнее. Не знаю, как на С (нет компилятора), а на Delphi при этом из 256 цветных иконок получаю страшненькие 16-цветные. В этом и заключается суть проблемы..
Re[5]: А это не WinAPI ли часом? (-)
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 28.01.03 12:11
Оценка:
Здравствуйте, alexnmsk, Вы писали:

[]

A>Собственно здесь повторился мой уже существующий код на Delphi. Все бы было очень просто, если б не было сложнее. Не знаю, как на С (нет компилятора), а на Delphi при этом из 256 цветных иконок получаю страшненькие 16-цветные. В этом и заключается суть проблемы..


Вот ссылка — здесь. Думаю, с помощью реверс-инжиниринга приведенного исходника можно сделать то, что вам нужно...

А вот еще одна, на Дельфи — то, что вам нужно, по моему... здесь

З.Ы. И не забывайте про оверквотинг... Вернее, забудьте о нем
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.