Форум: "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