Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2015, 18:24   #1
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию Не срабатывает событие OnActivate

Вернее, оно срабатывает только один раз, когда программа толко загрузилась и первый раз я вызываю её из трея. Потом, я прячу её в трей. При повторных вызовах из трея, OnActivate не срабатывает.

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

Если не через OnActivate, через какое событие это можно сделать или как возобновить срабатывание On Activate?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 01.09.2015, 18:36   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Всё. Разобрался. Нужно использовать событие OnShow.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 01.09.2015, 19:16   #3
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
общем идея такая. Пишу напоминалку. Произошедшие события, она вводит в подсказку иконки в трее и она начинает мигать.
Если с помощью компоненту Timer установить нужное интервал
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  Label1->Visible = !Label1->Visible;
  Label1->Font->Color = 0x007F42E1;
  Label1->Caption = L"Оплатите долг пожалуйста ;))";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ // отключить
  Label1->Visible =false;
  Timer1->Enabled =false;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{   // включить
  Label1->Visible =true;
  Timer1->Enabled =true;
}
//---------------------------------------------------------------------------
xxbesoxx вне форума Ответить с цитированием
Старый 01.09.2015, 19:26   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
Если с помощью компоненту Timer установить нужное интервал
Спасибо конечно, но у меня иконка в трее мигает а не метка. Два таймера. Один управляет миганием иконки, другой служит для проверки базы на совпадение даты и времени. Проверка делается ежеминутно.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 01.09.2015, 19:34   #5
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
другой служит для проверки базы на совпадение даты и времени.
Если я правильно понял .... при работе "базы" если имеется в виду "база данных" то когда иконка будет моргать ? при переходу :ADOQuery1AfterScroll(TDataSet *DataSet) и такой вариант не прокатить .... Если я неправильно понял вас ... извиняюсь )
xxbesoxx вне форума Ответить с цитированием
Старый 01.09.2015, 19:46   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
Если я правильно понял .... при работе "базы" если имеется в виду "база данных" то когда иконка будет моргать ? при переходу :ADOQuery1AfterScroll(TDataSet *DataSet) и такой вариант не прокатить .... Если я неправильно понял вас ... извиняюсь )
Нет не база данных. Это я её так называю. Это простой XML в который записывается инфа. Вот, заготовка того, что я уже сделал за два дня.
Запускаем прогу. Ждём минуту. Иконка начинает мигать и при наведени на неё мыши, выскакивает всплывающая подсказка в которой будут выводится названия тех тем, которые активны. При нажатии на иконку, мигание прекращается и не возобновляется до тех пор, пока окошко не будет закрыто.
Вложения
Тип файла: rar Reminder.rar (280.9 Кб, 28 просмотров)
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 01.09.2015 в 19:50.
Smitt&Wesson вне форума Ответить с цитированием
Старый 02.09.2015, 08:36   #7
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Smitt&Wesson хотел подсобить с событием, потом смотрю сам разобрался (OnShow).
А исходничек, если не жалко, можно в ЛС.
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 02.09.2015 в 09:00.
Krok27 вне форума Ответить с цитированием
Старый 02.09.2015, 12:05   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Smitt&Wesson хотел подсобить с событием, потом смотрю сам разобрался (OnShow).
А исходничек, если не жалко, можно в ЛС.
Так она жутко недоработана. Но если есть желание посмотреть как сделано, я и сюда могу выложить, не жалко.

В конце public: афйла .h прописываем

Код:
  BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER(MyTrayIcon,TMessage,MTIcon);
  END_MESSAGE_MAP(TComponent);
В этом-же файле, сразу перед классом формы, определяем глобальную переменную
const MyTrayIcon = WM_USER + 1;

В private: прописываем шаблон функции
void __fastcall MTIcon(TMessage&);

В файле .cpp прописываем глобальную переменную
TNotifyIconData NID;

