Главная страница
    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.47 MB
Время: 0.008 c
3-77776
tERRORist
2003-07-02 12:26
2003.07.24
Двойные параметры ADO


1-77850
Dyuzhev
2003-07-11 11:32
2003.07.24
скрыть всплывающее меню TPopupMenu


7-78167
Still Swamp
2003-05-13 14:28
2003.07.24
Общий вопрос по RS232


1-77910
Khloo
2003-07-10 12:19
2003.07.24
Как создать отчёт из таблицы для печати...


1-77982
lex7
2003-07-11 11:18
2003.07.24
Цвет MainMenu





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