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

Вниз

ico -> Imagelist -> bitmap   Найти похожие ветки 

 
Sergey_FV   (2006-10-28 02:15) [0]

Уважаемые мастера.

Возник вопрос, бюсь, и ни как немогу врубится.
Отображаю програмы для запуска в popupmenu с иконкой, так как програм много, все иконки загоняю в ImageList, потом просто отрисовываю в меню. Вот тут и проблема с 32бит иконками. Если добавлять иконки не посредственно в ImageList заранее, то отображается как и положено, а если програмно, фигня получается.
Метод добавления прост:

Ic:=TIcon.Create;
Ic.Handle:=GetFileIconByName(FName);// достаём иконку из файла
ImageList1.AddIcon(Ic);

Вот и не пойму как нормально отобразить иконку.


 
Ketmar ©   (2006-10-28 03:44) [1]

баян. Delphi не умеет работать с сильно многоцветными иконками. иди на сайт Rouse_(c), бери компонент, делай на его основе.


 
#0FFFF   (2006-10-28 11:20) [2]

Вот у меня отлично отображаются, поможет может?

uses
 ShellAPI, ShlObj, PsAPI, TlHelp32

function GetIcon(const FileName: string): TIcon;
var
 FileInfo: TShFileInfo;
 ImageList: TImageList;
begin
 Result := TIcon.Create;
 ImageList := TImageList.Create(nil);
 FillChar(FileInfo, SizeOf(FileInfo), #0);
 ImageList.ShareImages := true;
 ImageList.Handle := SHGetFileInfo(
   PChar(FileName),
   SFGAO_SHARE,
   FileInfo,
   SizeOf(FileInfo),
   SHGFI_SMALLICON or SHGFI_SYSICONINDEX
   );
 ImageList.GetIcon(FileInfo.iIcon, Result);
 ImageList.Free;
end;

procedure TForm1.GetProcessesList();
var
 hSnapshoot:         THandle;
 lppe:               TProcessEntry32;
 NewItem:            TMenuItem;
 ExePath:            array [0..MAX_PATH] of Char;
 PrHandle:           THandle;
begin
 hSnapshoot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 lppe.dwSize:= SizeOf(TProcessEntry32);
 if (Process32First(hSnapshoot, lppe)) then
 repeat
   PrHandle:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, lppe.th32ProcessID);
   GetModuleFileNameEx(PrHandle, 0, ExePath, SizeOf(ExePath));
   ImageList1.AddIcon(GetIcon(ExePath));
   NewItem:= TMenuItem.Create(PopupMenu1);
   NewItem.Caption:= lppe.szExeFile;
   NewItem.ImageIndex:= ImageList1.Count - 1;
   PopupMenu1.Items.Add(NewItem);
 until
   not Process32Next(hSnapshoot, lppe);
 CloseHandle (hSnapshoot);
end;


 
Ketmar ©   (2006-10-28 14:38) [3]

>[2] #0FFFF 28-Oct-2006, 11:20
>Вот у меня отлично отображаются, поможет может?
так ты TIcon не используешь. %-)


 
Sergey_FV   (2006-10-28 16:06) [4]

Мда.
#0FFFF спасибо, но не работает, вернее, работает но так же как и раньше.

Ketmar  не въехал, что за сайт? Что за компонент?


 
Ketmar ©   (2006-10-28 17:23) [5]

поиск по анкетам. Rouse_. в анкете -- ссылка на сайт (мне ещё и искать за тебя?!)


 
Sergey_FV   (2006-10-28 19:29) [6]

Спасибо, нашёл, скачал, разбираюсь :)


 
homm ©   (2006-10-29 02:32) [7]


> баян. Delphi не умеет работать с сильно многоцветными иконками.

имхо, ему и не надо. Винда должна с ними работать, а вот с виндой уж дельфи работает более менее правильно.


 
Ketmar ©   (2006-10-29 02:39) [8]

>[7] homm(c) 29-Oct-2006, 02:32
>с виндой уж дельфи работает более менее правильно.
в этом случае -- скорее "менее". потому что код TIcon. потому что не было в win95 таких иконок. %-)


 
Sergey_FV   (2006-10-29 12:33) [9]

Сделал так:
// кусь //

Ic.Handle:=(Хендл Иконки)
bmp:=tbitmap.Create;
Bmp.Height:=16;
Bmp.Width:= 16;
DrawIconEx(Bmp.Canvas.Handle,0,0,ic.Handle,GetSystemMetrics(SM_CXSMICON)
                  ,GetSystemMetrics(SM_CYSMICON),0,ic.Handle,DI_NORMAL);

ImageList1.add(bmp,nil);
bmp.Free;

// кусь //

Результат меня устраивает, отоброжает как надо.

Всем спасибо.


 
Sergey_FV   (2006-10-29 12:41) [10]

Да, ещё бы с прозрачностью разобраться, что-бы и у битмапа там-же прозрачно было как у иконки.


 
Ketmar ©   (2006-10-29 13:02) [11]

у битмапа нет прозрачности. и не было никогда. если, конечно, не рисовать руками через AlphaBlend().


 
Sergey_FV   (2006-10-29 13:57) [12]

Ясно, спасибо ещё раз.


 
Vovan#1   (2006-10-29 16:53) [13]

>у битмапа нет прозрачности. и не было никогда.

И не будет.



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

Текущий архив: 2007.07.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
2-1182846767
zvm
2007-06-26 12:32
2007.07.22
Неожиданное-рядом!! (или как прервать программу?)


4-1171368306
DVM
2007-02-13 15:05
2007.07.22
CloseHandle вызывает исключения?


15-1182793452
oxffff
2007-06-25 21:44
2007.07.22
Codegear to drop winforms designer!!!


2-1182752139
Washington
2007-06-25 10:15
2007.07.22
"Резиновый" дизайн


2-1182958390
TruePunk
2007-06-27 19:33
2007.07.22
отображение файлов в листбоксе