Форум: "Начинающим";
Текущий архив: 2008.12.28;
Скачать: [xml.tar.bz2];
Внизиконка в трее без форм Найти похожие ветки
← →
AHTOLLlKA (2008-11-10 12:55) [0]подскажите люди добрые...
как засунуть иконку в трей, не используя в uses forms
??????
← →
Сергей М. © (2008-11-10 13:01) [1]
> не используя в uses forms
Чем он тебе помешал ?
← →
AHTOLLlKA (2008-11-10 13:07) [2]он помешал весом... нет смысла носить 400кб с собой думаю.. если будеттолько иконка с попапами например..
← →
Сергей М. © (2008-11-10 13:10) [3]см. Shell_NotifyIcon()
← →
AHTOLLlKA (2008-11-10 13:19) [4]нет, ну я понимаю чем и как оно делаеться, но оно привязано к форме!!!!!!!
я и прошу помочь как сделать без формы... читайте пожалуйста внимательней...
← →
Поросенок Винни-Пух © (2008-11-10 13:23) [5]ни к какой форме оно не привязано
← →
Сергей М. © (2008-11-10 13:24) [6]
> оно привязано к форме
Не привязано, не выдумывай.
← →
AHTOLLlKA (2008-11-10 13:25) [7]procedure TForm1.WMTRAYICONNOTIFY(var Msg: TMessage);
begin
{обрабатываем события на иконке в трее}
case Msg.LParam of
WM_LBUTTONDOWN: Form1.Visible:=true;
WM_LBUTTONDBLCLK: {ваш код обработки события двойного нажатия на левую кнопку мыши}
WM_LBUTTONUP: {ваш код обработки события отпускания левой кнопки мыши}
WM_RBUTTONDOWN: {ваш код}
WM_RBUTTONDBLCLK: {ваш код}
WM_RBUTTONUP: {ваш код}
WM_MOUSEMOVE: {ваш код}
end;
end;
таже оброботка событий...
← →
Поросенок Винни-Пух © (2008-11-10 13:26) [8]здесь привязно. а вообще не привязано.
← →
Поросенок Винни-Пух © (2008-11-10 13:28) [9]если бы было привязано к форме, то у шеллнотифайикон был бы параметр - экземпляр формы. а его нет.
← →
AHTOLLlKA (2008-11-10 13:33) [10]можешь показать как это ?
← →
brother © (2008-11-10 13:34) [11](х(х_х)х)
← →
Поросенок Винни-Пух © (2008-11-10 13:34) [12]нужно окно для обработки сообщений иконы. а окно это не обязательно форма, а значит и forms.pas
← →
Сергей М. © (2008-11-10 13:36) [13]
> AHTOLLlKA (10.11.08 13:25) [7]
Ты справку к этой ф-ции проштудировал ?
Где ты там увидел хоть какое-либо упоминание о форме ?
← →
AHTOLLlKA (2008-11-10 13:37) [14]дак как тогда быть...
пытался как то к окну привязать написанному на апи.. не получаеться..
← →
AHTOLLlKA (2008-11-10 13:38) [15]
> > AHTOLLlKA (10.11.08 13:25) [7]Ты справку к этой ф-ции
> проштудировал ?Где ты там увидел хоть какое-либо упоминание
> о форме ?
я про обработку событий..
← →
Сергей М. © (2008-11-10 13:39) [16]
> AHTOLLlKA (10.11.08 13:37) [14]
Вот и показывай с чувством, с толком, с расстановкой, как ты пытался и что при этом не получается..
← →
Поросенок Винни-Пух © (2008-11-10 13:39) [17]пытался как то к окну привязать написанному на апи.. не получаеться..
надо пробовать еще раз
← →
Сергей М. © (2008-11-10 13:41) [18]
> я про обработку событий
Событие в этом случае - это факт получения оконного сообщения.
Прежде чем получать какие-то сообщения, надо чтобы существовало окно.
Какие меры ты принял для этого ?
← →
AHTOLLlKA (2008-11-10 13:47) [19]
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.
иконку пока не могу прикрутить.... но вроде бы там выскакивает квадратик что что то в трее появилось
← →
AHTOLLlKA (2008-11-10 13:49) [20]
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);
иконка появляеца и изчезает... (
← →
Сергей М. © (2008-11-10 13:52) [21]
> иконку пока не могу прикрутить.
А где собственно попытки "прикручивания" ?
Ты привел просто некий чужой код, для изучения и понимания каждой строчки которого ты нге сделал никаких умственных усилий и телодвижений
← →
AndreyV © (2008-11-10 13:53) [22]Сообщения в цикле обрабатывай в WinProc
← →
AndreyV © (2008-11-10 13:56) [23]> [22] AndreyV © (10.11.08 13:53)
Пардон. Не туда посмотрел.
← →
Сергей М. © (2008-11-10 13:59) [24]
> AHTOLLlKA (10.11.08 13:49) [20]
Где обработка сообщений иконки ?
Тобой обрабатываются только WM_CREATE и WM_CLOSE ..
← →
AHTOLLlKA (2008-11-10 14:00) [25]
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.
обрабатываю так... но иконка при наведении пропадает все равно...
код чужой ни чужой.. учусь как могу и как позволяет время...
← →
AHTOLLlKA (2008-11-10 14:03) [26]как то надо заставить обрабатывать только WM_NOTIFYTRAYICON
шевеление мышки и тд...
и иконка.. не могу понять почему изчезает при наведение...
← →
Сергей М. © (2008-11-10 14:05) [27]
> обрабатываю так
Вижу обработку
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:13) [28]не понимаю...
тоесть окей, я ее если там добавлю.. что делать при ее обработке тогда ??
из-за этого пропадает иконка ??
← →
@!!ex © (2008-11-10 14:16) [29]> из-за этого пропадает иконка ??
Да. Винда не получает результата обработки и считает, что иконка сдохла.
← →
Сергей М. © (2008-11-10 14:33) [30]
> я ее если там добавлю.. что делать при ее обработке тогда
Как минимум сформировать результат обработки.
Всё это (и многое-многое другое) следует делать ручками, раз ты отказался от forms.
← →
AHTOLLlKA (2008-11-10 14:44) [31]многое.. понятно... а хоть что-нибудь подскажите что там обрабатывать...
и что делать при срабатывании сообщения
← →
Поросенок Винни-Пух © (2008-11-10 14:46) [32]и что делать при срабатывании сообщения
можно хрюкать при левом клике на иконке. а при правом клике на иконке можно собачий вальс проиграть.
← →
AHTOLLlKA (2008-11-10 14:48) [33]дак я понять не могу как оставить ее на месте при наведении мышкой на неее (((((
← →
Leonid Troyanovsky © (2008-11-10 14:48) [34]
> AHTOLLlKA (10.11.08 14:44) [31]
> многое.. понятно... а хоть что-нибудь подскажите что там
> обрабатывать...
Читать msdn.
Это небольшая мзда за отказ от forms.
--
Regards, LVT.
← →
Сергей М. © (2008-11-10 14:52) [35]
> что делать при срабатывании сообщения
WM_NOTIFYTRAYICON:
begin
case lparam of
WM_RBUTTONUP: ..
WM_LBUTTONUP: ..
WM_MOUSEMOVE:..
...
end;
Result := 0;
end;
← →
Anatoly Podgoretsky © (2008-11-10 14:53) [36]> Leonid Troyanovsky (10.11.2008 14:48:34) [34]
Это не мзда, это расплата за отказ.
← →
Сергей М. © (2008-11-10 14:55) [37]
> AHTOLLlKA (10.11.08 14:44) [31]
Бросай эту гнилую затею - так и будешь с протянутой рукой сюда ходить по каждому чиху)
← →
AHTOLLlKA (2008-11-10 15:01) [38]
program APIForm;
uses
Windows, Messages,ShellApi,Graphics;
const
TITLE = "11111111";
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_NOTIFYTRAYICON:
begin
case lparam of
WM_RBUTTONUP:
begin
//
end;
WM_LBUTTONUP:
begin
//
end;
WM_MOUSEMOVE:
begin
messagebox(0,"test","test",0);
end;
end;
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 := h_Wnd;
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 15:08) [39]
> ткните в коде где ОНО
Его нет, понимаешь ? Совсем нет. То есть напрочь отсутствует.
Так что тыкать некуда.
А вот в [35] есть.
Дело за малым - самомтоятельно дотумкать, куда этот фрагмент приспособить.
Задачка для школьника)
> почему изчезает
Вот потому и исчезает.
← →
AHTOLLlKA (2008-11-10 15:10) [40]
> А вот в [35] есть.Дело за малым - самомтоятельно дотумкать,
> куда этот фрагмент приспособить.Задачка для школьника)
дак я же добавил это в
function WndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam:
LPARAM): LRESULT; stdcall
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.12.28;
Скачать: [xml.tar.bz2];
Память: 0.58 MB
Время: 0.007 c