Unerklärbare Exception im BDS2006



  • Moin Moin

    Mein Projekt besteht aus mehreren Forms.
    Sekündlich werden in der Statusbar Datum und Uhrzeit auf jedem Form aktualisiert.
    Hier mal die Funktion des Timers:

    void __fastcall TForm_Main::Timer_1sTimer(TObject *Sender)
    {
       //Uhrzeit in der Stautsleiste
    
       StatusBar1->Panels->Items[2]->Text = DateTimeToStr(Now());
       Form_Pruefpara->StatusBar1->Panels->Items[2]->Text = StatusBar1->Panels->Items[2]->Text;
       Form_Maschpara->StatusBar1->Panels->Items[2]->Text = StatusBar1->Panels->Items[2]->Text;
       Form_Pruefung->StatusBar1->Panels->Items[2]->Text = StatusBar1->Panels->Items[2]->Text;
       Form_Service->StatusBar1->Panels->Items[2]->Text = StatusBar1->Panels->Items[2]->Text;
       Form_DruckVorschau->StatusBar1->Panels->Items[2]->Text = StatusBar1->Panels->Items[2]->Text;
       Form_Datenbank->StatusBar1->Panels->Items[2]->Text = StatusBar1->Panels->Items[2]->Text;
    }
    

    Nach dem Ausführen der letzten Anweisung tritt sporadisch eine Exception auf(Zugriffsverletzung in Adresse.....).
    Kommentiere ich die Zeile aus, geht es.

    Nun meine Frage nach dem Warum!? Und warum nicht immer?
    Besten Dank im Voraus.



  • möglicheriwese gibt es das Item[2] nicht?!



  • Die Statusbar ist in jedem Form identisch aufgebaut.
    Sie besetht aus 3 Teilen:

    StatusBar1->Panels->Items[0] (Name des Aktuellen Forms)
    StatusBar1->Panels->Items[1] (vorgesehen für Statusmeldungen)
    StatusBar1->Panels->Items[2] (Datum und Uhrzeit)

    Und wie gesagt, die Exception tritt sporadisch auf.



  • Hallo

    die möglichen Fehlerquellen sind
    - eines der aufgerufenen Forms ist ungültig (dynamisch erstellt und gelöscht)
    - in einer der aufgerufenen StatusBars gibt es nicht mehr als 2 Panels

    Jedenfalls ist der gezeigte Auschnitt syntaktisch und semantisch richtig, da läßt sich für uns sonst kein Grund ableiten. Benutz Logging-Ausgaben um den Fehler weiter einzugrenzen und den Debugger um den Fehler zu finden.

    bis bald
    akari



  • Ich glaube ich habs...

    @akari:
    dein erstellen/löschen hat mich drauf gebracht.

    Alle Forms sind statisch erzeugt.

    Der Timer ist schon zur Entwurfszeit enabled.
    Möglicherweise schafft der Rechner nicht immer das Form_Datenbank so schnell zu erstellen bis der Timer das erste Mal durchläuft.
    Daher existerit das Form (oder die Stausbar auf dem Form) zum Zeitpunkt der Anweisung noch nicht. Ist ein gemeines Zeitspiel.

    Auf jeden Fall hab ich keine Exception mehr wenn ich den Timer erst zum OnShow Ereignis des Main-Forms enable und bei OnClose wieder disable.



  • Hallo

    Ja das klingt vernünftig. Timer und Threads sollten nur dann laufen wenn sie wirklich gebraucht werden.

    bis bald
    akari


Anmelden zum Antworten