Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "Media";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.041 c
2-1182894622
Vlad Oshin
2007-06-27 01:50
2007.07.22
Помогите "переинициализировать" сервис


2-1183010969
Phoenix
2007-06-28 10:09
2007.07.22
TreeView , как пробежатся по нему?


2-1182875295
next22
2007-06-26 20:28
2007.07.22
TEdit..TButton и TImage


2-1182614540
cossak
2007-06-23 20:02
2007.07.22
переменная баг d7?


15-1182353896
Тохер
2007-06-20 19:38
2007.07.22
Распознование картинки. Как?





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