Как добавить свою иконку в панель уведомлений или как свернуть окно в панель уведомлений?

altРисунок 1 – проект Deamolit, добавление иконки в панель уведомлений.
Данный проект иллюстрирует как можно добавить свою иконку в панель уведомления и как создавать *.exe файл который носит в себе свои ресурсы, к примеру, рисунки.
Для добавления иконки в панель уведомлений вам необходимо создать объект класса TCustomTrayIcon. В проекте создан элемент
notify_icon:TCustomTrayIcon;
Что бы добавить свою иконку в панель уведомлений вам необходимо иметь саму иконку. Как иконки и изображения создаются самим *.exe файлом из своих ресурсов будет рассмотрено ниже.
Программа содержит всплывающее меню, которое настроено на иконку на панели уведомления и при сворачивании окна программа становиться невидимой, притом что иконка все еще на месте и может обрабатывать свои события.
Ресурсы программы создаются в скрытой папке и уничтожаются при закрытий программы.
Скрытой созданную при запуске программы папку делает команда
FileSetAttr(SourceDir,faHidden);
Здесь SourceDir – путь к папке. А второй аргумент может принимать комбинации значений
faReadOnly //только для чтения
faHidden //скрытые файлы
faSysFile //системные файлы
faVolumeID //Volume ID файлы
faDirectory //файлы директории (они нужной самой системе для определения папки)
faArchive //архивный файл
faAnyFile //просто файл
к примеру FileSetAttr(SourceDir,faHidden + faSysFile);//теперь это скрытая системная папка
Ресурсы приложения определяться в файле с расширением *.RC .
К примеру, файл Ico.rc
ICO EXT exit.ico
ICO TUN tune.ico
ICO DEA deamolit.ico
Эти файлы надо добавить в проект Project>>Add to project и откомпелировать, тогда создаються файлы *.RES . В принцепе можно и использовать сами эти *.RES файлы но тогда надо удалить *.RC файлы и прописаить *.RES файлы.
implementation
{$R *.dfm}//это по умолчанию здесь
{$R source\main.res source\main.rc}// а вот это уже наше, ток путь укажите правильно!
{$R source\ci.res source\copy.ico}// в разных версиях Delphi *.RES файлы
{$R source\help.res source\help.pdf}// создаються в разных директориях! Сначала найдите их!

Здесь три файла иконки имеют разные определители но все относиться к ICO. Хотя следует отметить что вы можете произвольно относить к каким либо отношениям здесь только нужно помнить что эти файлы вынимаются из ресурсов по этим меткам.
Res := TResourceStream.Create(Hinstance, ‘IMG’, ‘CAT’);
Res.SavetoFile(‘hidden source\cat.jpg’);
Вот теперь можно с этими файлами баловаться.
A более подробно о работе с папками и файлами вы можете узнать по ссылке.
Исходник программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, JPEG, folders, StdCtrls, ImgList, Menus;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
ImageList1: TImageList;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure N1Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
{ Private declarations }
//процедура обработчик щелчка по иконке на панели
procedure ShowAPL(Sender: TObject);
//процедура обработчик системной команды на сворачивание окна
procedure WMSysCommand(var Msg: TWMSysCommand);message WM_SYSCOMMAND;
public
{ Public declarations }
end;
var
Form1: TForm1;
path:string;
SourceDir:string;
notify_icon:TCustomTrayIcon;
implementation
{$R *.dfm}
//видемо не видемо
procedure TForm1.ShowAPL(Sender: TObject);
begin
form1.visible:=not(form1.visible);
end;
//если система посылает команду на сворачивание
procedure TForm1.WMSysCommand;
begin
if Msg.CmdType = SC_MINIMIZE
then form1.Visible:=false else inherited;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//удалить временную папку программы
RemoveDirs(SourceDir);
end;
procedure TForm1.FormCreate(Sender: TObject);
var Res: TResourceStream;
ico:TIcon;
begin
//определение от куда запущено программа
path:=ExtractFilePath(Application.EXEName);
//путь к папке со скрытыми ресурсами
SourceDir:=Path+’hidden source’;
//если папка уже существует, удалить ее
if DirectoryExists(SourceDir) then RemoveDirs(SourceDir);
//создать папку
if NOT CreateDir(SourceDir) then
begin
ShowMessage(‘Не возможно создать ресурсы программы!’ + SourceDir);
close;
end;
//скрыть папку
FileSetAttr(SourceDir,faHidden);
//Вынимаем ресурсы и сохраняем их в скрытой папке
Res := TResourceStream.Create(Hinstance, ‘IMG’, ‘CAT’);
Res.SavetoFile(‘hidden source\cat.jpg’);//сохраняем файл
Res := TResourceStream.Create(Hinstance, ‘ICO’, ‘EXT’);
Res.SavetoFile(‘hidden source\exit.ico’);
Res := TResourceStream.Create(Hinstance, ‘ICO’, ‘TUN’);
Res.SavetoFile(‘hidden source\tune.ico’);
Res := TResourceStream.Create(Hinstance, ‘ICO’, ‘DEA’);
Res.SavetoFile(‘hidden source\deamolit.ico’);
Res := TResourceStream.Create(Hinstance, ‘HLP’, ‘MAI’);
Res.SavetoFile(‘help.pdf’);
//загрузить кота
image1.Proportional:=true;
image1.Picture.LoadFromFile(path+’hidden source\cat.jpg’);
//создать иконку
Ico := TIcon.Create;
//загрузить в нее информацию
Ico.LoadFromFile(Path+’hidden source\tune.ico’);
//присвоить ее списку изображений
ImageList1.AddIcon(Ico);
//дать индекс изображения всплывающему меню
N1.ImageIndex:=0;
Ico.LoadFromFile(Path+’hidden source\exit.ico’);
ImageList1.AddIcon(Ico);
N3.ImageIndex:=1;
Ico.LoadFromFile(Path+’hidden source\deamolit.ico’);
ImageList1.AddIcon(Ico);
//прицепить к вплывающему меню список изображений
Popupmenu1.Images:=Imagelist1;
//создать иконку на панели уведомлений
notify_icon:=TCustomTrayIcon.Create(form1);
//подсказка иконки
notify_icon.Hint:=’Deamolit’;
//прицепить к иконке список изображений
notify_icon.Icons:=ImageList1;
//номер изображения
notify_icon.IconIndex:=0;
//обновить
notify_icon.Refresh;
//сделать иконку видемой
notify_icon.Visible:=true;
//anti artefact т.е. танцы с бубнами
notify_icon.IconIndex:=2;
notify_icon.Refresh;
notify_icon.Visible:=true;
//прицепить всплывающее меню к иконке
notify_icon.PopupMenu:=PopupMenu1;
//обработчик двойного щелчка по иконке процедура ShowAPL
notify_icon.OnDblClick:=ShowAPL;
end;
//показать
procedure TForm1.N1Click(Sender: TObject);
begin
form1.Visible:=true;
end;
//закрыть
procedure TForm1.N3Click(Sender: TObject);
begin
form1.Close;
end;
end.
К стати нажав на единственную кнопку на окне можно получить файл help.pdf

Понравилась статья? Поделиться с друзьями: