Форум: "Основная";
Текущий архив: 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.007 c