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

Вниз

Как добавить Item в TreeView с 32bpp иконкой, загруженной с файла   Найти похожие ветки 

 
Tahion2   (2003-07-09 21:44) [0]

Привет,

Пытаюсь программно добавить новый Item к TreeView. Причем хочу, чтоб
картинка для него грузилась с файла с иконкой, заданного мной.

Делаю так:

function TMainForm.AddTreeItem(Str, FileName: string; IconIndex:integer; Node:TTreeNode=nil):TTreeNode;
var
MyIcon: TBitmap;
LargeIcon, SmallIcon: HICON;
begin//
MyIcon:=TBitmap.Create;
MyIcon.Width:=16;
MyIcon.Height:=16;
ExtractIconEx(PChar(FileName), StrToInt(IconIndex), LargeIcon, SmallIcon, 1);
DrawiconEx(MyIcon.Canvas.Handle, 0, 0, SmallIcon, 16, 16, 1, SmallIcon, 1);
iml_Tree.Add(MyIcon, nil);

if Node=nil then
Result:=TreeView.Items.Add(Node, Language.TranslateUserMessage(Str))
else
Result:=TreeView.Items.AddChild(Node, Language.TranslateUserMessage(Str));

TreeView.Items.Item[TreeView.Items.Count-1].ImageIndex:=iml_Tree.Count-1;
TreeView.Items.Item[TreeView.Items.Count-1].SelectedIndex:=iml_Tree.Count-1;

MyIcon.Free;
destroyicon(SmallIcon); //Освобождаем память из под иконок
destroyicon(LargeIcon); //Освобождаем память из под иконок
end; //


Работает. Только, вот, не хочет правильно отображать 32bpp иконки.
Пиксели с прозрачностью делает черными. Причем проблема остается, если
компилировать в Делфи 7 и под ХР. (TImageList в Delphi7 вроде
поддерживает 32bpp иконки, по крайней мере, если добавлять иконки в
ImageList во время разработки, то отображает он их нормально).

Как решить проблему с 32bpp иконками?


 
Ученик   (2003-07-09 21:55) [1]

Если MyIcon.SaveToFile("c:\test.bmp) и посмотреть test.bmp рисунок нормальный ?


 
Seldon   (2003-07-09 22:55) [2]

ImageList.BkColor:=clWhite;
ImageList.DrawingStyle:=dsTransparent;
Мне помогло


 
Spawn   (2003-07-10 07:09) [3]

Можно, кстати, и без DrawiconEx обойтись простым присваиванием хендла от ExtractIcon хендлу екземпляра класса TIcon. За тебя всю работу проделает реализация методов класса))) То есть можно сдлать так:

MyIcon.Handle:=ExtractInconEx()


 
Tahion2   (2003-07-10 07:26) [4]

Так в том то и дело, сто в MyIcon все отображается правильно! И если сохранить, тоже правильно сохраняется.


 
Tahion2   (2003-07-10 07:53) [5]

>ImageList.BkColor:=clWhite;
>ImageList.DrawingStyle:=dsTransparent;

Не помогает, тоже.


 
Tahion2   (2003-07-10 08:02) [6]


> Можно, кстати, и без DrawiconEx обойтись простым присваиванием
> хендла от ExtractIcon хендлу екземпляра класса TIcon. За
> тебя всю работу проделает реализация методов класса))) То
> есть можно сдлать так:
>
> MyIcon.Handle:=ExtractInconEx()

Нельзя! Я вытяриваю из ico файла иконку размером 16*16, а в твоем способе, ExtractIcon возвращает 32*32. А сам ExtractIconEx хэндла не возвращает:
function ExtractIcon(hInst: HINST; lpszExeFileName: PChar;
nIconIndex: UINT): HICON;
function ExtractIconEx(lpszFile: PChar; nIconIndex: Integer;
var phiconLarge, phiconSmall: HICON; nIcons: UINT): UINT; stdcall;


 
Spawn   (2003-07-10 08:04) [7]

А зачем ты сохраняешь все в TBitMap? Может следует использовать TIcon?


 
Spawn   (2003-07-10 08:09) [8]

Размеры иконок, которые будут отображаться в TTreeView зависят от настроек TImageList, а именно от Width и Height


 
Tahion2   (2003-07-10 11:04) [9]

>А зачем ты сохраняешь все в TBitMap? Может следует использовать TIcon?

Можно и TIcon, только все равно проблема не рашается, даже если использовать его!

>Размеры иконок, которые будут отображаться в TTreeView зависят от настроек TImageList, а именно от Width и Height

В иконке (*.ico) содержатся несколько картинок: 16*16, 32*32 ...
Если извлекать иконку размером 32*32 и потом уменьшать, то она получается корявой. Если извлекать сразу 16*16 - такого не происходит


 
Tahion2   (2003-07-11 07:24) [10]

Так что, Идей больше нет?


 
Tahion2   (2003-07-11 13:56) [11]

Может кто подскажет компонент: ImageList с поддержкой 32 bit иконок?



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

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

Наверх




Память: 0.46 MB
Время: 0.008 c
3-77764
RAHS
2003-06-28 14:41
2003.07.24
Нечеткое сравнение полей


4-78195
Zevsus
2003-05-22 11:33
2003.07.24
отловить WM_SPOOLERSTATUS


7-78163
Мфдукф
2003-05-15 19:29
2003.07.24
система


4-78200
yaJohn
2003-05-22 11:21
2003.07.24
Как узнать, где был последний клик мышью


6-78033
Elon
2003-05-18 20:03
2003.07.24
TimeOut в IndyHttp?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский