Reminder



  • Hallo allerseits,

    ich habe eine kurze Frage, könnte mir jemand ein Anstoss geben wie man in einer Dialoganwendung einen Reminder programmieren kann ? Wir haben eine Checkbox und eine Combobox, wo man ein bestimmtes Datum oder eine Zeit wählen kann. Ja, und noch was: kann man ein String in eine CTime - Variable umwandeln ? Wenn ja dann wie ? Oder sind die Fragen zu blöd ?

    Danke im Voraus
    Vitali



  • Hi,
    also zu dem Reminder. Meinst du ein Programm, welches im Hintergrund läuft und zu der gewählten Zeit bei aktivierter CheckBox eine MessageBox ausgibt ?
    Dazu musste einfach das Programm im Hintergrund laufen lassen und z.B. jede Sekunde die aktuelle Uhrzeit abfragen. Wenn dann die gewählte Zeit erreicht ist, gibste über MessageBox(...) eine Nachricht aus.

    Um eine CString-Variable in eine CTime-Variable zu konvertieren, musste den String parsen und die CTime-Varibale entsprechend damit füllen. z.B.:

    CString sZeit = "13.1.2003 22:23:16 Uhr";
    int iJahr,iMonat,iTag,iStunde,iMinute,iSekunde;
    
    sscanf(sZeit,"%d.%d.%d %d:%d:%d Uhr",iTag,iMonat,iJahr,iStunde,iMinute,iSekunde);
    
    tZeit = CTime(iJahr,iMonat,iTag,iStunde,iMinute,iSekunde);
    

    Jetzt steht in tZeit die entspr. Uhrzeit. Vorraussetzung: Der String muss immer gleich aufgebaut sein also: "T.M.Y H:M:S Uhr".
    Was nicht schaden könnte, wäre den String vorher auf Gültigkeit, sowohl im Format, als auch in den Daten zu prüfen. Wenn nämlich einer 25 Uhr eingibt, würde das zu Fehlern führen.

    Ich hoffe, ich konnte dir helfen.

    mfg TakeItEasy!



  • Hi,
    ich danke fürs Antwort. Hat mir wirklich geholfen. Was den Reminder betrift: Das Programm läuft nicht im hintergrund. Das ist ein Terminplaner. Er müsste dann aufpoppen, wenn die gewählte Erinnerungszeit gewählt ist. Hast du eine Idee dazu ?

    Danke

    Vitali



  • Ich hatte das mal so realisiert:

    //3 Felder für Stunde/Minute/Sekunde zusammenfassen
    
    zeit = m_st; //Stunde
    zeit += ":";
    zeit += m_min; //Minute
    zeit += ":";
    zeit += m_sek; //Sekunde
    
    //Die Timer Funktion
    void CDeinDlg::OnTimer(UINT nIDEvent) 
    {
        uhrzeit();  
        if (uz == zeit)
        {
            AfxMessageBox("TERMIN");
            KillTimer(1);
        }
        else
        {
        }
    
        CDialog::OnTimer(nIDEvent);
    }
    
    //Und die Funktion uhrzeit();
    
    void CDeinDlg::uhrzeit()
    {
            CTime time= CTime::GetCurrentTime();
            uz= time.Format("%H:%M:%S"); //Format CTime in CString
    }
    

    Das hat eigentlich ganz gut hingehauen...



  • Hi,
    statt den drei Editfeldern für Stunden, Minuten und Sekunden würde ich den DateTimePicker nehmen und auf Uhrzeit stellen. Ist aber Ansichtssache. Wenn du aber den DateTimePicker verwendest haste noch den Vorteil, dass du ihm eine CTime Variable zuordnen kannst und dann kannste in OnTimer mit
    if(m_tVariableDesDateTimePickers == CTime::GetCurrentTime())
    ziemlich einfach testen, ob die gewünschte Zeit erreicht ist.

    mfg TakeItEasy!


Anmelden zum Antworten