Код:
//****************************  Иконка в трее  ******************************
void __fastcall TFormHome::MTIcon(TMessage&a)
{
 POINT P;
 switch( a.LParam)
 {
  case 514://WM_LBUTTONDBLCLK:
  {
   Show();
   SetForegroundWindow(Handle);
   break;
  }
  case 516://WM_RBUTTONDOWN:
  {
   GetCursorPos(&P);
   PopupMenu1->Popup(P.x,P.y);
  }
 }
}
//---------------------------------------------------------------------------
BOOL WeAreAlone(LPSTR szName)
{
HANDLE hMutex=CreateMutex(NULL,TRUE,szName);
if (GetLastError()==ERROR_ALREADY_EXISTS)
  {
  CloseHandle(hMutex);
  return false;
  }
return true;
}
//...........................................................................
void __fastcall TFormHome::FormCreate(TObject *Sender)
{
 // Активируем иконку в трее 
 Application->ShowMainForm = false;
 NID.cbSize = sizeof(TNotifyIconData);
 NID.hWnd = Handle;
 NID.uID = 1;
 NID.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
 NID.uCallbackMessage = MyTrayIcon;
 NID.hIcon = Application->Icon->Handle;
 strcpy(NID.szTip, "");//"Мое приложение");
 Shell_NotifyIcon(NIM_ADD, &NID);
}
//--------------------------------------------------------------------
// Уничтожение формы
void __fastcall TFormHome::FormDestroy(TObject *Sender)
{
  Shell_NotifyIcon(NIM_DELETE, &NID);
}
//--------------------------------------------------------------------
// Таймер мигания кнопки
void __fastcall TFormHome::Timer2Timer(TObject *Sender)
{
  if(Timer2->Tag == 0)
  {
    TImage *img  = new TImage(Application);// Пустое поле
    NID.hIcon = img->Picture->Icon->Handle;
    Timer2->Tag = 1;
    delete img;
  }
  else
  {
    NID.hIcon = Application->Icon->Handle;// Иконка приложения
    Timer2->Tag = 0;
  }
  Shell_NotifyIcon(NIM_MODIFY, &NID);
}
//-------------------------------------------------------------------
// Закрыть
void __fastcall TFormHome::PopUpShutdown1Click(TObject *Sender) {Close();}
// Свернуть
void __fastcall TFormHome::PopUpMenuHideClick(TObject *Sender){Visible = false;}
// Развернуть
void __fastcall TFormHome::PopUpProperties1Click(TObject *Sender)
{Show();}
//------------------------------------------------------------------
//************************  Работа с базой данных ***************************
// Выдача сообщения в трей
void __fastcall TFormHome::Timer1Timer(TObject *Sender)
{
// Здесь проверка БД и вывод результатов в трей и в блок сообщений
strcpy(NID.szTip,"День рождения у Васи\nДень рождения у Пети");// Вывадим сообщение в трей
Shell_NotifyIcon(NIM_MODIFY, &NID);
Timer2->Enabled = true;
}
//---------------------------------------------------------------------------
// Обнуляем подсказку в трее и выключаем таймеры
void __fastcall TFormHome::FormShow(TObject *Sender)
{
NID.hIcon = Application->Icon->Handle;
strcpy(NID.szTip, "");// Уничтожаем подсказку
Shell_NotifyIcon(NIM_MODIFY, &NID);
Timer1->Enabled = false;
Timer2->Enabled = false;
}
//---------------------------------------------------------------------------
// Разрешаем проверку базы даных
void __fastcall TFormHome::FormHide(TObject *Sender)
{
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
Вот и всё. Ничего сложного.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 02.09.2015 в 12:17.
Smitt&Wesson вне форума Ответить с цитированием
Старый 03.09.2015, 08:01   #9
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Так она жутко недоработана. Но если есть желание посмотреть как сделано, я и сюда могу выложить, не жалко.
Ну никто ж не требует от тебя код отвечающий требованиям контрольного задания на соискание должности ведущего разработчика какой нибудь неизвестной фирмы Microsoft. Форум на то и форум что бы делиться. Спасибки.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Com порт - не могу получить данные. Не срабатывает событие DataReceived nastya_nlo C# (си шарп) 15 26.01.2015 21:36
Не всегда срабатывает событие (Event) Antony41 БД в Delphi 4 24.11.2014 16:57
Не срабатывает событие OnMouseWheel Хамяг Общие вопросы Delphi 2 24.05.2011 16:27
Не срабатывает OnActivate у формы SolovejK Общие вопросы Delphi 6 28.03.2010 15:26
Проблема с OnActivate Dennis777 Помощь студентам 6 04.01.2010 19:30