Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизFAQ: Добавление иконки в SysTray Найти похожие ветки
← →
Piter © (2004-03-24 18:54) [0]Пора, я думаю, от слов переходить к делу. Над сайтом надо работать, предлагаю улучшать FAQ. И начать предлагаю с известного всем вопроса. А то говорим - вопросы ламерские, так теперь я понимаю отчего они такие.
Сразу хочу оговорить - пишите только по делу, обсуждать хорошая идея/плохая НЕ НАДО. Только замечания по FAQ"у, по рассматриваемым вопросам. Всякие лишние комментарии оставляйте при себе. Модераторов прошу жестко пресекать разный флуд.
Ведущим назначаю себя, это давайте пока тоже не обсуждать. Кто раньше бы захотел - уже создал подобную ветвь. Пока предлагаю обсудить вопрос про иконку, ибо в FAQ"е видим следующее:
function TaskBarAddIcon( hWindow : THandle; ID : Cardinal; ICON : hicon; CallbackMessage : Cardinal; Tip : String ) : Boolean;
var
NID : TNotifyIconData;
begin
FillChar( NID, SizeOf( TNotifyIconData ), 0 );
with NID do
begin
cbSize := SizeOf( TNotifyIconData );
Wnd := hWindow;
uID := ID;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage := CallbackMessage;
hIcon := Icon;
if Length( Tip ) > 63 then
SetLength( Tip, 63 );
StrPCopy( szTip, Tip );
end;
Result := Shell_NotifyIcon( NIM_ADD, @NID );
end;
Что эта функция делает, что такое TNotifyIconData, чего ей передавать - непонятно.
← →
Piter © (2004-03-24 18:54) [0]Пора, я думаю, от слов переходить к делу. Над сайтом надо работать, предлагаю улучшать FAQ. И начать предлагаю с известного всем вопроса. А то говорим - вопросы ламерские, так теперь я понимаю отчего они такие.
Сразу хочу оговорить - пишите только по делу, обсуждать хорошая идея/плохая НЕ НАДО. Только замечания по FAQ"у, по рассматриваемым вопросам. Всякие лишние комментарии оставляйте при себе. Модераторов прошу жестко пресекать разный флуд.
Ведущим назначаю себя, это давайте пока тоже не обсуждать. Кто раньше бы захотел - уже создал подобную ветвь. Пока предлагаю обсудить вопрос про иконку, ибо в FAQ"е видим следующее:
function TaskBarAddIcon( hWindow : THandle; ID : Cardinal; ICON : hicon; CallbackMessage : Cardinal; Tip : String ) : Boolean;
var
NID : TNotifyIconData;
begin
FillChar( NID, SizeOf( TNotifyIconData ), 0 );
with NID do
begin
cbSize := SizeOf( TNotifyIconData );
Wnd := hWindow;
uID := ID;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage := CallbackMessage;
hIcon := Icon;
if Length( Tip ) > 63 then
SetLength( Tip, 63 );
StrPCopy( szTip, Tip );
end;
Result := Shell_NotifyIcon( NIM_ADD, @NID );
end;
Что эта функция делает, что такое TNotifyIconData, чего ей передавать - непонятно.
← →
Piter © (2004-03-24 18:56) [1]Моя версия.
Для работы с SysTray"ем (область где часики) в WinApi есть всего лишь одна функция - Shell_NotifyIcon. С помощью нее можно добавлять свои иконки в SysTray, модифицировать их и удалять.
Вот ее описание:
function Shell_NotifyIcon(dwMessage: DWORD; lpData: PNotifyIconData): BOOL; stdcall;
Ее заголовок, а также определение типов TNotifyIconData, PNotifyIconData находится в юните shellapi.pas
Первый параметр dwMessage указывает, что вы хотите сделать: добавить иконку, удалить или модифицировать существующую.
Соответственно, может принимать такие значения:
NIM_ADD
NIM_DELETE
NIM_MODIFY
Следующий параметр lpData - это указатель на запись TNotifyIconData, которая описана так:
TNotifyIconData = record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
szTip: array [0..63] of AnsiChar;
end;
cbSize - размер этой самой структуры TNotifyIconData. Легко вычисляется с помощью sizeof
Wnd - номер окна, которое будет принимать сообщения от иконки
uID - уникальный номер иконки в вашем приложении
uFlags - флаги, показывающие какие поля TNotifyIconData должны быть обработаны системой
uCallbackMessage - если в uFlags установлено NIF_MESSAGE, то uCallbackMessage указывает номер сообщения, которое будет послано окну под номером Wnd
hIcon - если в uFlags установлено NIF_ICON, то hIcon показывает номер иконки, которая будет будет отображаться в SysTray"е
szTip - если в uFlags установлено NIF_TIP, то szTip задает всплывающий текст, который отображается при наведении курсора мышки на иконку
Ну вот собственно и все, что нужно знать для того, чтобы "запуздырить" свою иконку в SysTray.
В программе где-то имеет смысл объявить глобальную переменную, например NID типа TNotifyIconData.var NID: TNotifyIconData;
Глобально - потому что эта переменная понадобится, чтобы удалять иконку и модифицировать ее.
Осталось рассмотреть конкретную реализацию.procedure TForm1.Button1Click(Sender: TObject);
begin
NID.uID :=0;
NID.Wnd := Handle;
NID.uCallbackMessage :=WM_USER;
NID.hIcon := LoadIcon(HINSTANCE,"ICON1");
NID.szTip := "Моя иконка";
NID.uFlags :=NIF_ICON or NIF_MESSAGE or NIF_TIP;
NID.cbSize :=sizeof(NID);
Shell_NotifyIcon(NIM_ADD,@NID);
end;NID.uID :=0;
уникальный номер иконки в приложении. Если у вас несколько иконок в одном приложении, то это позволит вам их различать. У нас иконка одна, так что ставим что угодно. Например, ноль.NID.Wnd := Handle;
Выбираем окно, которое будет обрабатывать сообщение от иконки. В моем тестовом приложении только одна форма, одно окно, его и выбираю.
Выбираемое окно должно иметь процедуру обработки сообщения.NID.uCallbackMessage :=WM_USER;
Выбираем номер сообщения, которое будет послано нашему окну, как только с иконкой произведут какие-либо действия.
Для наших личных сообщений Microsoft рекомендует использовать номера от WM_USER до 0x7FFF. Выбираем WM_USERNID.hIcon := LoadIcon(HINSTANCE,"ICON1");
Тут загружаем изображение, иконку, которая будет отображена в SysTtay. По этому пункту почему-то возникает много вопросов, типа "а как загрузить-то?".
Это, наверное, тема для очередного вопроса в FAQ, но кратко расскажу как можно. Запускаете "Tools->ImageEditor" и создаете новый "Resource File" или открываете существующий (только не главный ресурсный файл вашего приложения, типа project1.res).
Рисуете иконку под именем ICON1, сохраняете ресурсный файл под именем icon.res, кладете файл в каталог с программой.
В модуле формы, где используется LoadIcon, после {$R *.dfm} пишете {$R icon.RES}, после чего Delphi включит ресурсы вашего icon1.res в создаваемый exe файл. В том числе включит иконку ICON1.
После чего эту иконку можно загрузить как показано выше.NID.szTip := "Моя иконка";
Просто задаете текст всплывающей подсказки. Так как объявлено:
szTip: array [0..63] of AnsiChar;
то соответственно, подсказка не должна быть длиннее 64 символов.NID.uFlags :=NIF_ICON or NIF_MESSAGE or NIF_TIP;
задаются флаги, которые показывают, какие поля TNotifyIconData должны учитываться системой. Мы заполнили и hIcon, и uCallbackMessage, и szTip. Соответственно, пусть они все будут учитываться.NID.cbSize :=sizeof(NID);
просто задается размер TNotifyIconData. Эта строчка всегда будет именно такой.Shell_NotifyIcon(NIM_ADD,@NID);
собственно говоря, вызывается функция Shell_NotifyIcon с нужными параметрами (так как должен передаваться указатель на структуру, а не сама TNotifyIconData, то поэтому @NID, а не просто NID). Можно анализировать значение, возвращаемое функцией. True в случае успешного добавления иконки и False в случае неуспеха.
Созданную иконку можно удалить. Например, это следует делать при завершении приложения:procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@NID);
end;
Если вы хотите модифицировать текст всплывающей подсказки или отобразить другую иконку вместо прежней, то просто перезаполните нужное поле NID и вызовете:Shell_NotifyIcon(NIM_MODIFY,@NID);
Но это не все, иконку мы добавили, но ведь нужно как-то обрабатывать события, такие, например, как клик мышкой по иконке.
Именно для этого форма, которая будет получать события от иконки (на которую указывает параметр Wnd), должна иметь обработчик сообщений. Мы определили сообщение как WM_USER. Соответственно, добавим к нашей форме нужную процедуру:procedure IconMessage (var Msg: TMessage); message wm_USER;
А теперь остается только реализовать ее. Например, мы хотим, чтобы при клике левой кнопкой по иконке выводился бокс с сообщением:procedure TForm1.IconMessage(var Msg: TMessage);
begin
if Msg.lParam = WM_LBUTTONDOWN then
showmessage("По иконке кликнули левой кнопкой мыши!");
end;
А по клику правой кнопки хотим вывести существующее PopUp меню:procedure TForm1.IconMessage(var Msg: TMessage);
var
Pt: TPoint;
begin
if Msg.lParam = wm_RBUTTONDOWN then
begin
GetCursorPos (Pt);
PopupMenu1.Popup (Pt.x, Pt.y);
end;
end;
Ну и совсем напоследок хочу предупредить, что иконка автоматически удаляется как только окно Wnd, указанное в TNotifyIconData, удаляется из системы. Это может произойти не только при закрытии приложения, а, например, при смене BorderStyle у формы.
← →
Piter © (2004-03-24 18:56) [1]Моя версия.
Для работы с SysTray"ем (область где часики) в WinApi есть всего лишь одна функция - Shell_NotifyIcon. С помощью нее можно добавлять свои иконки в SysTray, модифицировать их и удалять.
Вот ее описание:
function Shell_NotifyIcon(dwMessage: DWORD; lpData: PNotifyIconData): BOOL; stdcall;
Ее заголовок, а также определение типов TNotifyIconData, PNotifyIconData находится в юните shellapi.pas
Первый параметр dwMessage указывает, что вы хотите сделать: добавить иконку, удалить или модифицировать существующую.
Соответственно, может принимать такие значения:
NIM_ADD
NIM_DELETE
NIM_MODIFY
Следующий параметр lpData - это указатель на запись TNotifyIconData, которая описана так:
TNotifyIconData = record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
szTip: array [0..63] of AnsiChar;
end;
cbSize - размер этой самой структуры TNotifyIconData. Легко вычисляется с помощью sizeof
Wnd - номер окна, которое будет принимать сообщения от иконки
uID - уникальный номер иконки в вашем приложении
uFlags - флаги, показывающие какие поля TNotifyIconData должны быть обработаны системой
uCallbackMessage - если в uFlags установлено NIF_MESSAGE, то uCallbackMessage указывает номер сообщения, которое будет послано окну под номером Wnd
hIcon - если в uFlags установлено NIF_ICON, то hIcon показывает номер иконки, которая будет будет отображаться в SysTray"е
szTip - если в uFlags установлено NIF_TIP, то szTip задает всплывающий текст, который отображается при наведении курсора мышки на иконку
Ну вот собственно и все, что нужно знать для того, чтобы "запуздырить" свою иконку в SysTray.
В программе где-то имеет смысл объявить глобальную переменную, например NID типа TNotifyIconData.var NID: TNotifyIconData;
Глобально - потому что эта переменная понадобится, чтобы удалять иконку и модифицировать ее.
Осталось рассмотреть конкретную реализацию.procedure TForm1.Button1Click(Sender: TObject);
begin
NID.uID :=0;
NID.Wnd := Handle;
NID.uCallbackMessage :=WM_USER;
NID.hIcon := LoadIcon(HINSTANCE,"ICON1");
NID.szTip := "Моя иконка";
NID.uFlags :=NIF_ICON or NIF_MESSAGE or NIF_TIP;
NID.cbSize :=sizeof(NID);
Shell_NotifyIcon(NIM_ADD,@NID);
end;NID.uID :=0;
уникальный номер иконки в приложении. Если у вас несколько иконок в одном приложении, то это позволит вам их различать. У нас иконка одна, так что ставим что угодно. Например, ноль.NID.Wnd := Handle;
Выбираем окно, которое будет обрабатывать сообщение от иконки. В моем тестовом приложении только одна форма, одно окно, его и выбираю.
Выбираемое окно должно иметь процедуру обработки сообщения.NID.uCallbackMessage :=WM_USER;
Выбираем номер сообщения, которое будет послано нашему окну, как только с иконкой произведут какие-либо действия.
Для наших личных сообщений Microsoft рекомендует использовать номера от WM_USER до 0x7FFF. Выбираем WM_USERNID.hIcon := LoadIcon(HINSTANCE,"ICON1");
Тут загружаем изображение, иконку, которая будет отображена в SysTtay. По этому пункту почему-то возникает много вопросов, типа "а как загрузить-то?".
Это, наверное, тема для очередного вопроса в FAQ, но кратко расскажу как можно. Запускаете "Tools->ImageEditor" и создаете новый "Resource File" или открываете существующий (только не главный ресурсный файл вашего приложения, типа project1.res).
Рисуете иконку под именем ICON1, сохраняете ресурсный файл под именем icon.res, кладете файл в каталог с программой.
В модуле формы, где используется LoadIcon, после {$R *.dfm} пишете {$R icon.RES}, после чего Delphi включит ресурсы вашего icon1.res в создаваемый exe файл. В том числе включит иконку ICON1.
После чего эту иконку можно загрузить как показано выше.NID.szTip := "Моя иконка";
Просто задаете текст всплывающей подсказки. Так как объявлено:
szTip: array [0..63] of AnsiChar;
то соответственно, подсказка не должна быть длиннее 64 символов.NID.uFlags :=NIF_ICON or NIF_MESSAGE or NIF_TIP;
задаются флаги, которые показывают, какие поля TNotifyIconData должны учитываться системой. Мы заполнили и hIcon, и uCallbackMessage, и szTip. Соответственно, пусть они все будут учитываться.NID.cbSize :=sizeof(NID);
просто задается размер TNotifyIconData. Эта строчка всегда будет именно такой.Shell_NotifyIcon(NIM_ADD,@NID);
собственно говоря, вызывается функция Shell_NotifyIcon с нужными параметрами (так как должен передаваться указатель на структуру, а не сама TNotifyIconData, то поэтому @NID, а не просто NID). Можно анализировать значение, возвращаемое функцией. True в случае успешного добавления иконки и False в случае неуспеха.
Созданную иконку можно удалить. Например, это следует делать при завершении приложения:procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@NID);
end;
Если вы хотите модифицировать текст всплывающей подсказки или отобразить другую иконку вместо прежней, то просто перезаполните нужное поле NID и вызовете:Shell_NotifyIcon(NIM_MODIFY,@NID);
Но это не все, иконку мы добавили, но ведь нужно как-то обрабатывать события, такие, например, как клик мышкой по иконке.
Именно для этого форма, которая будет получать события от иконки (на которую указывает параметр Wnd), должна иметь обработчик сообщений. Мы определили сообщение как WM_USER. Соответственно, добавим к нашей форме нужную процедуру:procedure IconMessage (var Msg: TMessage); message wm_USER;
А теперь остается только реализовать ее. Например, мы хотим, чтобы при клике левой кнопкой по иконке выводился бокс с сообщением:procedure TForm1.IconMessage(var Msg: TMessage);
begin
if Msg.lParam = WM_LBUTTONDOWN then
showmessage("По иконке кликнули левой кнопкой мыши!");
end;
А по клику правой кнопки хотим вывести существующее PopUp меню:procedure TForm1.IconMessage(var Msg: TMessage);
var
Pt: TPoint;
begin
if Msg.lParam = wm_RBUTTONDOWN then
begin
GetCursorPos (Pt);
PopupMenu1.Popup (Pt.x, Pt.y);
end;
end;
Ну и совсем напоследок хочу предупредить, что иконка автоматически удаляется как только окно Wnd, указанное в TNotifyIconData, удаляется из системы. Это может произойти не только при закрытии приложения, а, например, при смене BorderStyle у формы.
← →
Игорь Шевченко © (2004-03-24 18:56) [2]Piter © (24.03.04 18:54)
Есть предложение слить три ветки в одну.
Ко-модератор.
← →
Игорь Шевченко © (2004-03-24 18:56) [2]Piter © (24.03.04 18:54)
Есть предложение слить три ветки в одну.
Ко-модератор.
← →
Piter © (2004-03-24 18:59) [3]Если у кого-то есть комментарии к ответу по "Добавление иконки в SysTray" - высказывайтесь
← →
Piter © (2004-03-24 18:59) [3]Если у кого-то есть комментарии к ответу по "Добавление иконки в SysTray" - высказывайтесь
← →
Piter © (2004-03-24 19:02) [4]Игорь Шевченко (24.03.04 18:56) [2]
Есть предложение слить три ветки в одну
какие ветки?
← →
Piter © (2004-03-24 19:02) [4]Игорь Шевченко (24.03.04 18:56) [2]
Есть предложение слить три ветки в одну
какие ветки?
← →
Игорь Шевченко © (2004-03-24 19:05) [5]Есть предложение дополнить обработку нажатия мышью для различия Click и DoubleClick. У Пачеки этот момент довольно подробно расписан, но набивать лень, а электронной версии нету.
← →
Игорь Шевченко © (2004-03-24 19:05) [5]Есть предложение дополнить обработку нажатия мышью для различия Click и DoubleClick. У Пачеки этот момент довольно подробно расписан, но набивать лень, а электронной версии нету.
← →
zzet © (2004-03-24 19:07) [6]>Piter © (24.03.04 18:56)
Это не ответ фака, это целая статья получилась.. ИМХО, для "копипастнуть в код" сгодится и изначальный вариант, а тот кто захочет копнуть глубже копнет при помощи хельпа. Если на все часто задаваемые вопросы писать такие подробные ответы, то фак получится не фак, а энциклопедия.. Да и обработать таким образом штук 100-200 вопросов, это сколько делов, представляешь?
← →
zzet © (2004-03-24 19:07) [6]>Piter © (24.03.04 18:56)
Это не ответ фака, это целая статья получилась.. ИМХО, для "копипастнуть в код" сгодится и изначальный вариант, а тот кто захочет копнуть глубже копнет при помощи хельпа. Если на все часто задаваемые вопросы писать такие подробные ответы, то фак получится не фак, а энциклопедия.. Да и обработать таким образом штук 100-200 вопросов, это сколько делов, представляешь?
← →
Игорь Шевченко © (2004-03-24 19:09) [7]zzet © (24.03.04 19:07)
> для "копипастнуть в код"
А FAQ, он не для этого.
← →
Игорь Шевченко © (2004-03-24 19:09) [7]zzet © (24.03.04 19:07)
> для "копипастнуть в код"
А FAQ, он не для этого.
← →
zzet © (2004-03-24 19:17) [8]Если с подобной тщательностью обработать самые популярные вопросы (штук 200), то получится увесистый труд. Его даже можно компильнуть в е-боок и продавать за 2-3 бакса. Уверен, будет пользоваться спросом.
← →
zzet © (2004-03-24 19:17) [8]Если с подобной тщательностью обработать самые популярные вопросы (штук 200), то получится увесистый труд. Его даже можно компильнуть в е-боок и продавать за 2-3 бакса. Уверен, будет пользоваться спросом.
← →
nikkie © (2004-03-24 19:18) [9]имхо, для фака длинновато получилось... такой текст скорее как статья для начинающих годится. может так и стоит его оформить? хотя вероятно, что статей про иконку-в-трее уже куча написана.
я бы только добавил побольше вещей связанных с иконкой-в-трее. например, расширение структуры NOTIFYICONDATA в W2K и выше, трюк с SetForegroundWindow и посылкой WM_NULL (PRB: Menus for Notification Icons Do Not Work Correctly, ID: Q135788 - не знаю только насколько эта проблема проявляется при использовании VCL). может у кого еще какие идеи родятся. тогда может и статья станет достаточно оригинальной, чтобы оправдать свое существование. а может и нет.
для фака же покороче надо. имхо.
← →
nikkie © (2004-03-24 19:18) [9]имхо, для фака длинновато получилось... такой текст скорее как статья для начинающих годится. может так и стоит его оформить? хотя вероятно, что статей про иконку-в-трее уже куча написана.
я бы только добавил побольше вещей связанных с иконкой-в-трее. например, расширение структуры NOTIFYICONDATA в W2K и выше, трюк с SetForegroundWindow и посылкой WM_NULL (PRB: Menus for Notification Icons Do Not Work Correctly, ID: Q135788 - не знаю только насколько эта проблема проявляется при использовании VCL). может у кого еще какие идеи родятся. тогда может и статья станет достаточно оригинальной, чтобы оправдать свое существование. а может и нет.
для фака же покороче надо. имхо.
← →
nikkie © (2004-03-24 19:20) [10]>Его даже можно компильнуть в е-боок и продавать за 2-3 бакса. Уверен, будет пользоваться спросом
первая копия :)
вторую, боюсь тебе уже не удастся продать
← →
nikkie © (2004-03-24 19:20) [10]>Его даже можно компильнуть в е-боок и продавать за 2-3 бакса. Уверен, будет пользоваться спросом
первая копия :)
вторую, боюсь тебе уже не удастся продать
← →
panov © (2004-03-24 19:22) [11]В примере не хватает скрывания формы приложения при сворачивании.(это навскидку)
← →
panov © (2004-03-24 19:22) [11]В примере не хватает скрывания формы приложения при сворачивании.(это навскидку)
← →
zzet © (2004-03-24 19:25) [12]>вторую, боюсь тебе уже не удастся продать
Да не мне, я другим зарабатываю. А вот на сайте можно поставить ссылку на загрузку е-версии полного фака через какой-нить е-магазин. При небольшой цене 1-2$ покупать будут с удовольствием, а сайту все вперед, на оплату траффика.
← →
zzet © (2004-03-24 19:25) [12]>вторую, боюсь тебе уже не удастся продать
Да не мне, я другим зарабатываю. А вот на сайте можно поставить ссылку на загрузку е-версии полного фака через какой-нить е-магазин. При небольшой цене 1-2$ покупать будут с удовольствием, а сайту все вперед, на оплату траффика.
← →
Юрий Зотов © (2004-03-24 19:34) [13]> zzet © (24.03.04 19:25) [12]
Вероятно, nikkie имел в виду, что как только будет продана одна копия, так она тут же будет выложена где-нибудь на "народе" (а потом и во множестве других мест) для свободной скачки.
Потому что некоторые люди считают, что "софт маст би фри". А сайт... да пусть себе перебивается, как знает. Его проблемы.
← →
Юрий Зотов © (2004-03-24 19:34) [13]> zzet © (24.03.04 19:25) [12]
Вероятно, nikkie имел в виду, что как только будет продана одна копия, так она тут же будет выложена где-нибудь на "народе" (а потом и во множестве других мест) для свободной скачки.
Потому что некоторые люди считают, что "софт маст би фри". А сайт... да пусть себе перебивается, как знает. Его проблемы.
← →
nikkie © (2004-03-24 19:35) [14]еще идеи для статьи:
1. предупредить, чтобы при выходе из программы посылали DELETE, а то иконка так и останется висеть, пока мышку не подведут. соответственно твой последний абзац почетче сформулировать. и объяснить почему смена BorderStyle приводит к унижтожению окна.
2. пример анимации (смена иконки по таймеру), а можно и анимацию в ответ на WM_MOUSEMOVE.
3. разобраться, что там происходит с иконками в WinXP - недавно проскакивал вопрос на эту тему - как не дать WinXP спрятать мою иконку. правда я так и не понял, решилась проблема или нет. и WinXP нет, чтобы самому поразбираться.
а пишешь ты хорошо, так держать.
← →
nikkie © (2004-03-24 19:35) [14]еще идеи для статьи:
1. предупредить, чтобы при выходе из программы посылали DELETE, а то иконка так и останется висеть, пока мышку не подведут. соответственно твой последний абзац почетче сформулировать. и объяснить почему смена BorderStyle приводит к унижтожению окна.
2. пример анимации (смена иконки по таймеру), а можно и анимацию в ответ на WM_MOUSEMOVE.
3. разобраться, что там происходит с иконками в WinXP - недавно проскакивал вопрос на эту тему - как не дать WinXP спрятать мою иконку. правда я так и не понял, решилась проблема или нет. и WinXP нет, чтобы самому поразбираться.
а пишешь ты хорошо, так держать.
← →
Дремучий © (2004-03-24 19:39) [15]зачем придумывать велосипед?
UBPFD - бесплатная база готовых решений для Delphi
Здесь находятся ответы на самые разные вопросы по Delphi в виде полностью готовых к употреблению процедур и функций. Просто зайди, возьми и используй в своем проекте!
Поделись и своими готовыми решениями - база постоянно и очень активно расширяется самими пользователями!
http://delphibase.endimus.com/
---------
просто база все никак не передет к мастакам. Если это не планируется -- то я перетащу ее к себе (к дремучим) ;PP
← →
Дремучий © (2004-03-24 19:39) [15]зачем придумывать велосипед?
UBPFD - бесплатная база готовых решений для Delphi
Здесь находятся ответы на самые разные вопросы по Delphi в виде полностью готовых к употреблению процедур и функций. Просто зайди, возьми и используй в своем проекте!
Поделись и своими готовыми решениями - база постоянно и очень активно расширяется самими пользователями!
http://delphibase.endimus.com/
---------
просто база все никак не передет к мастакам. Если это не планируется -- то я перетащу ее к себе (к дремучим) ;PP
← →
BOA_KAA © (2004-03-24 20:12) [16]
> zzet © (24.03.04 19:25) [12]
Если я не ошибаюсь, "Delphi - советы программистов" такое называется, т.е. уже есть...
← →
BOA_KAA © (2004-03-24 20:12) [16]
> zzet © (24.03.04 19:25) [12]
Если я не ошибаюсь, "Delphi - советы программистов" такое называется, т.е. уже есть...
← →
Piter © (2004-03-24 20:36) [17]nikkie (24.03.04 19:18) [9]
для фака же покороче надо. имхо
согласен. Но просто люди, которые не могут разобраться с хелпом с таким элементарным примером.. ну в общем им надо объяснять очень подробно. А статью не хочу писать, я задумывал это именно как FAQ. Но с другой стороны это такой уже набивший оскомину вопрос, что уж надо разжевать. Если и после этого человек не поймет... ну чтож поделать...
nikkie (24.03.04 19:18) [9]
трюк с SetForegroundWindow
а что за трюк?
Игорь Шевченко (24.03.04 19:05) [5]
Есть предложение дополнить обработку нажатия мышью для различия Click и DoubleClick
а это необходимо для примера как скрыть иконку?
panov (24.03.04 19:22) [11]
В примере не хватает скрывания формы приложения при сворачивании
черт. Тогда в примере не хватает разворачивания формы при нажатии на иконку. И описания многих действий, которые можно сопоставить с действиями с иконкой :)
zzet (24.03.04 19:07) [6]
сгодится и изначальный вариант
ну ни фига. Что в изначальном варианте? Функции передаются все параметры, а она тупо заполняет TNotifyIconData. Так нельзя...
nikkie (24.03.04 19:35) [14]
предупредить, чтобы при выходе из программы посылали DELETE, а то иконка так и останется висеть
Так я ж писал: "Созданную иконку можно удалить. Например, это следует делать при завершении приложения"
объяснить почему смена BorderStyle приводит к унижтожению окна
ок
nikkie (24.03.04 19:35) [14]
2. пример анимации (смена иконки по таймеру), а можно и анимацию в ответ на WM_MOUSEMOVE.
имхо, совсем выходит за рамки FAQ"а
nikkie (24.03.04 19:35) [14]
разобраться, что там происходит с иконками в WinXP
XP тоже нету :(
Дремучий (24.03.04 19:39) [15]
UBPFD - бесплатная база готовых решений для Delphi
блин, одно дело просто код, другое - объяснение
В общем, вы скажите - сойдет? Замечания есть? Если сократить - то что?
P.S. Имхо, добавлять уже не имеет смысла, и так объем нормальный получился
P.S.S. Ветку с Пановым объединять не надо.
Сразу объясню схему работы - Панов выясняет какие вопросы самые популярные. Я предлагаю не писать ответы самому лично, а выкладывать черновики в форум. Народ думает, поправляет, делает замечания. Автор ветки является координатором, составляет конечный вариант. После чего отправляет администрации, которая думаю не откажется разместить обновленный грамотный ответ.
Призываю всех поучаствовать, создавайте ветки, типа с пометкой FAQ: "[вопрос]"
Ладно, ребят, все. Хватит флуда. Выражаемся только по данному вопросу
← →
Piter © (2004-03-24 20:36) [17]nikkie (24.03.04 19:18) [9]
для фака же покороче надо. имхо
согласен. Но просто люди, которые не могут разобраться с хелпом с таким элементарным примером.. ну в общем им надо объяснять очень подробно. А статью не хочу писать, я задумывал это именно как FAQ. Но с другой стороны это такой уже набивший оскомину вопрос, что уж надо разжевать. Если и после этого человек не поймет... ну чтож поделать...
nikkie (24.03.04 19:18) [9]
трюк с SetForegroundWindow
а что за трюк?
Игорь Шевченко (24.03.04 19:05) [5]
Есть предложение дополнить обработку нажатия мышью для различия Click и DoubleClick
а это необходимо для примера как скрыть иконку?
panov (24.03.04 19:22) [11]
В примере не хватает скрывания формы приложения при сворачивании
черт. Тогда в примере не хватает разворачивания формы при нажатии на иконку. И описания многих действий, которые можно сопоставить с действиями с иконкой :)
zzet (24.03.04 19:07) [6]
сгодится и изначальный вариант
ну ни фига. Что в изначальном варианте? Функции передаются все параметры, а она тупо заполняет TNotifyIconData. Так нельзя...
nikkie (24.03.04 19:35) [14]
предупредить, чтобы при выходе из программы посылали DELETE, а то иконка так и останется висеть
Так я ж писал: "Созданную иконку можно удалить. Например, это следует делать при завершении приложения"
объяснить почему смена BorderStyle приводит к унижтожению окна
ок
nikkie (24.03.04 19:35) [14]
2. пример анимации (смена иконки по таймеру), а можно и анимацию в ответ на WM_MOUSEMOVE.
имхо, совсем выходит за рамки FAQ"а
nikkie (24.03.04 19:35) [14]
разобраться, что там происходит с иконками в WinXP
XP тоже нету :(
Дремучий (24.03.04 19:39) [15]
UBPFD - бесплатная база готовых решений для Delphi
блин, одно дело просто код, другое - объяснение
В общем, вы скажите - сойдет? Замечания есть? Если сократить - то что?
P.S. Имхо, добавлять уже не имеет смысла, и так объем нормальный получился
P.S.S. Ветку с Пановым объединять не надо.
Сразу объясню схему работы - Панов выясняет какие вопросы самые популярные. Я предлагаю не писать ответы самому лично, а выкладывать черновики в форум. Народ думает, поправляет, делает замечания. Автор ветки является координатором, составляет конечный вариант. После чего отправляет администрации, которая думаю не откажется разместить обновленный грамотный ответ.
Призываю всех поучаствовать, создавайте ветки, типа с пометкой FAQ: "[вопрос]"
Ладно, ребят, все. Хватит флуда. Выражаемся только по данному вопросу
← →
Игорь Шевченко © (2004-03-24 20:45) [18]
> Есть предложение дополнить обработку нажатия мышью для различия
> Click и DoubleClick
>
> а это необходимо для примера как скрыть иконку?
Ну ты же пишешь про обработку нажатия правой и левой кнопки. Или можно просто добавить, что есть такой момент, при двойном щелче сначала возникает событие одиночногонажатия, если не принимать специальных мер.
Пример написан хорошо.
P.S. Напиши, будь добр, прямо перед кодом, что
uses
ShellAPI;
А то не для всех это очевидно. И начнется - я взял пример из FAQ, а он не работает, и т.д. :)
← →
Игорь Шевченко © (2004-03-24 20:45) [18]
> Есть предложение дополнить обработку нажатия мышью для различия
> Click и DoubleClick
>
> а это необходимо для примера как скрыть иконку?
Ну ты же пишешь про обработку нажатия правой и левой кнопки. Или можно просто добавить, что есть такой момент, при двойном щелче сначала возникает событие одиночногонажатия, если не принимать специальных мер.
Пример написан хорошо.
P.S. Напиши, будь добр, прямо перед кодом, что
uses
ShellAPI;
А то не для всех это очевидно. И начнется - я взял пример из FAQ, а он не работает, и т.д. :)
← →
nikkie © (2004-03-24 21:17) [19]>имхо, совсем выходит за рамки FAQ"а
все что я предлагал выше - исключительно для статьи. для FAQa не добавлять надо, а вырезать безжалостной рукой.
>>трюк с SetForegroundWindow
>а что за трюк?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/menus/menure ference/menufunctions/trackpopupmenu.asp
внизу страницы - пример. при программировании на WinAPI важный момент. при использовании VCL - не знаю.
>>UBPFD - бесплатная база готовых решений для Delphi
>блин, одно дело просто код, другое - объяснение
это ты зря. Song там хорошее объяснение написал.
http://delphibase.endimus.com/?action=viewfunc&topic=appctrl&id=10239
← →
nikkie © (2004-03-24 21:17) [19]>имхо, совсем выходит за рамки FAQ"а
все что я предлагал выше - исключительно для статьи. для FAQa не добавлять надо, а вырезать безжалостной рукой.
>>трюк с SetForegroundWindow
>а что за трюк?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/menus/menure ference/menufunctions/trackpopupmenu.asp
внизу страницы - пример. при программировании на WinAPI важный момент. при использовании VCL - не знаю.
>>UBPFD - бесплатная база готовых решений для Delphi
>блин, одно дело просто код, другое - объяснение
это ты зря. Song там хорошее объяснение написал.
http://delphibase.endimus.com/?action=viewfunc&topic=appctrl&id=10239
← →
Дремучий © (2004-03-24 21:45) [20]
> nikkie © (24.03.04 21:17) [19]
> >>UBPFD - бесплатная база готовых решений для Delphi
> >блин, одно дело просто код, другое - объяснение
> это ты зря. Song там хорошее объяснение написал.
угу, никто не мешает НОРМАЛЬНО документировать код. Зачем из 20 строчек кода писать целую статью? ИМХО, БОЛЕЕ ЧЕМ ДОСТАТОЧНО по одной строке коментария до/после каждой строки кода.
← →
Дремучий © (2004-03-24 21:45) [20]
> nikkie © (24.03.04 21:17) [19]
> >>UBPFD - бесплатная база готовых решений для Delphi
> >блин, одно дело просто код, другое - объяснение
> это ты зря. Song там хорошее объяснение написал.
угу, никто не мешает НОРМАЛЬНО документировать код. Зачем из 20 строчек кода писать целую статью? ИМХО, БОЛЕЕ ЧЕМ ДОСТАТОЧНО по одной строке коментария до/после каждой строки кода.
← →
TButton © (2004-03-24 22:11) [21]>Зачем из 20 строчек кода писать целую статью
вот веришь нет, я пока статью (не эту, но на эту тему) не прочитал не понимал че да как. "Иногда лучше жевать, чем говорить" (с)АП
← →
TButton © (2004-03-24 22:11) [21]>Зачем из 20 строчек кода писать целую статью
вот веришь нет, я пока статью (не эту, но на эту тему) не прочитал не понимал че да как. "Иногда лучше жевать, чем говорить" (с)АП
← →
Rouse_ © (2004-03-24 22:32) [22]Мое конечно ИМХО, но самое оптимальное сделать в FAQ так:
в самом начале привести рабочий пример(хотябы из текущего FAQ), а далее, если человек захотел разобраться, привести вот такое подробное описание (если оно есть конечно)
тогда такой FAQ будет один из лучших...
---
Вот такое мое ИМХО
← →
Rouse_ © (2004-03-24 22:32) [22]Мое конечно ИМХО, но самое оптимальное сделать в FAQ так:
в самом начале привести рабочий пример(хотябы из текущего FAQ), а далее, если человек захотел разобраться, привести вот такое подробное описание (если оно есть конечно)
тогда такой FAQ будет один из лучших...
---
Вот такое мое ИМХО
← →
TButton © (2004-03-24 22:38) [23][22]
ППКС
← →
TButton © (2004-03-24 22:38) [23][22]
ППКС
← →
panov © (2004-03-26 12:34) [24]>Piter
>Rouse_ © (24.03.04 22:32) [22]
Принимаю за основу этот вариант.
Сначала будет полностью рабочий пример, затем статейка из топика.
← →
panov © (2004-03-26 12:34) [24]>Piter
>Rouse_ © (24.03.04 22:32) [22]
Принимаю за основу этот вариант.
Сначала будет полностью рабочий пример, затем статейка из топика.
← →
panov © (2004-03-26 12:34) [25]Возможно добавлю еще анимирование иконки.
← →
panov © (2004-03-26 12:34) [25]Возможно добавлю еще анимирование иконки.
← →
panov © (2004-03-26 19:55) [26]Если ответы на вопросы в FAQ будут выглядеть примерно так:
http://home.ural.ru/~panov/icontray.html
Пойдет такой вариант приподнесения информации?
← →
panov © (2004-03-26 19:55) [26]Если ответы на вопросы в FAQ будут выглядеть примерно так:
http://home.ural.ru/~panov/icontray.html
Пойдет такой вариант приподнесения информации?
← →
Rouse_ © (2004-03-26 20:15) [27]Мои пожелания:
во первых шрифт нужно бы сделать одинаковым
во вторых полее наглядно когда код находится на другом фоне, сразу видно где код а где объяснение...
PS: Вообщето оформление кода и текста, а также ссылок на дополнительную информацию, принятое в MSDN, считаю наиболее идеальным
← →
Rouse_ © (2004-03-26 20:15) [27]Мои пожелания:
во первых шрифт нужно бы сделать одинаковым
во вторых полее наглядно когда код находится на другом фоне, сразу видно где код а где объяснение...
PS: Вообщето оформление кода и текста, а также ссылок на дополнительную информацию, принятое в MSDN, считаю наиболее идеальным
← →
panov © (2004-03-26 20:24) [28]Имелась ввиду схема подачи информации-)
оформление будет в едином стиле, как сейчас в FAQ.
← →
panov © (2004-03-26 20:24) [28]Имелась ввиду схема подачи информации-)
оформление будет в едином стиле, как сейчас в FAQ.
← →
Rouse_ © (2004-03-26 20:33) [29]Смема самая идеальная - краткое описание - пример - полное обьяснение...
ИМХО можно добавить несколько ссылок в конце на сторонние статьи (если таковые существует)
т.е. 4 уровня подачи информации...
← →
Rouse_ © (2004-03-26 20:33) [29]Смема самая идеальная - краткое описание - пример - полное обьяснение...
ИМХО можно добавить несколько ссылок в конце на сторонние статьи (если таковые существует)
т.е. 4 уровня подачи информации...
← →
panov © (2004-04-02 19:15) [30]
← →
panov © (2004-04-02 19:15) [30]
← →
VMcL © (2004-04-02 20:54) [31]>>Piter © (24.03.04 18:56) [1]
>есть всего лишь одна функция - Shell_NotifyIcon
Вообще-то две: Shell_NotifyIconA (Shell_NotifyIcon) и Shell_NotifyIconW.
← →
VMcL © (2004-04-02 20:54) [31]>>Piter © (24.03.04 18:56) [1]
>есть всего лишь одна функция - Shell_NotifyIcon
Вообще-то две: Shell_NotifyIconA (Shell_NotifyIcon) и Shell_NotifyIconW.
← →
Игорь Шевченко © (2004-04-02 21:15) [32]panov © (26.03.04 19:55)
Шрифт глаза режет. Может, лучше с такими же настройками, как в форуме ?
← →
Игорь Шевченко © (2004-04-02 21:15) [32]panov © (26.03.04 19:55)
Шрифт глаза режет. Может, лучше с такими же настройками, как в форуме ?
← →
panov © (2004-04-02 21:47) [33]>Игорь Шевченко © (02.04.04 21:15) [32]
Да там просто выложен пример подачи информации(верстка) в FAQ будет по-другому-)
← →
panov © (2004-04-02 21:47) [33]>Игорь Шевченко © (02.04.04 21:15) [32]
Да там просто выложен пример подачи информации(верстка) в FAQ будет по-другому-)
← →
blackman © (2004-04-02 21:57) [34]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/menus/menure ference/menufunctions/trackpopupmenu.asp
Page Cannot Be Found
← →
blackman © (2004-04-02 21:57) [34]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/menus/menure ference/menufunctions/trackpopupmenu.asp
Page Cannot Be Found
← →
23423423 (2004-04-03 02:05) [35]Удалено модератором
← →
23423423 (2004-04-03 02:05) [35]Удалено модератором
← →
Иксик © (2004-04-03 13:28) [36]Ребята, идеально. Я еще в ветке про 20 популярных вопросов хотел предложить давать развернутое объяснение, а то там начали обсуждать только куски кода. А так
Piter © (24.03.04 18:56) [1]
Rouse_ © (24.03.04 22:32) [22]
просто супер! Идеальный вариант!
← →
Иксик © (2004-04-03 13:28) [36]Ребята, идеально. Я еще в ветке про 20 популярных вопросов хотел предложить давать развернутое объяснение, а то там начали обсуждать только куски кода. А так
Piter © (24.03.04 18:56) [1]
Rouse_ © (24.03.04 22:32) [22]
просто супер! Идеальный вариант!
← →
nikkie © (2004-04-03 13:39) [37]>blackman
не первый день на форуме же... :)
скопировать в адресную строку браузера, удалить пробел.
← →
nikkie © (2004-04-03 13:39) [37]>blackman
не первый день на форуме же... :)
скопировать в адресную строку браузера, удалить пробел.
← →
Piter © (2004-04-03 15:35) [38]panov, я не то, чтобы самовлюбленный кретин... но в FAQ копирайты предусмотрены?
← →
Piter © (2004-04-03 15:35) [38]panov, я не то, чтобы самовлюбленный кретин... но в FAQ копирайты предусмотрены?
← →
Думкин © (2004-04-03 15:40) [39]
> [38] Piter © (03.04.04 15:35)
Да, конечно. Но... что ты хочешь?
← →
Думкин © (2004-04-03 15:40) [39]
> [38] Piter © (03.04.04 15:35)
Да, конечно. Но... что ты хочешь?
← →
Piter © (2004-04-03 18:13) [40]Панов, а это тобой написанный пример: http://home.ural.ru/~panov/icontray.html ?
Для FAQ"а пример, имхо, слишком сложен. И совершенно не понимаю - зачем WindowProc переназначать?!
Если хочешь все расписать (анимирование иконки и т.д.), то пиши лучше статью, nikkie там советовал о чем можно рассказать
← →
Piter © (2004-04-03 18:13) [40]Панов, а это тобой написанный пример: http://home.ural.ru/~panov/icontray.html ?
Для FAQ"а пример, имхо, слишком сложен. И совершенно не понимаю - зачем WindowProc переназначать?!
Если хочешь все расписать (анимирование иконки и т.д.), то пиши лучше статью, nikkie там советовал о чем можно рассказать
← →
panov © (2004-04-04 01:56) [41]>Piter © (03.04.04 18:13) [40]
Панов, а это тобой написанный пример: http://home.ural.ru/~panov/icontray.html ?
Ну не знаю... Если есть более простой вариант готовой программы - предлагай.
Но он должен быть полностью функционален.
Если хочешь с копирайтами, то сделаем копирайт.-)
С этим никаких проблем.
Статья твоя обязательно будет с копирайтом.
Да и другие ответы, если автор будет известен, будут отмечены копирайтами.
← →
panov © (2004-04-04 01:56) [41]>Piter © (03.04.04 18:13) [40]
Панов, а это тобой написанный пример: http://home.ural.ru/~panov/icontray.html ?
Ну не знаю... Если есть более простой вариант готовой программы - предлагай.
Но он должен быть полностью функционален.
Если хочешь с копирайтами, то сделаем копирайт.-)
С этим никаких проблем.
Статья твоя обязательно будет с копирайтом.
Да и другие ответы, если автор будет известен, будут отмечены копирайтами.
← →
Rouse_ © (2004-04-04 02:14) [42]Постараемся сделать с копирайтами - по крайней мере та часть, которая идет от меня будет точно...
Вот кстати вопрос для всех (и для Александра тоже, как составляющего FAQ)
Стоит ли вносить некоторые ответы из Озерского (Кулибы) в FAQ.
Сегодня консультировался с Анатолием Подгорецким, точного мнения мы не выработали...
А также, мое ИМХО, стоит попросить автора DelphiWorld на использование его статей (собранных им статей) для использование в FAQ (части их)
← →
Rouse_ © (2004-04-04 02:14) [42]Постараемся сделать с копирайтами - по крайней мере та часть, которая идет от меня будет точно...
Вот кстати вопрос для всех (и для Александра тоже, как составляющего FAQ)
Стоит ли вносить некоторые ответы из Озерского (Кулибы) в FAQ.
Сегодня консультировался с Анатолием Подгорецким, точного мнения мы не выработали...
А также, мое ИМХО, стоит попросить автора DelphiWorld на использование его статей (собранных им статей) для использование в FAQ (части их)
← →
Piter © (2004-04-04 12:23) [43]panov (04.04.04 01:56) [41]
Если есть более простой вариант готовой программы - предлагай
1) я уже предложил, есть в письме.
2) зачем в примере перекрывать оконную процедуру? То есть, понятно для чего - чтобы WM_SYSCOMMAND обрабатывать. Но нужно ли это в примере? Человек иконку не может добавить, а тут какую-то оконную процедуру перекрывают...
3)case aAction of
NIM_ADD: Shell_NotifyIcon(NIM_ADD, @nid); //Добавление иконки
NIM_DELETE: Shell_NotifyIcon(NIM_DELETE, @nid); //Удаление иконки
NIM_MODIFY: Shell_NotifyIcon(NIM_MODIFY, @nid); //Модификация иконки
end;
А нельзя просто написать вместо всего этого кодаShell_NotifyIcon(aAction, @nid);
?
И пример вообще сложный. Там используются, имхо, ненужные навороты, типа RegisterWindowMessage с формированием уникальной строки и тому подобное. Все на множество процедур разбито. Оно, конечно, правильно, но нагромождает элементарный код. Нужно мне кажется выделить сам ответ на вопрос, а уж всякие навороты - это отдельно, чтобы не мешали восприятию
← →
Piter © (2004-04-04 12:23) [43]panov (04.04.04 01:56) [41]
Если есть более простой вариант готовой программы - предлагай
1) я уже предложил, есть в письме.
2) зачем в примере перекрывать оконную процедуру? То есть, понятно для чего - чтобы WM_SYSCOMMAND обрабатывать. Но нужно ли это в примере? Человек иконку не может добавить, а тут какую-то оконную процедуру перекрывают...
3)case aAction of
NIM_ADD: Shell_NotifyIcon(NIM_ADD, @nid); //Добавление иконки
NIM_DELETE: Shell_NotifyIcon(NIM_DELETE, @nid); //Удаление иконки
NIM_MODIFY: Shell_NotifyIcon(NIM_MODIFY, @nid); //Модификация иконки
end;
А нельзя просто написать вместо всего этого кодаShell_NotifyIcon(aAction, @nid);
?
И пример вообще сложный. Там используются, имхо, ненужные навороты, типа RegisterWindowMessage с формированием уникальной строки и тому подобное. Все на множество процедур разбито. Оно, конечно, правильно, но нагромождает элементарный код. Нужно мне кажется выделить сам ответ на вопрос, а уж всякие навороты - это отдельно, чтобы не мешали восприятию
← →
nikkie © (2004-04-04 15:32) [44]>зачем в примере перекрывать оконную процедуру? То есть, понятно для чего - чтобы WM_SYSCOMMAND обрабатывать.
странный вывод. оконная процедура перекрывается для обработки сообщений, значение которых не константа, а получено с помощью RegisterWindowMessage. WM_SYSCOMMAND проще обработать с помощью процедуры, объявленной с ключевым словом message.
кстати, только сейчас заметил - во всех приведенных примерах отсутствует обработка сообщения RegisterWindowMessage("TaskbarCreated"), а это полезная вещь.Taskbar Creation Notification
With Microsoft® Internet Explorer 4.0 and later, the shell notifies applications that the taskbar has been created. When the taskbar is created, it registers a message with the "TaskbarCreated" string and then broadcasts this message to all top-level windows. When your taskbar application receives this message, it should assume that any taskbar icons it added have been removed and add them again. This feature generally applies only to services that are already running when the shell begins execution. The following example shows a very simplified method for handling this case.
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam,
LPARAM lParam)
{
static UINT s_uTaskbarRestart;
switch(uMessage)
{
case WM_CREATE:
s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
break;
default:
if(uMessage == s_uTaskbarRestart)
AddTaskbarIcons();
break;
}
return DefWindowProc(hWnd, uMessage, wParam, lParam);
}
(MSDN, статья Handling the Taskbar)
кстати, по поводу терминологии - микрософт пытается бороться со словом "трей"The taskbar notification area is sometimes erroneously called the "tray."
(MSDN, статья Shell_NotifyIcon)
но, наверное, это бесполезно :)
← →
nikkie © (2004-04-04 15:32) [44]>зачем в примере перекрывать оконную процедуру? То есть, понятно для чего - чтобы WM_SYSCOMMAND обрабатывать.
странный вывод. оконная процедура перекрывается для обработки сообщений, значение которых не константа, а получено с помощью RegisterWindowMessage. WM_SYSCOMMAND проще обработать с помощью процедуры, объявленной с ключевым словом message.
кстати, только сейчас заметил - во всех приведенных примерах отсутствует обработка сообщения RegisterWindowMessage("TaskbarCreated"), а это полезная вещь.Taskbar Creation Notification
With Microsoft® Internet Explorer 4.0 and later, the shell notifies applications that the taskbar has been created. When the taskbar is created, it registers a message with the "TaskbarCreated" string and then broadcasts this message to all top-level windows. When your taskbar application receives this message, it should assume that any taskbar icons it added have been removed and add them again. This feature generally applies only to services that are already running when the shell begins execution. The following example shows a very simplified method for handling this case.
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam,
LPARAM lParam)
{
static UINT s_uTaskbarRestart;
switch(uMessage)
{
case WM_CREATE:
s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
break;
default:
if(uMessage == s_uTaskbarRestart)
AddTaskbarIcons();
break;
}
return DefWindowProc(hWnd, uMessage, wParam, lParam);
}
(MSDN, статья Handling the Taskbar)
кстати, по поводу терминологии - микрософт пытается бороться со словом "трей"The taskbar notification area is sometimes erroneously called the "tray."
(MSDN, статья Shell_NotifyIcon)
но, наверное, это бесполезно :)
← →
Игорь Шевченко © (2004-04-04 17:41) [45]nikkie © (04.04.04 15:32)
Вопрос: "Как засунуть иконку в область уведомлений таскбара" как-то не звучит...
← →
Игорь Шевченко © (2004-04-04 17:41) [45]nikkie © (04.04.04 15:32)
Вопрос: "Как засунуть иконку в область уведомлений таскбара" как-то не звучит...
← →
Piter © (2004-04-04 17:52) [46]nikkie (04.04.04 15:32) [44]
. оконная процедура перекрывается для обработки сообщений, значение которых не константа, а получено с помощью RegisterWindowMessage
ага, стормозил. Но по прежнему считаю, что в FAQ это лишний наворот. Вот в статье можно упомянуть.
← →
Piter © (2004-04-04 17:52) [46]nikkie (04.04.04 15:32) [44]
. оконная процедура перекрывается для обработки сообщений, значение которых не константа, а получено с помощью RegisterWindowMessage
ага, стормозил. Но по прежнему считаю, что в FAQ это лишний наворот. Вот в статье можно упомянуть.
← →
nikkie © (2004-04-04 19:07) [47]>Игорь Шевченко
я и говорю - бороться бесполезно :)
тем более, когда в самом MSDN встречается
"HOWTO: Manipulate Icons in the System Tray with Visual Basic"
← →
nikkie © (2004-04-04 19:07) [47]>Игорь Шевченко
я и говорю - бороться бесполезно :)
тем более, когда в самом MSDN встречается
"HOWTO: Manipulate Icons in the System Tray with Visual Basic"
← →
panov © (2004-04-09 13:50) [48]
← →
panov © (2004-04-09 13:50) [48]
← →
panov © (2004-04-18 16:09) [49]
← →
panov © (2004-04-18 16:09) [49]
Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.8 MB
Время: 0.039 c