Страница 1 из 1
		
			
				Системный трей
				
Добавлено: 
28.10.2009 11:35:03 coyot.rush
				Немного погуглив по теме системный трей на шел прмерчик для Delphi, в связи счем возникли вопросы
Пример
- Код: Выделить всё
- procedure TForm1.ActionIcon(n:Integer;Icon:TIcon);
 uses ShellApi;
 ................
 Var Nim:TNotifyIconData;
 begin
 With Nim do // Заполняем структуру Nim….
 Begin
 cbSize:=SizeOf(Nim); // Размер
 Wnd:=Form1.Handle; // Хендл нашего приложения(окна)
 uID:=1;
 uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
 hicon:=Icon.Handle; // Хендл передаваемой в процедуру иконки
 uCallbackMessage:=wm_user+1;
 szTip:='Сообщение появляющееся при наведении';
 End;
 Case n OF // Действия выполняемые процедурой
 1: Shell_NotifyIcon(Nim_Add,@Nim);
 2: Shell_NotifyIcon(Nim_Delete,@Nim);
 3: Shell_NotifyIcon(Nim_Modify,@Nim);
 End;
 end
Вопросы
- Код: Выделить всё
- Wnd:=Form1.Handle;
<< В MSE вроде тагже? Но это не главное
- Код: Выделить всё
- hicon:=Icon.Handle; 
// Хендл передаваемой в процедуру иконки
Вотт тут и проблема как засунуть в бинарник иконку(и) загрузить её и получить хендл
Оригинал статьи 
http://www.xakep.ru/post/28407/default.asp 
			
		
			
				Re: Системный трей
				
Добавлено: 
28.10.2009 17:29:27 debi12345
				> 
> 
viewtopic.php?t=5074&view=unread#unread> 
> ?
The window handle of the form can be accessed by twidget.window.winid.
In order to hook into system messages use
tguiapplication.registersyseventhandler() / unregistersyseventhandler(),
needs MSEide+MSEgui SVN trunk.
Martin
 
			
		
			
				Re: Системный трей
				
Добавлено: 
29.10.2009 12:13:30 coyot.rush
				с хэнделом окна вроде всё понятно. А с иконкой как быть?
			 
			
		
			
				Re: Системный трей
				
Добавлено: 
30.10.2009 11:52:35 debi12345
				var
i:integer;
large,small :hicon;
nicons :integer;
can:tcanvas;
bit,bit2:tmaskedbitmap;
im:imagety;
begin
bit:=tmaskedbitmap.create(true);
  timage1.bitmap:=bit;
nicons:=ExtractIconEx(pchar(xx),-1,large,small,1);
 //for i:=0 to nicons-1 do
 //begin
  ExtractIconEx(pchar(xx),0,large,small,1);
 if   large<>0 then
  begin timage1.bitmap.size:= makesize(64,64);
  timage1.bitmap.init(cl_0);
 
   drawiconex
(timage1.bitmap.canvas.gchandle,0,0,large,16,16,0,0,DI_NORMAL);
 
   // timagelist2.height:=16;
     //timagelist2.width:=16;
    // timage1.bitmap.pixels[0,0]
      //timage1.bitmap.size:= makesize(16,16);
     // timage1.bitmap.savetoimage(im);
       //im.size:= makesize(64,64);
 
 
     // timage1.bitmap.loadfromimage(im);
   self.timagelist2.addimage(timage1.bitmap);
 
   self.tdataicon1.imagelist:=  self.timagelist2;
   //   timagelist2.size:=makesize(16,16) ;
  // timagelist2.height:=16;
   //  timagelist2.width:=16;
     //tdataicon1.imagenums.count:=1 ;
     //tdataicon1.imagenums.items[0]:=0;
     tdataicon1.gridvalue[0]:=0;
   // tdataicon1(SELF.twidgetgrid1.datacols[0].editwidget).gridvalue[0]:=0;
 
   //
tdataimage1(SELF.twidgetgrid1.datacols[0].editwidget).gridvalue[0]:=timage1.bitmap.;
  // tdataimage1.bitmap.size:= makesize(32,32);
  //tdataimage1.bitmap.init(cl_0);
 // tdataimage1.bitmap.savetoimage(@im);
 
       //showmessage(timage1.bitmap.savetoimagebuffer())
      //tdataimage1.format:='ico';
      // tdataimage1.gridvalue[0]:=string(@im) ;
 //  drawicon(tdataimage1.bitmap.canvas.gchandle,0,0,large);
   destroyicon(large);
  end;
			 
			
		
			
				Re: Системный трей
				
Добавлено: 
03.12.2009 19:27:19 debi12345
				На закладке "Exp" готов новый компонент TTrayWidget - он предоставляет значок в системном трее рядом с часами.
Работает и  Выни, и в Линухе. Просьба к пользователям не-мэйнстримовых менеджеров окон  (Xfce, IceWM, ...), представляющих системный трэй - протестирвать 1) рисуется ли значок вообще, 2) работает ли тестовая подсказка при наведении мыши, 3) отображается ли меню правой кнопки,.. 
Нюансы:
- использует ImageList для загрузки нескольких значков  и переключения их в рантайме
- popup рисует свой, а не средствами Выни
- выневая версия ограничена используемым небогатым сервисом ShellNotify, а вот под Линуском (с отдачей окна значка в подчинение окну трэя, но с обработкой событий окна значка в самой программе) возможны интересные вещи, типа - микро-едитбокс + микро-кпопка, представляющие микро-форму редактирования, скроллер прямо в трэе, также работают Frame-, Face- и прочие GUI-фишки. 
PS:
Мартин пишет, что Gnome работает с трэем не совсем стандартно - поэтому возможны мелкие несуразности типа "значок не хочет убраться",..
			 
			
		
			
				Re: Системный трей
				
Добавлено: 
03.12.2009 23:05:58 rellai2
				Здорово))
А никакого визуального реактора не намечается?
			 
			
		
			
				Re: Системный трей
				
Добавлено: 
03.12.2009 23:31:55 debi12345
				В смыле радактора ? 
Этот компонент в IDE и настраивается. ImageList заполняется через RClick=>Edit component.
			 
			
		
			
				Re: Системный трей
				
Добавлено: 
04.12.2009 09:01:20 rellai2
				Не, я имею ввиду что то типа Webbrowser в режиме редактирования, ну либо на худой конец RTF
			 
			
		
			
				Re: Системный трей
				
Добавлено: 
04.12.2009 11:41:07 debi12345
				ну либо на худой конец RTF
100% RTF еще предстоит делать в отдельный класс, потому что нынешний скоростной вариант не предоставляет посимвольную информацию о шрифте.
Из текстовых редакторов, думаю, что сейчас наиболее подходящим выглядит Design->TSyntaxEdit.