Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Иконка в SysTray

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4

Открыть новую тему     Написать ответ в эту тему

FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
www.rxlib.ru
 
Там есть новый дистрибутив в котором имеется help и инструкции по установке.

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 20:09 22-01-2003
YakutAlex



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем спасибо за помощь. Если еще вопросы будут, то вернусь.

Всего записей: 172 | Зарегистр. 06-08-2002 | Отправлено: 10:31 23-01-2003
Serjik



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
можно ли как-нибудь отобразить в трейе более 16 цветов? или даже 4-х цветов?!

Всего записей: 471 | Зарегистр. 03-08-2002 | Отправлено: 08:33 25-06-2003 | Исправлено: Serjik, 09:01 25-06-2003
FromRedmond

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
We do not allow to list SysTray icons. So you cannot list them such way: Prev <--> Next
 
All you can do is access Systray from your application.  
Or use some Active Accesability APIs to access them. But it is another story.

Всего записей: 18 | Зарегистр. 26-07-2003 | Отправлено: 05:40 29-07-2003
Serjik



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
FromRedmond
I'm using Shell_NotifyIcon(...) API-function to add/change/remove icon in SysTray.
I desired my trouble. To correct display icon in SysTray, it must by 16-colors, original size icon in Tray is 16x16 pixels, but if you apply this icon on NOTIFYICONDATA structure, icon may be change colors of some pixels. To fix this problem, you have to resize you 16x16 icon up to 32x32, and after that apply on NOTIFYICONDATA structure.

Всего записей: 471 | Зарегистр. 03-08-2002 | Отправлено: 05:58 29-07-2003
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
cooltray.zip [http://downloads.delphi32.com/2726/5086/cooltray.zip]
классный компонент для помещения приложения в трей

----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 18:31 29-07-2003
Serjik



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mamay
компонент это хорошо, только я на VC сижу

Всего записей: 471 | Зарегистр. 03-08-2002 | Отправлено: 01:00 30-07-2003
a4n



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста! Нужно в трей поместить текст ( иконку динамически создавать из текста ). Пишу на VC++ MFC. Знаю что нужно вначале нарисовать текст, потом сделать из него картинку с помощью побитового копирования, потом сконвертировать в иконку и передать хендл. Но как это всё сделать не знаю =( Помогите.
 
Добавлено:
ну помогите =)

Всего записей: 81 | Зарегистр. 02-12-2004 | Отправлено: 12:27 04-10-2005
EAS



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ну помогите =)

С какой из частей помочь то?

Всего записей: 441 | Зарегистр. 18-07-2003 | Отправлено: 22:45 04-10-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a4n
в свое время делал.

Цитата:
 
procedure TForm1.Button1Click(Sender: TObject);
             var
               IconSizeX : integer;
               IconSizeY : integer;
               AndMask : TBitmap;
               XOrMask : TBitmap;
               IconInfo : TIconInfo;
               Icon : TIcon;
               OldBkMode    : integer;
               OverRect  :  TBitmap;
             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:=clBlack;
               AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
{               OverRect.Canvas.Brush.Color:=clBlack;
               OverRect.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
               OverRect.Canvas.Brush.Color :=clBlack;
               OverRect.Canvas.FillRect(Rect(3, 3, 3+((IconSizeX-6)*Percent div 100), IconSizeY-4));
 
//               AndMask.Canvas.Brush.Color := clBlack;
               AndMask.Canvas.Font.Size:=13;
               AndMask.Canvas.Font.Style:=[fsBold];
               AndMask.Canvas.Font.Color:=clWhite;
               OldBkMode := SetBkMode(AndMask.Canvas.Handle,TRANSPARENT);
               AndMask.Canvas.TextOut(3, 8, Format('%3d',[Percent]));
               SetBkMode(AndMask.Canvas.Handle, OldBkMode);
               AndMask.Canvas.CopyMode:=cmSrcInvert;
               AndMask.Canvas.Draw(0,0,OverRect);}
               {Draw as a test}
               Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, AndMask);
