Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Напоминание о наступлении события 
:(
    Опции темы
mr.Anderson
Дата 21.9.2005, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Задачка. Юзверь вводит в Edit1 время события, а в Edit2 само событие, что несущественно. Причем, дата заранее неизвестна, и дат может быть несколько. Дата вводится в формате
Цитата
dd-mm-yyyy hh:mm:ss

Надоть при наступлении этого события вывести либо звуковой сигнал, либо сообщение.
Сначала, по логике, надо бы свернуть программку в трей, чтоб глаза не мозолила. Это я уже сделал. А вот с напоминалкой проблема... Кстати, напоминаловку надо включать/выключать по свойству Checked флага CheckBox1... Сложная, наверное, задачка... Но мне жизненно необходимо решение. Прошу помочь!


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
maxim1000
Дата 21.9.2005, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



делаешь таймер на t-t0 (t - нужное время, t0 - текущее время)
при его срабатывании показываешь сообщение...
если время слишком большое (не помню ограничений для таймеров), делаешь таймер на максимально допустимый интервал, а по его прошествии запускаешь еще раз...


--------------------
qqq
PM WWW   Вверх
_hunter
Дата 21.9.2005, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



будем считать что дату ты распарсил.
тогда береш локальное время:
Код

VOID GetLocalTime(
    LPSYSTEMTIME lpSystemTime    // address of system time structure  
   );

потом переводиш его:
Код

BOOL SystemTimeToFileTime(
    CONST SYSTEMTIME *lpSystemTime,    // address of system time to convert 
    LPFILETIME lpFileTime    // address of buffer for converted file time 
   );

и приводиш его к LARGE_INTEGER ( заполнив LowPart dwLowDateTime и HighPart dwHighDateTime )
это будет time1

потом заполняеш структуру:
Код

typedef struct _SYSTEMTIME {  // st  
    WORD wYear; 
    WORD wMonth; 
    WORD wDayOfWeek; 
    WORD wDay; 
    WORD wHour; 
    WORD wMinute; 
    WORD wSecond; 
    WORD wMilliseconds; 
} SYSTEMTIME; 

и переводиш ее сначала в FILETIME потом в LARGE_INTEGER. это будет time2

(time2.QuadPart - time1.QuadPart) / 10000.0 -- время в миллисекундах, на которое нужно установить таймер ( можно виндовый SetTimer() можно делфийский TTimer() ( лучше второй, потому как у него есть Enabled ) )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
maxim1000
Дата 21.9.2005, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



если checkbox сняли - отменяешь таймер
если установили - устанавливаешь smile


--------------------
qqq
PM WWW   Вверх
rsm
Дата 21.9.2005, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: нет
Всего: 62



Цитата(sim7 @ 21.9.2005, 20:23)
Сложная, наверное, задачка...

Проверку времени (типа там if(MyTime == Now()) наверняка в таймере делать будешь. Вот и пиши:
Код

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    if(CheckBox1->Checked)
    {
        // тута твой код, что ты там хочешь сделать...
        ShowMessage("Message!");
    }
}


Это сообщение отредактировал(а) rsm - 21.9.2005, 18:49
PM MAIL   Вверх
mr.Anderson
Дата 21.9.2005, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



_hunter, это для какого ж профессионала вы код дали? Я ж начинающий, а вы мне WinAPI даете. smile smile
rsm, можно еще разок объяснить, как установить таймер на введенное время с учетом введенного формата + как я уж говорил, может быть несколько дат. И на каждую надо напоминалку. А сколько дат будет - неизвестно.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Guest
Дата 22.9.2005, 06:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А я бы вместо таймера для этого дела отдельную нить организовал.
  Вверх
rsm
Дата 22.9.2005, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: нет
Всего: 62



Цитата(sim7 @ 21.9.2005, 21:40)
можно еще разок объяснить, как установить таймер на введенное время с учетом введенного формата

Можно. Методика такова:
1. Подсчитывается количество миллисекунд в заданном времени;
2. Подсчитывается количестко миллисекунд в текущем времени;
3. Разница между этими величинами устанавливается в качестве интервала для таймера.

Я предлагаю значительно более простой вариант, см. в аттаче исходники.

Это сообщение отредактировал(а) rsm - 22.9.2005, 10:55

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  simple_timer.zip 3,77 Kb
PM MAIL   Вверх
mr.Anderson
Дата 23.9.2005, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



rsm, в вашем коде более-менее разобрался, но у вас в ЛистБоксе заранее известно, что будет только дата. А как быть, если там еще и посторонний текст? Например, у меня вот такая строчка:
Цитата
12.02.2004 17:34:22 ::: Такое-то событие



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
_hunter
Дата 23.9.2005, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



копируй первые 18 символов...
или все, до ":::" - 1 символ
все, в общем-то, зависит от тебя: какой формат ввода разрешиш -- тот и парсь...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
rsm
Дата 23.9.2005, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: нет
Всего: 62



Цитата(sim7 @ 23.9.2005, 20:59)
А как быть, если там еще и посторонний текст?

Главная проблема в том, что стандартных функций для форматированного перевода строки в дату просто нет. Нужно писать такую функцию самому. Причем не забывать, что формат даты зависит от текущей локали, например в Европе принят формат MM/DD/YYYY, а у нас - DD/MM/YYYY.
PM MAIL   Вверх
mr.Anderson
Дата 23.9.2005, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Цитата
копируй

То, что надо скопировать, я понял и так. Но как скопировать AnsiString-строку? Функция C++ copy работает только со string-строками.

Это сообщение отредактировал(а) sim7 - 23.9.2005, 19:44


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
szz
Дата 24.9.2005, 04:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 1
Всего: 33



Цитата
Но как скопировать AnsiString-строку

Вот так к примеру:
Код

  AnsiString from="12.02.2004 17:34:22 ::: Такое-то событие";
  int delimiter = from.AnsiPos(AnsiString(" :::"));
  AnsiString date = from.SubString(1, delimiter-1);
  AnsiString message = from.SubString(delimiter+5, from.Length());

теперь у тебя date и message содержат то что надо.


--------------------
PM   Вверх
mr.Anderson
Дата 24.9.2005, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Код
AnsiString date=ListBox1->Items->Strings.SubString(1,19);

Вот тут ошибка. Понятно, почему: у Strings надо указать позицию. А какая тут нафиг позиция? Цель: обработать все Item у ЛистБокса на предмет наличия наступившей даты, если я правильно понял код rsm'а... Что подскажете?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Mysterio
Дата 25.9.2005, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Планирующий
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.12.2004

Репутация: нет
Всего: нет



А кто тебе мешает перейти в Char? Или я плохо понял задачу?
Например так:
Код


 char date[9],nowd[9];
 StrPCopy(nowd,DateToStr(Now()));
 for(int i=0;i<max;i++)//max-максимальное кол-во stringсов у тебя в проге
 {
  StrPCopy(date,ListBox1->Items->Strings[i]);date[8]='\0';
  if(strcmp(date,nowd)==0)
   ShowMessage("Сегодня вы умрёте");

 }

PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1416 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.