Главная страница
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.028 c
15-1182775304
pasha_golub
2007-06-25 16:41
2007.07.22
Miranda не подключается к ICQ


15-1182478313
Slider007
2007-06-22 06:11
2007.07.22
С днем рождения ! 22 июня 2007 пятница


2-1182756200
makvell
2007-06-25 11:23
2007.07.22
Сохранение в блоб


8-1162199088
Lebedev
2006-10-30 12:04
2007.07.22
MediaPlayer не приигрывает avi видео-ролик цифрового фотика.


2-1182604220
Alexdeil
2007-06-23 17:10
2007.07.22
Работа с формой из библиотеки (dll)