c_AlertIcon:TIcon
v_Bitmap: TBitmap;
IconInfo: TIconInfo;
.....
v_Bitmap.LoadFromFile('alert.bmp');
IconInfo.fIcon := true;
IconInfo.xHotspot := 0;
IconInfo.yHotspot := 0;
IconInfo.hbmMask := v_Bitmap.Handle;
IconInfo.hbmColor:= v_Bitmap.Handle;
c_AlertIcon.Handle := CreateIconIndirect(IconInfo);
BMP->ICO SYSTRAY ?TRANSPARENT?
Создается Иконка из BMP файла
Код:
Иконка создается в трее с НЕпрозрачным фоном
c_AlertIcon.Transparent:=True; проблему не решает
Есть варианты заставить TRAY иконку быть с прозрачным фоном?
Создай иконку из png'шки. Или из ico'шки. Может я конечно не прав, не проверял, но моё ИМХО, что из bmp'шки не выйдет. Не тот формат.
Код:
IconInfo.hbmMask := AndMask.Handle;[COLOR="RoyalBlue"]//Вот она наша масочка[/COLOR]
IconInfo.hbmColor := XOrMask.Handle;
Icon.Handle := CreateIconIndirect(IconInfo);
IconInfo.hbmColor := XOrMask.Handle;
Icon.Handle := CreateIconIndirect(IconInfo);
Кстати для маски можешь сделать Monochrome := true
Код:
IconInfo.hbmMask := AndMask.Handle;[COLOR="RoyalBlue"]//Вот она наша масочка[/COLOR]
IconInfo.hbmColor := XOrMask.Handle;
Icon.Handle := CreateIconIndirect(IconInfo);
IconInfo.hbmColor := XOrMask.Handle;
Icon.Handle := CreateIconIndirect(IconInfo);
В итоге получается квадрат малевича (
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
IconSizeX: integer;
IconSizeY: integer;
AndMask: TBitmap;
XOrMask: TBitmap;
IconInfo: TIconInfo;
Icon: TIcon;
begin
{Get the icon size}
IconSizeX := GetSystemMetrics(SM_CXICON);
IconSizeY := GetSystemMetrics(SM_CYICON);
{Create the "And" mask}
AndMask := TBitmap.Create;
AndMask.Monochrome := true;
AndMask.Width := IconSizeX;
AndMask.Height := IconSizeY;
{Draw on the "And" mask}
AndMask.Canvas.Brush.Color := clWhite;
AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
AndMask.Canvas.Brush.Color := clBlack;
AndMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);
{Draw as a test}
Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, AndMask);
{Create the "XOr" mask}
XOrMask := TBitmap.Create;
XOrMask.Width := IconSizeX;
XOrMask.Height := IconSizeY;
{Draw on the "XOr" mask}
XOrMask.Canvas.Brush.Color := ClBlack;
XOrMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
XOrMask.Canvas.Pen.Color := clRed;
XOrMask.Canvas.Brush.Color := clRed;
XOrMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);
{Draw as a test}
Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask);
{Create a icon}
Icon := TIcon.Create;
IconInfo.fIcon := true;
IconInfo.xHotspot := 0;
IconInfo.yHotspot := 0;
IconInfo.hbmMask := AndMask.Handle;
IconInfo.hbmColor := XOrMask.Handle;
Icon.Handle := CreateIconIndirect(IconInfo);
{Destroy the temporary bitmaps}
AndMask.Free;
XOrMask.Free;
{Draw as a test}
Form1.Canvas.Draw(IconSizeX * 6, IconSizeY, Icon);
{Assign the application icon}
Application.Icon := Icon;
{Force a repaint}
InvalidateRect(Application.Handle, nil, true);
{Free the icon}
Icon.Free;
end;
var
IconSizeX: integer;
IconSizeY: integer;
AndMask: TBitmap;
XOrMask: TBitmap;
IconInfo: TIconInfo;
Icon: TIcon;
begin
{Get the icon size}
IconSizeX := GetSystemMetrics(SM_CXICON);
IconSizeY := GetSystemMetrics(SM_CYICON);
{Create the "And" mask}
AndMask := TBitmap.Create;
AndMask.Monochrome := true;
AndMask.Width := IconSizeX;
AndMask.Height := IconSizeY;
{Draw on the "And" mask}
AndMask.Canvas.Brush.Color := clWhite;
AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
AndMask.Canvas.Brush.Color := clBlack;
AndMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);
{Draw as a test}
Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, AndMask);
{Create the "XOr" mask}
XOrMask := TBitmap.Create;
XOrMask.Width := IconSizeX;
XOrMask.Height := IconSizeY;
{Draw on the "XOr" mask}
XOrMask.Canvas.Brush.Color := ClBlack;
XOrMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
XOrMask.Canvas.Pen.Color := clRed;
XOrMask.Canvas.Brush.Color := clRed;
XOrMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);
{Draw as a test}
Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask);
{Create a icon}
Icon := TIcon.Create;
IconInfo.fIcon := true;
IconInfo.xHotspot := 0;
IconInfo.yHotspot := 0;
IconInfo.hbmMask := AndMask.Handle;
IconInfo.hbmColor := XOrMask.Handle;
Icon.Handle := CreateIconIndirect(IconInfo);
{Destroy the temporary bitmaps}
AndMask.Free;
XOrMask.Free;
{Draw as a test}
Form1.Canvas.Draw(IconSizeX * 6, IconSizeY, Icon);
{Assign the application icon}
Application.Icon := Icon;
{Force a repaint}
InvalidateRect(Application.Handle, nil, true);
{Free the icon}
Icon.Free;
end;
Возможно, мой косяк втом, что я все-таки раюотаю с бмпхой? Если взять ICO с прозрачным фоном, то возможно и первый вариант пройдет. А с БМП мне кажется ничего не поможет
Сразу бы брал ico. Она же для этого и нужна по идее.
Делаю из ICO BMP, чтобы пихнуть это изображение в аункт меню и она туда добавляется БЕЗ ПРОЗРАЧНОСТИ!!! я замучался с этими картинками.
С попумменю вообще странно, когда через инспектор объектов статическому пункту даешь картинку, она прозрачна, когда присваиваешь во время работы программы он добавляется не прозрачным.
Возможно неправильно добавляете
Код:
imagelist1.Add(Битмап, ч/бМаска);
imagelist1.AddMasked(битмап, Прозрачный цвет)
imagelist1.AddMasked(битмап, Прозрачный цвет)
Прозрачный цвет лучше получать так
Код:
myBitmap.canvas.pixels[0,0];//За прозрачный цвет берем левый верний пиксель
У ImageList есть метод AddIcon:
Код:
var mi : TMenuItem;
iIndex : Integer;
begin
iIndex := imagelist1.AddIcon(Application.Icon);
mi := TMenuItem.Create(PopUpMenu1);
mi.Caption := 'Application icon';
mi.ImageIndex := iIndex;
PopupMenu1.Items.Add(mi);
iIndex : Integer;
begin
iIndex := imagelist1.AddIcon(Application.Icon);
mi := TMenuItem.Create(PopUpMenu1);
mi.Caption := 'Application icon';
mi.ImageIndex := iIndex;
PopupMenu1.Items.Add(mi);
PopupMenu1.Items.Bitmap:=vbitmap, то как не извращайся с vbitmap все равно будет не прозрачно. Сделаю связт попупа с имаджлистом, как вы предложили, а то сил моих нетю.
Спасибо 0nni
Код:
var mi : TMenuItem;
...
mi.Bitmap.Transparent..;
mi.Bitmap.TransparentColor...;
mi.Bitmap.TransparentMode...;
...
mi.Bitmap.Transparent..;
mi.Bitmap.TransparentColor...;
mi.Bitmap.TransparentMode...;
Кажись это?