Страница 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.