//               Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, OverRect);
              {Create the "XOr" mask}
               OverRect:=TBitmap.Create;
               XOrMask := TBitmap.Create;
               XOrMask.Width := IconSizeX;
               XOrMask.Height := IconSizeY;
               OverRect.Monochrome :=False;
               OverRect.Width := IconSizeX;
               OverRect.Height := IconSizeY;
 
 
              {Draw on the "XOr" mask}
               XorMask.Canvas.Brush.Color := clBlack;
               XorMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
               OverRect.Canvas.Brush.Color:=clWhite;
               OverRect.Canvas.FillRect(Rect(2, 2, IconSizeX, IconSizeY));
               OverRect.Canvas.Brush.Color :=clNavy;
               OverRect.Canvas.FillRect(Rect(2, 2, 2+((IconSizeX)*Percent div 100), IconSizeY));
               XorMask.Canvas.Font.Size:=20;
               XorMask.Canvas.Font.Style:=XorMask.Canvas.Font.Style+[fsBold,fsItalic];
               OldBkMode := SetBkMode(XorMask.Canvas.Handle,TRANSPARENT);
               XorMask.Canvas.Font.Color:=clNavy xor clWhite;
               XOrMask.Canvas.TextRect(Rect(0, 0, IconSizeX, IconSizeY),1,0, Format('%2d',[Percent]));
               SetBkMode(XorMask.Canvas.Handle, OldBkMode);
               XorMask.Canvas.CopyMode:=cmSrcInvert;
               XorMask.Canvas.Draw(0,0,OverRect);
               XorMask.Canvas.MoveTo(0,IconSizeY);
               XorMask.Canvas.Pen.Color:= clBlack;
               XorMask.Canvas.Pen.Width:=4;
               XorMask.Canvas.LineTo(0,0);
               XorMask.Canvas.LineTo(IconSizeX,0);
 
               OverRect.Free;
 
              {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}
               DrawIcon(Form1.Canvas.Handle,300,300,Icon.Handle);
 
              {Assign the application icon}
               Tray.Icon := Icon;
//               Tray.Enabled:=True;
 
              {Force a repaint}
               InvalidateRect(Application.Handle, nil, true);
               if Percent=100 then Timer1.Enabled:=False;
              {Free the icon}
               Icon.Free;
               Inc(Percent);
             end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
     Percent:=1;
end;
 
 



----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:54 05-10-2005
EAS



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
 Нужно в трей поместить текст ( иконку динамически создавать из текста ). Пишу на VC++ MFC

Если не принимать во внимание, что в MFC нет таких маленьких радостей как TIcon и компонентов для создания tray icon , то cool
 
a4n
Если хочешь все самостоятельно накодить, то спрашивай, что конкретно не ясно/понятно. Если хочется примеры кода/исходники и т.п. (+с английским не враждуешь), то советую поискать на codeproject.com. Там этого гуталина...

Всего записей: 441 | Зарегистр. 18-07-2003 | Отправлено: 22:01 05-10-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
EAS

Цитата:
Если не принимать во внимание, что в MFC нет таких маленьких радостей как TIcon и компонентов для создания tray icon , то cool

Я не думаю, что трудно будет перейти от ВЦЛ к АПИ. Просто мне это не надо, я привел рабочий пример, а перевести на нужный язык я думаю труда не составит.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:14 06-10-2005
a4n



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят, спасибо за то, что пытаетесь мне помоч. Сейчас я постараюсь уточнить чтои именно мне не понятно Значит я создаю битмап ( картинку с текстом ):
   CClientDC dc(this); // ------- слздаём bitmap и рисуем картинку -----------
   CRect rect;
   CDC dcMem;
   CBitmap bitmap, *pBitmap;
   HFONT font;
   font = CreateFont(17/*ширина*/ , 6 /*высота*/,0,0,400,false,    
                         true,false,DEFAULT_CHARSET, OUT_CHARACTER_PRECIS ,  
                         CLIP_CHARACTER_PRECIS,PROOF_QUALITY, VARIABLE_PITCH,  
                         CString("Courier New"));
   dcMem.CreateCompatibleDC(&dc);
   SelectObject(dcMem,font);
   rect.left=0;  
   rect.top=0;
   rect.right=16;
   rect.bottom=16;
   bitmap.CreateCompatibleBitmap(&dc,rect.right,rect.bottom);
   pBitmap=dcMem.SelectObject(&bitmap);
   dcMem.DrawText(CString(infa),rect,DT_CENTER|DT_VCENTER);
   dc.BitBlt(0,0,rect.right,rect.bottom,&dcMem,0,0,SRCCOPY);  
 
