Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет мой.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
4.46 Mб
Скачать

Задача 50. Будильник

После того как пользователь задаст сообщение, время и сделает щелчок на кнопке ОК, окно программы исчезает с экрана (сворачивается). В установленное время окно Будильник появляется на экране (Рис. 60)

Рис 60

Вывод: При выполнении данного задания мы научились создавать программу, которая в последующем отображается в области панели задач.

Листинг

class TForml : public TForm { __published: TTimer *Timerl; TEdit *Editl; TButton *Buttonl; // индикатор текущего времени TGroupBox *GroupBox2; TLabel *Labell; // часы TLabel *Label2; //двоеточие TLabel *Label3; // минуты Игры и другие полезные программы 249 // индикатор времени сигнала TGroupBox *GroupBoxl; TLabel *Label4; // часы TLabel *Label5; //двоеточие TLabel *Label6; // минуты // кнопки установки времени будильника TUpDown *UpDownl; // часы TUpDown *UpDown2; // минуты TPopupMenu *PopupMenul,- // контекстноеменю TMenuItem *N1; // команда Восстановить TMenuItem *N2; // команда Закрыть void fastcall ButtonlClick(TObject *Sender); void fastcall TimerlTimer(TObject *Sender); void fastcall UpDownlClick(TObject *Sender, TUDBtnType Button); void fastcall UpDown2Click(TObject *Sender, TUDBtnType Button); void fastcall NIClick(TObject *Sender); void fastcall N2Click(TObject *Sender); // *** определениеэтих функций вставлено сюда вручную *** // создать и поместить значок на System Tray void fastcall CreateTrayIcon(int n, AnsiString Tip); // удалить значок из System Tray void fastcall DeleteTrayIcon(int n); protected: // процедура обработки сообщения WM_MYTRAYNOTIFY, // которое генерирует значок, находящийся на System Tray void fastcall MYTRAYNOTIFY(TMessage &Message); 250 Часть 1.Примерыи задачи BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_MYTRAYNOTIFY, TMessage, MYTRAYNOTIFY) END_MESSAGE_MAP(TControl) private: public: fastcall TForml(TComponent* Owner); // *** модуль формы AlarmForm.cpp *** •include "DateUtils.hpp" #include "ShellAPI.hpp" // для доступа к Shell__NottifyIcon #include "mmsystern.hpp" // для доступа к PlaySound int cHour, cMinute; // время наиндикаторе int alrHour, alrMinute; // времясигнала // преобразует целое в строку с ведушуал нулем AnsiString fastcall mm(int m) { if (m <= 9) return "0" + IntToStr(m); else return IntToStr(m); / констуктор формы fastcall TForml::TForml(TComponent* Owner) : TForm(Owner) // отобразить текущее время Игры и другие полезные программы 251 cHour = HourOff Now() ); Labell->Caption = IntToStr(cHour) , • cMinute = MinuteOf( Now() ); Label3->Caption = mm(cMinute); / / добавить значок на System Tray void fastcall TForml::CreateTrayIcon(int n, AnsiString Tip) { TNotifylconData nidata; /* заполнить структуру nidat, полякоторой определяют значок на System Tray */ nidata.cbSize = sizeof(TNotifylconData); nidata.hWnd = Forml->Handle; // окно приложения, которое // представляет значок nidata.uID = n; // номер значка (одноприложение может // разместить на панели // несколько значков nidata.uFlags = NIF_ICON + NIF_MESSAGE + NIF_TIP; /* при позиционировании указателя мыши на на значке, генерируется определенное программистом событие WM_MYTRAYNOTIFY ( см. AlarmMainForm.h) */ nidata.uCallbackMessage = WM_MYTRAYNOTIFY; // значок nidata.hlcon = Application->Icon->Handle; // посказка (всплывающий текст) StrPCopy(nidata.szTip,Tip); Shell_NotifyIcon(NIM_ADD, &nidata); // добавитьзначок 9 3ак. 1241 252 Часть 1.Примерыи задачи // удалить картинку с SystemTray void fastcall TForml::DeleteTraylcon(int n) TNotifylconData nidata; nidata.cbSize = sizeof(TNotifylconData); nidata.hWnd = Forml->Handle; nidata.ulD = n,- // номер значка, который надо убрать // (одноприложение может разместить на // панели несколько значков) Shell_NotifyIcon(NIM_DELETE, &nidata); // щелчок на кнопке ОК void fastcall TForml::ButtonlClick(TObject *Sender) { AnsiString st; alrHour = UpDownl->Position; alrMinute = UpDown2->Position; if ( ( alrHour == cHour ) && (alrMinute <= cMinute) ( alrHour < cHour ) ) { AnsiString st; int r; st.printf( "Сейчас %i:%1\пБудильник установлен на %i:%i", cHour,cMinute,alrHour,alrMinute r = MessageDlg(st, mtWarning, TMsgDlgButtons() « mbOK «mbCancel, 0) ; if (r == mrCancel) return; Игры и другие полезные программы 253 st = "Будильник. " + IntToStr(alrHour) + ":" + mm(alrMinute); CreateTraylcon(1,st); Forml->Hide(); // сигналоттаймера void fastcall TForml::TimerlTimer(TObject *Sender) if ( Forml->Visible ) // окнопрограммынаэкране if ( HourOf( Now() ) != cHour) { cHour = HourOf( Now() ); Labell->Caption = IntToStr(cHour); if ( MinuteOf( Now() ) != cMinute) { cMinute = MinuteOf( Now() ); Label3->Caption = mm(cMinute); // показать/скрытьдвоеточие Label2->Visible = ! Label2->Visible; else TDateTime t = Now(); if ( (alrHour == HourOf(t) ) && (alrMinute == MinuteOf(t)) ) PlaySoundCnotify.wav", 0, SND_ASYNC) ; DeleteTraylcon(1); // убратьзначокс System Tray Forml->Show(); } } } 254 Часть 1. Примерыизадачи // щелчокнакнопкекомпонента UpDownl (часы) void fastcall TForml::UpDownlClick(TObject *Sender, TUDBtnType Button) { Label4->Caption = IntToStr(UpDownl->Position); // щелчокнакнопкекомпонента UpDown2 (минуты) void fastcall TForml::UpDown2Click(TObject *Sender, TUDBtnType Button) { Label6->Caption = mm(UpDown2->Position); // обработкаопределенногопользователемсообщения // WM_MYTRAYNOTIFY void fastcall TForml:rMYTRAYNOTIFY(TMessage ^Message) { TPoint p; i f ( Message.LParam == m_RBUTTONDCWN ) { GetCursorPos(&p); SetForegroundWindow(Application->MainForm->Handle); Forml->PopupMenul->Popup(p.x,p.y); // командаВосстановить void fastcall TForml::NlClick(TObject *Sender) { Timerl->Enabled = false; Forml->Show(); DeleteTraylcon(1); // убратьзначокс System Tray Игрыидругиеполезныепрограммы 255 // командаконтекстногоменюЗакрыть // (завершениеработыпрограммы) void fastcall TForml::N2Click(TObject *Sender) { Forml->DeleteTrayIcon(l); // убратьзначокс System Tray Forml->Close();