Event nach Zeit



  • hast du da mal ne kleines codebeispiel wie du das realisierst?



  • Hinter dem Link, den ich gleich als erstet gepostet habe, versteckt sich ein Beispielprojekt mit einer Uhr.
    Das ist doch genau was du brauchst. 😕

    Frag bitte genauer, ich erkläre gern - aber gegen Code-Vorkauen habe ich eine Abneigung. 😉



  • kann ich verstehen!

    ich les mir das mal genau durch.. meld mich dann später.. 😉



  • jo..

    also der befehl:
    SetTimer(ID_CLOCK_TIMER,1000,NULL)

    Das erste argument ist die ID (die id ist doch einefach ein UINT oder?), das zweite die Zeit und das dritte dür die call back funktion!

    aber wo wid denn nun die uhrzeit aktualliert? also die funktion aufgerufen?

    bei dem zweiten codeauschnitt kann er die ersten 13 zeilen nicht darstellen, ich befürchte das steht da drin... 😞



  • helmut a. schrieb:

    jo..

    also der befehl:
    SetTimer(ID_CLOCK_TIMER,1000,NULL)

    Das erste argument ist die ID (die id ist doch einefach ein UINT oder?), das zweite die Zeit und das dritte dür die call back funktion!

    👍

    aber wo wid denn nun die uhrzeit aktualliert? also die funktion aufgerufen?

    bei dem zweiten codeauschnitt kann er die ersten 13 zeilen nicht darstellen, ich befürchte das steht da drin... 😞

    Ups, das ist ja gemein. 😮
    Du musst einen Handler für WM_TIMER erstellen.
    Der bekommt die Timer-ID als Parameter, wenn du also mehrere Timer laufen hast, kannst du gucken, welcher Timer das gerade ausgelöst hat.

    In der Funktion kannst du dann die Zeit aktualisieren.

    PS: Da hat wohl jemand im HTML gepfuscht.
    Die "Url" des Bildes ist der fehlende Text. 😮
    Kopier mal in Notepad und ersetze alle %20 durch Leerzeichen, dann isses halbwegs lesbar. 😉



  • hab das mal versucht "lesbar" zu machen..

    Unter einer Callback-Funktion versteht man eine vom Programmierer erstellte Funktion,
    die das Betriebssystem Windows direkt aufruft. Callback-Funktionen weisen spezielle Definitionen
    FCr die Argumente auf, je nachdem, welches Subsystem die Funktion aufruft und aus welchen Gr FCnden.
    Im Anschlu DF an die Funktionsdefinition haben Sie aber wieder freie Hand, wie Sie die Funktion gestalten
    m F6chten oder m FCssen. EDie Funktionsweise einer Callback-Funktion beruht darauf, da DF man die Adresse
    der Funktion als Argument an eine Windows-Funktion, die Callback- Funktionen als Argumente akzeptiert,FCbergibt.
    Nachdem Sie die Funktionsadresse an Windows FCbergeben haben, wird die Funktion jedesmal direkt aufgerufen,
    wenn Windows aufgrund der entsprechenden Bedingungen die Callback-Funktion aufrufen mu DF.
    EDas Timer-Ereignis der Uhr behandeln Nachdem Sie nun einen Timer gestartet haben,
    m FCssen Sie noch den Code aufnehmen, der die Timer-Nachrichten behandelt.
    Dazu f FChren Sie folgende Schritte aus: Nehmen Sie mit Hilfe des Klassen-Assistenten eine
    Variable f FCr das Steuerelement

    EIDC_STATICTIME

    CString

    Em_sTime

    Fügen Sie mit dem Klassen-Assistenten eine Funktion Für die Nachricht

    EWM_TIMER

    Für das Objekt

    ECTimerDlg

    hinzu.

    DCbernehmen Sie den Code aus Listing 4.2 in die Funktion

    EOnTimer

    EListing 4.2: Die Funktion OnTimer

    void CTimerDlg::OnTimer(UINT nIDEvent) // TODO: Code f FCr die Behandlungsroutine f FCr Nachrichten hier einf FCgen C2und/oder Standard aufrufen
    ///////////////////////
    // EIGENER CODE, ANFANG
    ///////////////////////
    // Aktuelle Zeit holen CBR E10:

    CTime curTime = CTime::GetCurrentTime(); CBR E11: CBR E12: // Aktuelle Zeit anzeigen CBR
    E1 : m_sTime.Format(

    Du musst einen Handler für WM_TIMER erstellen.

    das hab ich nicht so ganz verstanden..
    muss ich das überpüfen ob er denn ausgelöst hat, indem ich gucke ob ich die id übergeben bekomm?



  • alsi wie wertet man die nachricht WM_TIMER aus?



  • helmut a. schrieb:

    alsi wie wertet man die nachricht WM_TIMER aus?

    Hast du so ein OnTimer wie du oben gepostet hast?
    Was willst du denn alle Sekunde machen?

    Schreib in die Funktion (zu Demozwecken) doch mal:

    AfxMessageBox("Tick!");
    


  • ja mein problem ist das ich das man das ja irgendwie mit hilfe der Nachrichtenzuordnungstabellen des klassenassistenten die funktion WM_TIMER erstellt.

    ich arbeite aber mit visual studio 2005! und da weiß ich nicht so ganz wie ich die nachricht erstelle?!

    startet der die funktion ontimer eigentlich automatisch?

    nun sitz ich den ganzen tag davor nun peil ich auch gar nichts mehr..



  • also in der header hab ich nun:

    public:
    	unsigned int ID_TIMER;
    	void OnTimer(UINT nIDEvent);
    

    in der .cpp

    #define MYTIMER 10000
    bla...
    
    void CEmpfaengerDlg::OnBnClickedButton4()
    {	
    	machwas.InsertString(0,"set");
    	SetTimer(MYTIMER,1000,NULL); // 1000 ms
    
    }
    
    void CEmpfaengerDlg::OnTimer(UINT nIDEvent)
    {
    
    	machwas.InsertString(0,"juhu");
    
    }
    

    das müßte doch schon funktionieren oder?



  • Ich würd sagen ja
    Allerdings in der Funktion lieber den ID abfragen also:

    void CEmpfaengerDlg::OnTimer(UINT nIDEvent) 
    { 
        if(nIDEvent ==  MYTIMER)
        {
             machwas.InsertString(0,"juhu"); 
        }
    
    }
    


  • Das sieht soweit gut aus, nur leider hast du die MessageMap nicht gepostet und daher weiß ich nicht, ob der Eintrag dort vorhanden ist.

    Falls der Eintrag dort fehlt, wird die OnTimer nicht aufgerufen. Ist er dort, passiert das automatisch.
    Wenn der fehlt gebe ich dir Morgen früh die fehlende Zeile. 🙂



  • estartu schrieb:

    Das sieht soweit gut aus, nur leider hast du die MessageMap nicht gepostet und daher weiß ich nicht, ob der Eintrag dort vorhanden ist.

    Falls der Eintrag dort fehlt, wird die OnTimer nicht aufgerufen. Ist er dort, passiert das automatisch.
    Wenn der fehlt gebe ich dir Morgen früh die fehlende Zeile. 🙂

    jahhhh genau das brauch ich!!!
    das ist das wo ich hacke..
    zum aus de rhaut fahren.. morgen fürh sagt er...... argh 🙂

    na gut.. dann geh ich nun nach hause! 🙂

    danke schonmal für die gedult heute!
    ich freu mich auf morgen 😉



  • sooooo.. konnte es dann noch nicht lassen....
    habs! das war das stichwort was ich gebraucht hab!

    also das

    ON_WM_TIMER() hat gefehlt!

    hättest mir das nciht heut morgen sagen können? 😉
    und dafür den fast ganzen tag geopfert....
    was soll nur mal aus mir werden 😉

    vielen danke estartu! 👍



  • helmut a. schrieb:

    was soll nur mal aus mir werden 😉

    Ein ausdauernder Fehlersucher. 🙂



  • je laenger man nach einen fehler sucht desto gluecklicher ist man ihn gefunden zu haben

    stimmt - aber ein scheiss spruch #gg



  • Jepp. 👍
    Und wenn das nächste Mal ne Nachricht nicht ankommt, hat er mindestens ne Idee, wodran es liegen kann.



  • jaahh.. und wie glücklich ich war 😉

    Über die Nachrichten hatte ich mir vorher nie gedanken gemacht, das gin under VC6 ja auch ganz von allein..

    das bei WM_TIMER dann Ontime aufgerufen wird.. ist das irgendwo fest definiert?



  • helmut a. schrieb:

    das bei WM_TIMER dann Ontime aufgerufen wird.. ist das irgendwo fest definiert?

    Ja, in ON_WM_TIMER()

    #define ON_WM_TIMER() \
    	{ WM_TIMER, 0, 0, 0, AfxSig_vw, \
    		(AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(UINT))&OnTimer },
    

    Klick mal mit der rechten Maustaste drauf. Da müsste es dann "Gehe zu Definition" geben.

    Und dass es im VC2005 keine Hilfestellung mehr beim Anlegen von Nachrichtenfunktionen gibt, kann ich nicht glauben. 😮



  • wenn das jemand gefunden hat kann er das ja posten..

    und nun :xmas1:


Anmelden zum Antworten