Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

BMP->ICO SYSTRAY ?TRANSPARENT?

513
24 июля 2008 года
Yurec
228 / / 21.09.2005
Други есть такая ситуация:
Создается Иконка из BMP файла

Код:
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);


Иконка создается в трее с НЕпрозрачным фоном
c_AlertIcon.Transparent:=True; проблему не решает

Есть варианты заставить TRAY иконку быть с прозрачным фоном?
6
24 июля 2008 года
George
4.1K / / 05.01.2007
Создай иконку из png'шки. Или из ico'шки. Может я конечно не прав, не проверял, но моё ИМХО, что из bmp'шки не выйдет. Не тот формат.
3.7K
24 июля 2008 года
0nni
326 / / 24.06.2008
Насколько я помню для такого случая нужно создать два битмапа, один с картинкой, а другой с ч/б маской
 
Код:
IconInfo.hbmMask := AndMask.Handle;[COLOR="RoyalBlue"]//Вот она наша масочка[/COLOR]
  IconInfo.hbmColor := XOrMask.Handle;
  Icon.Handle := CreateIconIndirect(IconInfo);

Кстати для маски можешь сделать Monochrome := true
513
24 июля 2008 года
Yurec
228 / / 21.09.2005
[QUOTE=0nni;252633]Насколько я помню для такого случая нужно создать два битмапа, один с картинкой, а другой с ч/б маской
 
Код:
IconInfo.hbmMask := AndMask.Handle;[COLOR="RoyalBlue"]//Вот она наша масочка[/COLOR]
  IconInfo.hbmColor := XOrMask.Handle;
  Icon.Handle := CreateIconIndirect(IconInfo);


В итоге получается квадрат малевича (
3.7K
24 июля 2008 года
0nni
326 / / 24.06.2008
Вот работающий кусок (выдран из DelphiWorld)
Код:
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;
513
25 июля 2008 года
Yurec
228 / / 21.09.2005
Возможно, мой косяк втом, что я все-таки раюотаю с бмпхой? Если взять ICO с прозрачным фоном, то возможно и первый вариант пройдет. А с БМП мне кажется ничего не поможет
6
25 июля 2008 года
George
4.1K / / 05.01.2007
Сразу бы брал ico. Она же для этого и нужна по идее.
513
25 июля 2008 года
Yurec
228 / / 21.09.2005
Переделал в ICO в систрее стало прозрачной - красота. НО! Все тот же ICO используется и в качестве иконки в PopupMenu.
Делаю из ICO BMP, чтобы пихнуть это изображение в аункт меню и она туда добавляется БЕЗ ПРОЗРАЧНОСТИ!!! я замучался с этими картинками.
С попумменю вообще странно, когда через инспектор объектов статическому пункту даешь картинку, она прозрачна, когда присваиваешь во время работы программы он добавляется не прозрачным.
3.7K
25 июля 2008 года
0nni
326 / / 24.06.2008
А если сделать и иконку и битмап?

Возможно неправильно добавляете
 
Код:
imagelist1.Add(Битмап, ч/бМаска);
  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);
513
25 июля 2008 года
Yurec
228 / / 21.09.2005
Если попуп связать с имаджлистом, то все работает, если делать что-то вроде
PopupMenu1.Items.Bitmap:=vbitmap, то как не извращайся с vbitmap все равно будет не прозрачно. Сделаю связт попупа с имаджлистом, как вы предложили, а то сил моих нетю.

Спасибо 0nni
3.7K
25 июля 2008 года
0nni
326 / / 24.06.2008
 
Код:
var mi : TMenuItem;
...
  mi.Bitmap.Transparent..;
  mi.Bitmap.TransparentColor...;
  mi.Bitmap.TransparentMode...;

Кажись это?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог