Многие считают, что Delphi — это инструмент RAD, в том числе и я, который был предвзято настроен против Delphi, когда учился в школе. Теперь, когда я вышел из «башни из слоновой кости», он охватил более широкий спектр областей и столкнулся с большим количеством проблем. Постепенно я приобрел свою собственную точку зрения. Фактически, Delphi — это инструмент разработки, основанный на языке Object Pascal, а это означает, что Delphi по сути является языковым инструментом и действительно объектно-ориентирован. Пример, который я привожу ниже, представляет собой апплет лотка, реализованный в Delphi. Программа короткая и лаконичная, с понятным контекстом, я подробно объясню ключевые части. Точно так же, как господин Хоу Цзюньцзе слой за слоем снимает MFC, сегодня мне тоже придется «приготовить быка».
В Delphi, когда дело доходит до системного программирования, API-функции должны вызываться без исключения. В модуле ShellAPI.pas есть прототипы API-функций.
Практические упражнения:
один. Создайте новое приложение: Файл->Новое приложение. В разделе Интерфейс определите константу сообщения: const WM_NID=WM_USER+1000. В системе предусмотрено, что сообщения для пользователей можно настраивать, начиная с WM_USER;
два. Определите глобальную переменную: NotifyIcon:TNotifyIconData NotifyIcon — очень важная переменная. Вся программа в основном вращается вокруг этой переменной. TNotifyIconData — это тип записи. Удерживая клавишу Ctrl, дважды щелкните TNotifyIconData, чтобы войти в модуль ShellAPI.pas. (Примечание. В Delphi это очень хороший способ анализа исходного кода. Исходный код говорит сам за себя. Если вы хотите узнать внутреннюю историю программы, лучший способ — проанализировать исходный код!) При этом время появляется следующее Оператор присваивания:
TNotifyIconData = TNotifyIconDataA, это значение очень очевидно, то есть TNotifyIconData и TNotifyIconDataA — это один и тот же тип данных, а затем посмотрите вниз:
TNotifyIconDataA = _NOTIFYICONDATAA, смысл тот же, что и раньше, посмотрите вниз:
тип
_NOTIFYICONDATAA = запись
cbSize: DWord;
Ветер: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
хИкон: ХИКОН;
szTip: массив [0..63] AnsiChar;
конец;
Это действительно «выйти после того, как его долго окликнули, но все еще держать пипу, полускрывая лицо». Теперь всем все предельно ясно. Глобальная переменная NotifyIcon, которую мы только что определили, на самом деле представляет собой переменную типа записи, содержащую 7 компонентов, что эквивалентно структурной переменной в C/C++ (программисты C/C++ должны быть с ней хорошо знакомы). Давайте по порядку объясним функции каждой из семи частей типа записи.
1> cbSize — это размер определенной вами переменной NotifyIcon, которую можно получить с помощью SizeOf(TNotifyIconData). Если вы опытный программист C/C++, вы должны быть с ней знакомы. В C/C++ всякий раз, когда вы хотите выделить память для структурной переменной, вы должны использовать SizeOf(Struct type), чтобы узнать, сколько памяти необходимо для хранения такой структурной переменной.
2> Wnd — это дескриптор. Какую форму вы хотите обрабатывать сообщения, генерируемые программой в трее? Просто позвольте Wnd указать на эту форму.
Например: если вы хотите щелкнуть небольшой значок в области уведомлений на панели задач, чтобы переключить форму между «показать» и «скрыть», укажите Wnd на главную форму.
3> uID: Если вы хотите создать несколько апплетов в трее, как их отличить? Он отличается этим идентификационным номером.
3> uFlags — бит флага, который указывает свойства создаваемой в данный момент программы в трее:
NIF_ICON указывает, что текущий установленный значок (то есть значение hIcon) действителен.
NIF_MESSAGE указывает, что текущее установленное системное сообщение (то есть значение uCallBackMessage) допустимо.
NIF_TIP указывает, что текущая установленная панель подсказок (то есть значение szTip) действительна.
4> uCallBackMessage Это самая важная из семи частей. Укажите здесь сообщение обратного вызова, то есть определите здесь имя сообщения. Когда вы щелкаете или щелкаете правой кнопкой мыши значок на панели задач, имя сообщения, определенное в uCallBackMessage, будет отправлено в форму, на которую указывает Wnd, а затем вы определяете. функция вывода сообщения в программе для обработки этого сообщения. Таким образом обрабатывается весь набор сообщений, касающихся Windows.
6> hIcon — это дескриптор значка в трее. На основе этого дескриптора вы можете добавлять, изменять и удалять значки.
7> szTip — это всплывающее сообщение, которое появляется, когда курсор мыши наводится на маленький значок на панели задач.
Здесь я потратил много чернил, рассказывая внутреннюю историю TNotifyIconData. Как только эта часть будет прояснена, остальное встанет на свои места.
три. Дважды щелкните главную форму, чтобы войти в область кода FormCreate:
TForm1.FormCreate(Отправитель:TObject);
Начинать
//NotifyIcon — глобальная переменная, определенная в начале программы.
с NotifyIcon сделать
начинать
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Handle; //Дескриптор, указывающий на текущую форму Form1
идентификатор идентификатора:=1;
uFlags:=NIM_ICON или NIM_MESSAGE или NIM_TIP;
uCallBackMessage:=WM_NID;
hIcon:=application.Icon.Handle;
szTip:=”Злой молодой человек из семьи Чжан”;
конец;.
//Добавляем заданную переменную NotifyIcon в систему для обработки
Shell_NotifyIcon(NIM_ADD,@NotifyIcon);
Конец;
Четыре. Следующим шагом является определение функции обработки сообщений: когда система отправляет сообщение в форму, оно обрабатывается следующей функцией. Каждая функция обработки сообщений обрабатывает определенный тип сообщения. Обратите внимание на разницу между определением тела функции ниже и общим определением функции: функция обработки сообщений должна добавлять в конце имя сообщения, чтобы при отправке системой. Когда приходит сообщение WM_NID, автоматически запускается функция обработки сообщения WMNID.
PROcedure WMNID(var msg:TMessage);сообщение WM_NID;
начинать
случай msg.LParam из
WM_LBUTTONUp; Form1.Visible:=не Form1.Visible;
WM_RBUTTONUP: ShowMessage('Вы нажали правую кнопку');
Конец;
Конец;
Итак, родилась простейшая программа. Каждый может установить свои любимые иконки.
Проект->Параметры, выберите страницу «Приложение» и загрузите свой любимый значок в элемент «Значок», чтобы при запуске программы ваш любимый значок отображался на панели задач. Когда вы щелкнете по значку, форма Form1 будет переключаться между видимой и невидимой, то есть щелкните, чтобы отобразить ее, и щелкните еще раз, чтобы скрыть ее. При нажатии на значок правой кнопкой мыши всплывает сообщение: «Вы нажали правую кнопку».
пять. Наконец, не забудьте освободить созданную программу в трее при закрытии приложения, иначе она будет занимать системные ресурсы.
TForm1.FormDestroy(Отправитель:TObject);
Начинать
Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);
Конец;
Прошло почти полгода с тех пор, как я закончил школу. Я все еще не могу понять многих вещей в школе, и мое понимание недостаточно глубоко. Когда я выхожу в общество, я встретил много друзей-даосов, и каждый из них получил большую пользу. Когда у меня возникает какой-то опыт, я всегда хочу записать его словами, чтобы обобщить то, что я узнал. Во-вторых, давайте пообщаемся со всеми.
Электронная почта: [email protected] QQ: 8133413 Плохой мальчик из семьи Чжан