CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - aktywacja okna o konkretnym czasie

aktywacja okna o konkretnym czasie

dział ogólny

aktywacja okna o konkretnym czasie

Nowy postprzez admszczep » piątek, 29 czerwca 2012, 22:27

Witam
szukam porady jak zrobić wyskakujące okno o określonej godzinie. Zdarzenie pobierane z bazy gdzie mam listę przypomnień do wykonania i chcę aby wyskoczyły one o określonym w bazie czasie ma ktoś pomysł jak to zrobić.
Avatar użytkownika
admszczep
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 3 listopada 2009, 23:25
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP PRO SP3
Kompilator: Embarcadero RAD Studio XE
C++Builder XE
Gadu Gadu: 0
    Windows XPFirefox

Re: aktywacja okna o konkretnym czasie

Nowy postprzez Cyfrowy Baron » sobota, 30 czerwca 2012, 08:39

Umieść na formularzu obiekt Timer1 typu TTimer, w którym będzie sprawdzany czas. Ustaw jego właściwość Enabled na false, i Interval = 1000, gdzie 1000 to jedna sekunda. Utworz zdarzenie OnTimer dla tego obiektu. Umieść przycisk Button1 w którego zdarzeniu OnClick zegar będzie uruchamiany, no i pozostał prosty kod:

KOD cpp:     UKRYJ  
/* Funkcja TimeTest nie jest przypisana do klasy, więc musi znajdować się
nad funkcjami i zdarzeniami w których jest wywoływana */

BOOL __fastcall TimeTest(USHORT thour, USHORT tmin)
{
 USHORT chour, cmin, csec, cmsec;

 Now().DecodeTime(&chour, &cmin, &csec, &cmsec); // pobiera aktualny czas

 /* porównanie czasu aktualnego z zadanym z dokładnością do minuty */
 if(thour == chour)
 {
  if(csec <= 1 && tmin == cmin) return true;
 }

 return false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Timer1->Enabled = true; // włącza zegar Timer
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 if( TimeTest(8, 15) == true )
 {
  Timer1->Enabled = false; /* Ztrzymanie zegara - koniecznie przed wywołaniem komunikatu lub okna modalnego */
  ShowMessage("Godzina: 8:15");
   Timer1->Enabled = true; /*- można wznowić pracę zegara jeżeli zachodzi taka potrzeba */
 }
}


Mała uwaga odnoście tego fragmentu kodu:

KOD cpp:     UKRYJ  
if(csec <= 1 && tmin == cmin)


Ten kod znaczy tyle co: jeżeli aktualna sekunda czasy jest mniejsza lub równa 1 i aktualna minuta jest równa z minutą zadaną. To oznacza, że funkcja zwraca wartość true tylko gdy mierzona sekunda jest równa 0 lub 1. Występuje tutaj ryzyko, że test przeskoczy, jeżeli system będzie czymś zajęty i test nie będzie mógł być przeprowadzony przy aktualnej sekundzie równej 0 lub 1. Można zrezygnować z mierzenia sekundy, ale wtedy trzeba koniecznie zatrzymać zegar co najmniej na minutę, w przeciwnym razie co interwał zegara będzie wyskakiwał komunikat lub okno.
Jeżeli pomiarów ma być więcej można oczywiście zrezygnować z zatrzymywania zegara, ale trzeba dodać zmienne, które będą blokowały zbędne pomiary, czyli coś w tym stylu:

KOD cpp:     UKRYJ  
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 static bool stop1 = true, stop2 = true;

 if( TimeTest(8, 33) == true && stop1 == true)
 {
  stop1 = false;
  ShowMessage("Godzina: 8:33");
 }

 if( TimeTest(8, 34) == true && stop2 == true)
 {
  stop2 = false;
  ShowMessage("Godzina: 8:34");
 }
}


To jak pobierzesz czas z bazy zależy już oczywiście od tego jaką masz bazę. Zasada się nie zmienia wystarczy funkcji TimeTest przekazać dwie wartości, pierwszy argument to zadana godzina, a drugi to zadana minuta. Tutaj przekazałem te wartości jawnie, ale równie dobrze może się to odbywać przez zmienne.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości