Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

иконка в трее без форм [D7, WinXP]


Страницы:   1 2 3

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]

здесь привязно. а вообще не привязано.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо