Системный трей

Вопросы программирования и использования MSEide + MSEgui.

Модератор: Модераторы

Системный трей

Сообщение coyot.rush » 28.10.2009 11:35:03

Немного погуглив по теме системный трей на шел прмерчик для 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
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Системный трей

Сообщение debi12345 » 28.10.2009 17:29:27

>
> 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
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Системный трей

Сообщение coyot.rush » 29.10.2009 12:13:30

с хэнделом окна вроде всё понятно. А с иконкой как быть?
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Системный трей

Сообщение debi12345 » 30.10.2009 11:52:35

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;
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Системный трей

Сообщение debi12345 » 03.12.2009 19:27:19

На закладке "Exp" готов новый компонент TTrayWidget - он предоставляет значок в системном трее рядом с часами.
Работает и Выни, и в Линухе. Просьба к пользователям не-мэйнстримовых менеджеров окон (Xfce, IceWM, ...), представляющих системный трэй - протестирвать 1) рисуется ли значок вообще, 2) работает ли тестовая подсказка при наведении мыши, 3) отображается ли меню правой кнопки,..

Нюансы:
- использует ImageList для загрузки нескольких значков и переключения их в рантайме
- popup рисует свой, а не средствами Выни
- выневая версия ограничена используемым небогатым сервисом ShellNotify, а вот под Линуском (с отдачей окна значка в подчинение окну трэя, но с обработкой событий окна значка в самой программе) возможны интересные вещи, типа - микро-едитбокс + микро-кпопка, представляющие микро-форму редактирования, скроллер прямо в трэе, также работают Frame-, Face- и прочие GUI-фишки.

PS:
Мартин пишет, что Gnome работает с трэем не совсем стандартно - поэтому возможны мелкие несуразности типа "значок не хочет убраться",..
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Системный трей

Сообщение rellai2 » 03.12.2009 23:05:58

Здорово))
А никакого визуального реактора не намечается?
rellai2
постоялец
 
Сообщения: 135
Зарегистрирован: 18.09.2008 11:37:45

Re: Системный трей

Сообщение debi12345 » 03.12.2009 23:31:55

В смыле радактора ?
Этот компонент в IDE и настраивается. ImageList заполняется через RClick=>Edit component.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Системный трей

Сообщение rellai2 » 04.12.2009 09:01:20

Не, я имею ввиду что то типа Webbrowser в режиме редактирования, ну либо на худой конец RTF
rellai2
постоялец
 
Сообщения: 135
Зарегистрирован: 18.09.2008 11:37:45

Re: Системный трей

Сообщение debi12345 » 04.12.2009 11:41:07

ну либо на худой конец RTF

100% RTF еще предстоит делать в отдельный класс, потому что нынешний скоростной вариант не предоставляет посимвольную информацию о шрифте.

Из текстовых редакторов, думаю, что сейчас наиболее подходящим выглядит Design->TSyntaxEdit.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)


Вернуться в MSEide + MSEgui

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru