Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.24;
Скачать: CL | DM;

Вниз

Как добавить 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-77896
Skier
2003-07-11 12:54
2003.07.24
Left side cannot be assigned to


1-77985
Tahion2
2003-07-09 21:44
2003.07.24
Как добавить Item в TreeView с 32bpp иконкой, загруженной с файла


14-78125
Луарвик
2003-07-07 11:40
2003.07.24
Работа с ini


1-77998
Michael_K
2003-07-10 23:52
2003.07.24
ListView_SetBkImage вообще не работает


9-77710
R2D2
2003-02-01 22:32
2003.07.24
---|Ветка была без названия|---