Категории раздела
J2me|java [29]
Basic [6]
Delphix [21]
C+|C++|C# [3]
Pascal [10]
Другие [0]
языки которые не войшли в верхние разделы
Главная » Статьи » Программирования » Delphix

Работать с Tray без компонентов.
Работать с трей без компонентов не очень удобно и понятно, но если один раз понять, то левые компоненты уже не нужны, т.к. можно реализовать всё что угодно. 

Во первых изменим стандартный TNotifyIconData на Z_TrayNotify, т.к. в стандарте szTip имеет 63 символа и это не очень удобно.

type
  Z_TrayNotify = record
    cbSize: DWORD;
    Wnd: HWND;
    uID: UINT;
    uFlags: UINT;
    uCallbackMessage: UINT;
    hIcon: HICON;
   szTip: array [0..MAXCHAR] of AnsiChar;
 end;

Во вторых добавим

const
 Ztray = WM_USER + 202;

Теперь две функции которые будут работать с трей. 

function Z_AddTray(const Window: HWND; const IconID: Byte; const Icon: HICON; 
   const dwMsg: Cardinal; const Hint: string = ''): Boolean;
var
 NID: Z_TrayNotify;
begin
 FillChar(NID, SizeOf(Z_TrayNotify), 0);
 with NID do
 begin
   cbSize := SizeOf(Z_TrayNotify);
   Wnd := Window;
   uID := IconID;
   uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;
   StrPCopy(szTip, Hint);
   hIcon := Icon;
   uCallbackMessage := ZTray;
 end
 Result := Shell_NotifyIcon(dwMsg, @NID);
end;

С помощью этой функции можно Добавлять и Изменять иконку и подсказку.  

function Z_DeleteTray(const Window: HWND): Boolean;
var 
  NID: Z_TrayNotify;
begin 
  FillChar(NID, SizeOf(Z_TrayNotify), 0);
 with NID do  begin    cbSize := SizeOf(Z_TrayNotify);    Wnd := Window;
 end;  Result := Shell_NotifyIcon(NIM_DELETE, @NID); end;
С помощью этой функции удаляем иконку из трей. В третьих добавим после private вот этот обработчик сообщения (ZTray)
function TrayNotify(var Msg: TMessage): boolean;
и конечно сам обработчик
function TForm1.TrayNotify(var Msg: TMessage): boolean; 
{ 
 var 
 cur: TPoint; 
} 
begin 
  {GetCursorPos(Cur);} 

  Result := false;
  case Msg.Msg of
   ZTray:      case (Msg.LParam) of        WM_RBUTTONUP: Application.Restore;        {WM_RBUTTONUP:        begin          SetForegroundWindow(Form1.Handle);          TrayMenu.Popup(cur.x, cur.y);
       
end;}

       WM_LBUTTONUp: Application.Minimize;      end;
   end;
e
nd;
WM_LBUTTONUP - сворачивает приложение WM_RBUTTONUP - восстанавливает, еще можно добавить меню (TrayMenu - TPopupMenu) и убрать все что в скобках { } Теперь как с этим работать. Сразу при создании формы пишем
Application.HookMainWindow(TrayNotify);
Ставится hook на отлов сообщения. При close или destroy пишем
Z_DeleteTray(Application.Handle); // на всякий случай  
Application.unHookMainWindow(TrayNotify);
Снимаем hook На форме 3 кнопки и TrayIcons - TImageList. TrayIcons имеет две картинки 1 кнопка - создание иконки
var 
  tIc: TIcon;
begin  tIc := TIcon.Create;  TrayIcons.GetIcon(0, tIc);  Z_AddTray(Application.Handle, 0, tIc.Handle, NIM_ADD,    'ЛКМ = Свернуть.' + #13 +    'ПКМ = Развернуть.');  tIc.Free;
end;
2 кнопка - изменение иконки и подсказки
var 
  tIc: TIcon;
begin
 tIc := TIcon.Create;  TrayIcons.GetIcon(1, tIc);  Z_AddTray(Application.Handle, 0, tIc.Handle, NIM_MODIFY,    'Поменял Hint(подсказку) и иконку.' + #13 +    
   'Всего Hint вмещает 128 символов');  tIc.Free;
end;
3 кнопка - удаление иконки
Z_DeleteTray(Application.Handle);
Категория: Delphix | Добавил: graimp (21.12.2011)
Просмотров: 399 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Наш опрос
Оцените мой сайт
Всего ответов: 25
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0