Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Вниз

TIcon.SaveToFile обрезает иконку до 16 цветов - как лечить??   Найти похожие ветки 

 
Michael_K   (2003-07-03 16:47) [0]

Здравствуйте.
Может знает кто что нужно делать чтобы заработало следующее:

var ic:TIcon;
buf:array[0..10000]of char;
w:word;
begin
ic:=TIcon.Create;
strpcopy(buf, "c:\windows\explorer.exe"); //подставьте здесь свой путь к файлу проводника
ic.handle:=ExtractAssociatedIcon(Application.Handle, buf, w); //извлекаем иконку проводника (полноцветная, винда XP)
im.Picture.Bitmap.Height:=32;
im.Picture.Bitmap.Width:=32;
drawicon(im.Picture.Bitmap.Canvas.Handle, 0,0, ic.Handle); // тест: на Image иконка рисуется полноцветная, всё нормально
ic.SaveToFile("c:\test.ico"); // а вот здесь получаем файл, в котором находится 16-цветная иконка, на которую страшно смотреть :(
end;

Проблема в том, что никак не удаётся сохранить в файл полноцветную иконку, даже неважно каким образом полученную
(не обязательно по ExtractAssociatedIcon). Метод TIcon.SaveToFile обрезает полноцветную иконку до 16-цветной.


 
Набережных С.   (2003-07-03 21:02) [1]

Скопируй в папку проекта файл Graphics.pas и в нем сделай следующии исправления:
procedure WriteIcon(Stream: TStream; Icon: HICON; WriteLength: Boolean);
....
CheckBool(GetIconInfo(Icon, IconInfo));
try
InternalGetDIBSizes(IconInfo.hbmMask, MonoInfoSize, MonoBitsSize, 2);
// InternalGetDIBSizes(IconInfo.hbmColor, ColorInfoSize, ColorBitsSize, 16);
InternalGetDIBSizes(IconInfo.hbmColor, ColorInfoSize, ColorBitsSize, 1000);
MonoInfo := nil;
MonoBits := nil;
ColorInfo := nil;
ColorBits := nil;
try
MonoInfo := AllocMem(MonoInfoSize);
MonoBits := AllocMem(MonoBitsSize);
ColorInfo := AllocMem(ColorInfoSize);
ColorBits := AllocMem(ColorBitsSize);
InternalGetDIB(IconInfo.hbmMask, 0, MonoInfo^, MonoBits^, 2);
// InternalGetDIB(IconInfo.hbmColor, 0, ColorInfo^, ColorBits^, 16);
InternalGetDIB(IconInfo.hbmColor, 0, ColorInfo^, ColorBits^, 1000);
if WriteLength then
....
end;

Только учти, я этот способ пробовал, но полноценно не тестировал, возможны сюрпризы.



 
Poirot   (2003-07-03 21:09) [2]

use WinAPI ExtractIconEx...
two last params - is icon handlers - icons with current system color depth


 
Michael_K   (2003-07-04 00:03) [3]

to: Набережных С.
С П А С И Б О !!!
Просто нет слов :)))



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.009 c
1-55556
MSAlex
2003-07-06 00:06
2003.07.17
TTreeView. Как графически выделить елемент под мышкой.?


3-55423
Lexa2504
2003-06-24 10:07
2003.07.17
Формат ячеек в StringGrid


3-55445
Chestniy
2003-06-24 15:38
2003.07.17
Как обрубить sql запрос, который работает в отдельном потоке?


1-55653
Man
2003-07-04 13:58
2003.07.17
ошибка при запуске Дельфи


3-55390
Vladislav
2003-06-21 16:40
2003.07.17
SQLScript





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский