![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
иконка в трее без форм [D7, WinXP]
AHTOLLlKA © (2008-11-10 12:55:00)подскажите люди добрые...
как засунуть иконку в трей, не используя в uses forms
??????
Сергей М. (2008-11-10 14:05:00) [21]
> обрабатываю так
Вижу обработку
WM_CREATE:
WM_CLOSE:
WM_LBUTTONDOWN:
WM_LBUTTONDBLCLK:
WM_LBUTTONUP:
WM_RBUTTONDOWN:
WM_RBUTTONDBLCLK:
WM_RBUTTONUP:
WM_MOUSEMOVE:
А обработку WM_NOTIFYTRAYICON в упор не вижу.
Гдеона у тебя ?
AHTOLLlKA (2008-11-10 14:03:00) [22]как то надо заставить обрабатывать только WM_NOTIFYTRAYICON
шевеление мышки и тд...
и иконка.. не могу понять почему изчезает при наведение...
AHTOLLlKA (2008-11-10 14:00:00) [23]
program APIForm;
uses
Windows, Messages,ShellApi,Graphics;
const
TITLE = 'Cамый простой пример API формы без всего';
WM_NOTIFYTRAYICON = WM_USER + 1;
var
h_Wnd : HWND;
tray: TNotifyIconData;
TrayIcon: TIcon;
function WndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam:
LPARAM): LRESULT; stdcall;
begin
case (Msg) of
WM_CREATE:
begin { а здесь могло бы быть то что выполняется при старте проги }
end;
WM_CLOSE:
begin
PostQuitMessage(0);
Result := 0
end;
WM_LBUTTONDOWN:
begin
{ а здесь могло бы быть то что выполняется при старте проги }
end;
WM_LBUTTONDBLCLK:
begin
{ а здесь могло бы быть то что выполняется при старте проги }
end;
WM_LBUTTONUP:
begin
{ а здесь могло бы быть то что выполняется при старте проги }
end;
WM_RBUTTONDOWN:
begin
{ а здесь могло бы быть то что выполняется при старте проги }
end;
WM_RBUTTONDBLCLK:
begin
{ а здесь могло бы быть то что выполняется при старте проги }
end;
WM_RBUTTONUP:
begin
{ а здесь могло бы быть то что выполняется при старте проги }
end;
WM_MOUSEMOVE:
begin
messagebox(0,'test','test',0);
end;
else
Result := DefWindowProc(hWnd, Msg, wParam, lParam);
end;
end;
function APIFormC(Width, Height : Integer ) : Boolean;
var
wndClass : TWndClass; { Window class }
dwStyle , { Window styles }
dwExStyle : DWORD; { Extended window styles }
h_Instance : HINST; { Current instance }
begin
h_Instance := GetModuleHandle(nil); { Grab An Instance For Our
Window }
with wndClass do { Set up the window class }
begin
style := CS_HREDRAW or { Redraws entire window if length
changes }
CS_VREDRAW or { Redraws entire window if height
changes }
CS_OWNDC; { Unique device context for the
window }
lpfnWndProc := @WndProc; { Set the window procedure to our
func WndProc }
hInstance := h_Instance;
hCursor := LoadCursor(0, IDC_ARROW);
hbrBackground := COLOR_WINDOW; { стандартный цвет окна(можно так
445566 (RGB), или просто clred (красный) ) }
lpszClassName := 'APIForm';
end;
RegisterClass(wndClass);
dwStyle := WS_OVERLAPPEDWINDOW; { форма с кнопками вверху }
dwExStyle := WS_EX_APPWINDOW; { форма со значком приложения в углу }
h_Wnd := CreateWindowEx(dwExStyle, { Extended window styles }
'APIForm', { Class name }
TITLE, { Window title (caption) }
dwStyle, { Window styles }
0, 0, { позиция окна(левый верхний
угол) }
Width, Height, { Размеры Width и Heught
соответственно }
0, { No parent window }
0, { No menu }
h_Instance, { Instance }
nil); { Pass nothing to WM_CREATE }
if h_Wnd = 0 then
begin
MessageBox(0, 'Не могу создать окно!', 'Ошибка', MB_OK or
MB_ICONERROR);
Result := False;
Exit;
end;
ShowWindow(h_Wnd, SW_SHOW);
SetForegroundWindow(h_Wnd);
SetFocus(h_Wnd);
Result := True;
end;
function WinMain(hInstance : HINST; hPrevInstance : HINST;
lpCmdLine : PChar; nCmdShow : Integer) : Integer; stdcall;
var
msg : TMsg;
finished : Boolean;
begin
Finished := False;
APIFormC( 400, 200 ); { ширина и высота }
while not finished do
begin
if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then { Check if there is a
message for this window }
begin
if (msg.message = WM_QUIT) then { If WM_QUIT message received
then we are done }
finished := True
else begin { Else translate and
dispatch the message to this window }
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;
end;
Result := msg.wParam;
end;
begin
with tray do
begin
cbSize := sizeof(TNotifyIconData);
//wnd := mywnd;
uID := 0;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;
hIcon := LoadIcon(0, IDI_ASTERISK);
szTip := ('My Resident');
end;
Shell_NotifyIcon(NIM_ADD, @tray);
WinMain( hInstance, hPrevInst, CmdLine, CmdShow );
end.
обрабатываю так... но иконка при наведении пропадает все равно...
код чужой ни чужой.. учусь как могу и как позволяет время...
Сергей М. (2008-11-10 13:59:00) [24]
> AHTOLLlKA (10.11.08 13:49) [20]
Где обработка сообщений иконки ?
Тобой обрабатываются только WM_CREATE и WM_CLOSE ..
AndreyV (2008-11-10 13:56:00) [25]> [22] AndreyV © (10.11.08 13:53)
Пардон. Не туда посмотрел.
AndreyV (2008-11-10 13:53:00) [26]Сообщения в цикле обрабатывай в WinProc
Сергей М. (2008-11-10 13:52:00) [27]
> иконку пока не могу прикрутить.
А где собственно попытки "прикручивания" ?
Ты привел просто некий чужойкод, для изучения и понимания каждой строчки которого ты нге сделал никаких умственных усилий и телодвижений
AHTOLLlKA (2008-11-10 13:49:00) [28]
with tray do
begin
cbSize := sizeof(TNotifyIconData);
uID := 0;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;
hIcon := LoadIcon(0, IDI_ASTERISK);
szTip := ('My Resident');
end;
Shell_NotifyIcon(NIM_ADD, @tray);
иконка появляеца и изчезает... (
AHTOLLlKA (2008-11-10 13:47:00) [29]
program APIForm;
uses
Windows, Messages,ShellApi;
const
TITLE = 'Cамый простой пример API формы без всего';
WM_NOTIFYTRAYICON = WM_USER + 1;
var
h_Wnd : HWND;
tray: TNotifyIconData;
function WndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam:
LPARAM): LRESULT; stdcall;
begin
case (Msg) of
WM_CREATE:
begin { а здесь могло бы быть то что выполняется при старте проги }
end;
WM_CLOSE:
begin
PostQuitMessage(0);
Result := 0
end;
else
Result := DefWindowProc(hWnd, Msg, wParam, lParam);
end;
end;
function APIFormC(Width, Height : Integer ) : Boolean;
var
wndClass : TWndClass; { Window class }
dwStyle , { Window styles }
dwExStyle : DWORD; { Extended window styles }
h_Instance : HINST; { Current instance }
begin
h_Instance := GetModuleHandle(nil); { Grab An Instance For Our
Window }
with wndClass do { Set up the window class }
begin
style := CS_HREDRAW or { Redraws entire window if length
changes }
CS_VREDRAW or { Redraws entire window if height
changes }
CS_OWNDC; { Unique device context for the
window }
lpfnWndProc := @WndProc; { Set the window procedure to our
func WndProc }
hInstance := h_Instance;
hCursor := LoadCursor(0, IDC_ARROW);
hbrBackground := COLOR_WINDOW; { стандартный цвет окна(можно так
445566 (RGB), или просто clred (красный) ) }
lpszClassName := 'APIForm';
end;
RegisterClass(wndClass);
dwStyle := WS_OVERLAPPEDWINDOW; { форма с кнопками вверху }
dwExStyle := WS_EX_APPWINDOW; { форма со значком приложения в углу }
h_Wnd := CreateWindowEx(dwExStyle, { Extended window styles }
'APIForm', { Class name }
TITLE, { Window title (caption) }
dwStyle, { Window styles }
0, 0, { позиция окна(левый верхний
угол) }
Width, Height, { Размеры Width и Heught
соответственно }
0, { No parent window }
0, { No menu }
h_Instance, { Instance }
nil); { Pass nothing to WM_CREATE }
if h_Wnd = 0 then
begin
MessageBox(0, 'Не могу создать окно!', 'Ошибка', MB_OK or
MB_ICONERROR);
Result := False;
Exit;
end;
ShowWindow(h_Wnd, SW_SHOW);
SetForegroundWindow(h_Wnd);
SetFocus(h_Wnd);
Result := True;
end;
function WinMain(hInstance : HINST; hPrevInstance : HINST;
lpCmdLine : PChar; nCmdShow : Integer) : Integer; stdcall;
var
msg : TMsg;
finished : Boolean;
begin
with tray do begin
cbSize := SizeOf(TNotifyIconData);
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;
szTip := ('Это мое приложение в трее');
end;
Shell_NotifyIcon(NIM_ADD, Addr(tray));
Finished := False;
APIFormC( 400, 200 ); { ширина и высота }
while not finished do
begin
if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then { Check if there is a
message for this window }
begin
if (msg.message = WM_QUIT) then { If WM_QUIT message received
then we are done }
finished := True
else begin { Else translate and
dispatch the message to this window }
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;
end;
Result := msg.wParam;
end;
begin
WinMain( hInstance, hPrevInst, CmdLine, CmdShow );
with tray do begin
cbSize := SizeOf(TNotifyIconData);
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;
szTip := ('Это мое приложение в трее');
end;
Shell_NotifyIcon(NIM_ADD, Addr(tray));
end.
иконку пока не могу прикрутить.... но вроде бы там выскакивает квадратик что что то в трее появилось
Сергей М. (2008-11-10 13:41:00) [30]
> я про обработку событий
Событие в этом случае - это факт получения оконного сообщения.
Прежде чем получать какие-то сообщения, надо чтобы существовало окно.
Какие меры ты принял для этого ?
Поросенок Винни-Пух (2008-11-10 13:39:00) [31]пытался как то к окну привязать написанному на апи.. не получаеться..
надо пробовать еще раз
Сергей М. (2008-11-10 13:39:00) [32]
> AHTOLLlKA (10.11.08 13:37) [14]
Вот и показывай с чувством, с толком, с расстановкой, как ты пытался и что при этом не получается..
AHTOLLlKA (2008-11-10 13:38:00) [33]
> > AHTOLLlKA (10.11.08 13:25) [7]Ты справку к этой ф-ции
> проштудировал ?Где ты там увидел хоть какое-либо упоминание
> о форме ?
я про обработку событий..
AHTOLLlKA (2008-11-10 13:37:00) [34]дак как тогда быть...
пытался как то к окну привязать написанному на апи.. не получаеться..
Сергей М. (2008-11-10 13:36:00) [35]
> AHTOLLlKA (10.11.08 13:25) [7]
Ты справку к этой ф-ции проштудировал ?
Где ты там увидел хоть какое-либо упоминание о форме ?
Поросенок Винни-Пух (2008-11-10 13:34:00) [36]нужно окно для обработки сообщений иконы. а окно это не обязательно форма, а значит и forms.pas
brother (2008-11-10 13:34:00) [37](х(х_х)х)
AHTOLLlKA (2008-11-10 13:33:00) [38]можешь показать как это ?
Поросенок Винни-Пух (2008-11-10 13:28:00) [39]если бы было привязано к форме, то у шеллнотифайикон был бы параметр - экземпляр формы. а его нет.
Поросенок Винни-Пух (2008-11-10 13:26:00) [40]здесь привязно. а вообще не привязано.