Теперь у меня на форме рисуеться рисунок 16х16, с текстом из переменной infa ( ну там число простое к примеру 150 ). Далее как я понял надо создать AND и XOR маску, потом описать структуру HICON и с помощью функции Createiconinderect создать иконку Но я не понял как сделать маски эти =( Если есть исходники буду рад, но лучше конешно обьяснить что да как Заранее спасибо Вам!
 
p.s код на дельфи я смотрел, но перевести его на mfc не смог =(

Всего записей: 81 | Зарегистр. 02-12-2004 | Отправлено: 17:22 09-10-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a4n
Вверху рабочий пример программы, чем тебе не исходники? Или нужно еще перевести на АПИ? Если второе, то сам сделай, там ничего трудного нет, все операции аналогичные, просто возьми их аналоги из АПИ.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:13 10-10-2005
a4n



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Мне про маски непонятно как их сделать =\ для чего они.

Всего записей: 81 | Зарегистр. 02-12-2004 | Отправлено: 14:54 10-10-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a4n
Маски нужны, чтобы сделать из 2 битмапов иконку. Так как если посмотришь на TIconInfo то для создания иконки нужны 2 маски. Как создать. блин да посмотри ты на пример. Только вместо Tbitmap манипулируй с СBitmap или что там у вас в MFC, я подобное делал на АПИ, правда не иконку, но работа с битмапами.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:58 11-10-2005
a4n



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
а почему из 2-х ? чем отличаютсья XOR от AND ? или они абсолютно одинаковые ?

Всего записей: 81 | Зарегистр. 02-12-2004 | Отправлено: 10:23 11-10-2005
devchaos



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
NOTIFYICONDATA pnid;
 
pnid.cbSize=sizeof(NOTIFYICONDATA);
pnid.hWnd=hwnd;
pnid.uID=101;
pnid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
pnid.uCallbackMessage=1001;
pnid.hIcon=LoadIcon(NULL, IDI_APPLICATION);
strcpy(pnid.szTip,_T("Тест"));
Shell_NotifyIcon(NIM_ADD,&pnid);




В красноречии в другом месте упражняйся.
И к чему ты этот код привел? Вообще вопрос бы вначале прочитал.

Всего записей: 45 | Зарегистр. 08-10-2005 | Отправлено: 11:12 11-10-2005 | Исправлено: ShIvADeSt, 01:42 12-10-2005
a4n



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
уже почти получилось, потом код покажу =)

Всего записей: 81 | Зарегистр. 02-12-2004 | Отправлено: 14:28 11-10-2005 | Исправлено: a4n, 16:24 11-10-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a4n

Цитата:
а почему из 2-х ? чем отличаютсья XOR от AND ? или они абсолютно одинаковые ?

А хелп читать по структуре ICONINFO для CreateIconIndirect Не пробовал? Вот кусок оттуда

Цитата:
 
hbmMask
 
Specifies the icon bitmask bitmap. If this structure defines a black and white icon, this bitmask is formatted so that the upper half is the icon AND bitmask and the lower half is the icon XOR bitmask. Under this condition, the height should be an even multiple of two. If this structure defines a color icon, this mask only defines the AND bitmask of the icon.  
 
hbmColor
 
Identifies the icon color bitmap. This member can be optional if this structure defines a black and white icon. The AND bitmask of hbmMask is applied with the SRCAND flag to the destination; subsequently, the color bitmap is applied (using XOR) to the destination by using the SRCINVERT flag.  
 

как не трудно заметить нужно ДВЕ битмапы, в тонкостях не разбирался, но то что сделал - рабочий код. Для того, чтобы определить, одинаковы ли они, посмотри метод их создания, вроде бы нет.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:53 12-10-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Иконка в SysTray


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru