![]() |
![]() ![]() ![]() ![]() |
|
Объединение двух иконокDelphi , Графика и Игры , ICOОбъединение двух иконок
Оформил: DeeCo
{
I want to combine 2 icons like Windows does with
the links (the small arrow).
Can anyone tell me how that works?
}
function CombineIcons(FrontIcon, BackIcon: HIcon): HIcon;
var
WinDC: HDC;
FrontInfo: TIconInfo;
FrontDC: HDC;
FrontSv: HBITMAP;
BackInfo: TIconInfo;
BackDC: HDC;
BackSv: HBITMAP;
BmpObj: tagBitmap;
begin
WinDC := GetDC(0);
GetIconInfo(FrontIcon, FrontInfo);
FrontDC := CreateCompatibleDC(WinDC);
FrontSv := SelectObject(FrontDC, FrontInfo.hbmMask);
GetIconInfo(BackIcon, BackInfo);
BackDC := CreateCompatibleDC(WinDC);
BackSv := SelectObject(BackDC, BackInfo.hbmMask);
GetObject(FrontInfo.hbmMask, SizeOf(BmpObj), @BmpObj);
BitBlt(BackDC, 0,0,BmpObj.bmWidth, BmpObj.bmHeight, FrontDC, 0,0,SRCAND);
SelectObject(BackDC, BackInfo.hbmColor);
DrawIconEx(BackDC, 0,0,FrontIcon, 0,0,0,0,DI_NORMAL);
Result := CreateIconIndirect(BackInfo);
SelectObject(FrontDC, FrontSv);
DeleteDC(FrontDC);
SelectObject(BackDC, BackSv);
DeleteDC(BackDC);
ReleaseDC(0,WinDC);
DeleteObject(FrontInfo.hbmColor);
DeleteObject(FrontInfo.hbmMask);
DeleteObject(BackInfo.hbmColor);
DeleteObject(BackInfo.hbmMask);
end;
// Remember: The icon created with this function must be destroyed with
// DestroyIcon() function when finished using it.
Программный код на Delphi, который комбинирует два иконки, аналогично тому, как Windows комбинирует иконки для ссылок (например, маленький стрелка). Код создает новую иконку, overlaying одну иконку на другую. Вот шаг за шагом, что код делает:
Комментарий в конце напоминает пользователю, что созданная иконка должна быть уничтожена с помощью функции В альтернативном решении для современных версий Delphi (XE2 и позднее): В этом альтернативном решении функция Объединение двух иконок в одну с использованием функции CombineIcons, которая позволяет комбинировать переднюю и заднюю части иконок Windows-стиля с помощью битблита и рисования иконки. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||