Zahlenfelder für Uhrzeit Eingabe



  • Hallo,

    ich würde gerne eine Dialoganwendung schreiben, mit der man die Möglichkeit hat eine Uhrzeit einzustelln. Ich habe mir das so vorgestellt. Ich benötige zwei Felder, in dem einen sind die Stunden einzutragen, in dem anderen die Minuten. Das wäre ja jetzt recht einfach, wenn ich über ein Edit-Text Fenster gehen würde und den Benutzer einfach die gewünschte Zahl eingeben lasse. Die Anwendung sollte aber so funktionieren, dass sie nur per Pfeiltaste bzw. externer Controller bedienbar sein sollte. das heisst, es sollte bei der Pfeiltaste nach oben, das jeweilige Feld die nächstgrössere Zahl anzeigen.

    Welche Felder wären hierfür am besten geeignet, gibt es solche Zahlenfelder schon vordefiniert?



  • Servus,

    wenn du das ganze noch konfortabler haben willst, dann benutze ein DateTimePicker Ctrl. Erklärung dazu in der MSDN unter: "CDateTimeCtrl"

    *winke*
    Hellsgore

    EDIT:
    Solltest du das Ctrl auf deinem Dialog gesetzt haben, kannst du unter den Properties und dann unter Format die Zeit einstellen. Dann hast du so ein Ctrl wie du es haben möchtest.

    Mit GetTime bekommst du ein SYSTEMTIME zurückgeliefert, welches du dann wieder mit einem CTime Objekt benutzen kannst.

    Bsp.:

    CDateTimeCtrl m_ctrDateTime;
    
    SYSTEMTIME tPickerTime;
    m_ctrDateTime.GetTime(tPickerTime);
    
    CTime tZeit = CTime(tPickerTime);
    int h = tZeit.GetHour();
    int m = tZeit.GetMinute();
    //usw.
    


  • Dank dir, habs jetzt mit "CDateTimeCtrl" gemacht. Hatte das Steuerelement bis dahin noch nie verwendet. Kannst du mir vielleicht noch nen Tipp geben, wie ich die einzelnen Pfeiltasten-Nachrichten der Tastatur simulieren kann? Hab nämlich nen Dreh-Drücksteller mit dem man die Anzeige bedienen soll.



  • funktioniert das mit dem Aufruf

    PostMessage(WM_KEYDOWN, VK_UP, 0);
    

    irgendwie tut das Dialogfeld nicht das was es soll



  • Servus,

    also wenn du so einen komischen Schalter hast *g*. Dann würde ich mir was überlegen wie man das am besten steuern kann. Nehmen wir die Ausgangspositon an. Man drückt einmal auf den Schalter und wählt somit die Stunden aus. z.B. gibst du das in einer EditBox oder so aus. Beim Drücken des Schalters ermittelst du die Zeit des Ctrl und schreibst diese in ein CTime. Wenn du jetzt an dem Regler drehst soll er folgendes machen:

    SYSTEMTIME tZeit;
    tZeit = m_ctrCtrl.GetTime();
    
    CTime tCtrl = CTime(tZeit);
    
    switch (iOption)
    {
    case 1: CTime tBack = CTime(.... tCtrl.GetHour() + 1, tCtrl.GetMinute(), ....
            break;
    case 2: Minute + 1...
    }
    
    SYSTEMTIME tTest;
    tBack.GetAsSystemTime(tTest);
    m_ctrCtrl.SetTime(tTest);
    

    iOption wird halt gesetzt wie oft man den Schalter drückt. Das ist nur ein Ansatz wie man es lösen könnte.

    Jedesmal wenn der Button gedrückt wird, soll die aktuelle Zeit genommen werden. Wie du jetzt realisierst wann er die Zeit hoch oder runter zählen soll, musst du selber mal schauen, weil ich nicht weiss wie der Schalter funktioniert.

    *winke*
    Hellsgore



  • So kompliziert ist es gar nicht. Ich brauche die Systemzeit nicht. Soll nur so etwas wie eine Einstellung für einen Wecker sein. Es wäre super einfach, wenn ich nachdem ich von meinem Controller die Nachricht bekommen habe, dass er gedreht worden ist, einfach dasselbe in meinem Programm ausführen könnte, als wenn man auf der Tastatur die Pfeiltaste (up) gedrückt hätte (habe das ganze jetzt mit "CDateTimeCtrl" realisiert). habe ja auch schon mit PostMessage(WM_KEYDOWN, VK_UP, 0); probiert, klappt aber irgendwie nicht



  • Du solltest schon etwas in der Art bauen. Klick einfach mal in das Ctrl und drücke mal PfeilHoch und PfeilRunter. Vielleicht fällt dir dann auf, dass er an verschiedenen Positionen arbeitet. Wenn der Focus auf den Stunden gesetzt ist und du drückst PfeilHoch, dann zählt er nur die Stunden hoch. Das gleiche bei Minuten und Sekunden. Von daher denke ich, dass dein Vorgehen so nicht hinhaut.

    *winke*
    Hellsgore


Anmelden zum Antworten