В этой статье я тебя научу, как создавать свои иконки в SystemTray, это в районе часов. Мы сделаем это двумя способами: с помощью библиотеки RX и cамостоятельно.
Для начала воспользуемся библиотекой RX. Она намного проще и удобней. Ссылку на неё можно найти в разделе "Download" и подразделе "Компоненты". Если у тебя её ещё нет, то срочно начинай скачивать, тем более, что она написана нашими программистами и абсолютно бесплатна.
Когда скачаешь архив компонентов rxlib.zip (он весит чуть более мегабайта), разархивируй его и запусти файл rxinst.exe. Программа установки скопирует все необходимые файлы на твой комп. Запомни путь, куда устанавливаешь эту библиотеку.
После установки, новые компоненты нужно подключить к Delphi. Для этого перейди в директорию, куда была установлена RXLib и найди файл Readme.rus. Открой его любым текстовом редактором. Здесь прекрасно и по русски написано, как библиотека подключается к Delphi разных версий. Например, для пятой нужно выполнить следующие действия:
Выберите пункт меню "File/Open...", и откройте пакет (package) RXCTL5.DPK. В появившемся окне "Package - ..." нажмите кнопку "Compile". После компиляции пакета RXCTL5 аналогичным образом скомпилируйте остальные run-time пакеты RXDB5.DPK и RXBDE5.DPK. Скомпилированные BPL-файлы поместите в каталог, включенный в переменную окружения PATH (например, WINDOWS\SYSTEM). После компиляции run-time пакетов окройте с помощью меню "File/Open..." файл DCLRX5.DPK. В появившемся окне "Package - ..." нажмите кнопку "Compile", и после компиляции нажмите кнопку "Install". После установки пакета DCLRX5.DPK (должен быть установлен в IDE первым) произведите те же действия с пакетами DCLRXDB5.DPK и DCLRXBD5.DPK. Не сохраняйте пакеты библиотеки RX в Delphi IDE. Если у Вас была установлена предыдущая версия библиотеки RX, удалите перед установкой старые скомпилированные packages - файлы RXCTL5.BPL, RXDB5.BPL, RXBDE5.DPK, DCLRX5.BPL, DCLRXDB5.BPL, DCLRXBD5.DPK.
Пакеты, которые тебя просят открывать кнаходятся по адресу "Путь, куда был установлен RXLib \ Директория Units" . После успешной установки у тебя появится три новых закладки: RX Controls, RX Tools и RX DBAware.
На закладке RX Tools есть очень хороший компонент - RXTrayIcon . Брось его на форму.
Теперь в свойстве Icon задай какую-нибудь иконку. Всё!!! Можно запускать программу и в SystemTray уже будет видна эта иконка. Но этого мало. Иконка ничего не умеет делать. Её надо чему-то научить.
Давай для начала сделаем её анимированной. Для этого дважды щёлкни по свойству Icons и перед тобой откроется окно:
Здесь ты можешь задать сразу кучу иконок, которые будут последовательно менять друг друга. Нажимая на кнопку с изображением плюса, ты можешь добавлять в последовательность новые иконки. Добавь в этот список две или более иконок. И закрой окно.
Теперь измени свойство Interval на 300. Это количество миллисекунд, которые будет видна каждая иконка. Чем меньше это число, тем чаще меняются иконки в SystemTray.
Теперь бросим на форму одну кнопку и обзавём её "Animate". По её нажатию напишем следующий код:
procedure TForm1.Button1Click(Sender: TObject);
begin
RxTrayIcon1.Animated:=true;
end;
Если ты теперь запустишь программу, то по нажатию кнопки "Animate" иконки в SystemTray нфчнут менятся создавая анимацию. Результат должен быть похожим на этот скрин:
И это опять ещё не всё. Иконка та анимированная, но ничего не умеет делать. Чтобы она хоть что-то могла, к ней надо подключить меню. Для этого брось на форму компонент PopupMenu c закладки Standard . Дважды щёлкни по этому компоненту и создай только один пункт: "Выход".
Для этого пункта создай событие OnClick и напиши в нём:
procedure TForm1.N1Click(Sender: TObject);
begin
Close;
end;
Теперь у компонента RxTrayIcon1 в свойстве PopupMenu укажи созданное меню. Вот теперь всё. У нас есть иконка в SystemTray, она может быть анимированной и по нажатию на неё мышкой выскакивает меню. Это всё что надо для настоящего кодера.
И на последок я расскажу, как создать иконку с помощью WinAPI, без использования компонентов. Для этого есть функция WINAPI Shell_NotifyIcon. У неё два параметра. Первый может принимать значения:
NIM_ADD - добавить иконку.
NIM_DELETE - удалить иконку.
NIM_MODIFY - редактировать
Второй параметр - это указатель на структуру TNotifyIconData. Она состоит из:
cbSize - сюда нужно занести размер структуры.
hWnd - указатель на окно создающее иконку.
uID - приложение отвечающее за иконку.
uFlags - флаги, указывающие на те поля, которые заполнены в структуре. Возможны сочетания трёх значений: NIF_ICON (в свойстве hIcon указана иконка), NIF_MESSAGE (в свойстве uCallbackMessage указана функция обработчик сообщений для иконки) и NIF_TIP (в свойстве szTip указан текст подсказки).
uCallbackMessage - функция обработчик сообщений для иконки.
hIcon - иконка.
szTip - подсказка (максимум 64 символа).
Ну и давай рассмотрим пример использования этой функции:
var
NI : TNotifyIconData;
begin
NI.uFlags := nif_icon or nif_tip or nif_message;
NI.cbSize := SizeOf(NI);
NI.Wnd := Window;
NI.szTip := 'Подсказка';
NI.hIcon := LoadIcon(HInstance, 'MAINICON');
NI.uCallBackMessage := wm_nid;
Shell_NotifyIcon(nim_add, @NI);
Shell_NotifyIcon(nim_delete, @NI);
end;
На этом разряшите откланиться. Хотя нет, не буду. Просто увидимся в ближайшее время на моём сайте. По крайней мере я надеюсь.