Zeigerumbiegung funktioniert in dem einen Fenster in dem anderen nicht.



  • In meinem Programm gibt es zwei Formulare.
    Zum einen das HauptFenster :

    Es wird ganz gewöhnlich in der WinMain erstellt und hat in der
    Ereignissbehandlung FormCreate eine Zeile in der der Zeiger auf
    die WindowProc umgebogen wird. Funktioniert einwandfrei.

    void __fastcall THauptFenster::FormCreate(TObject *Sender)
    {
    HauptFenster->WindowProc =  myWindowProc;
    }
    

    und das Fenster Akzentmonitor :
    es wird in einer Rutine instanziert die vom Konstructor des Hauptfensters
    aufgerufen wird.

    AkzentMonitor = new TAkzentMonitor (HauptFenster);
    

    und auch dieses Fenster enthält eine Umbiegung. Die löst eine EAccessViolation aus.

    void __fastcall TAkzentMonitor::FormCreate(TObject *Sender)
    {
         AkzentMonitor->WindowProc = myWindowProc;        
    }
    

    und zum Testen noch eine in einem ButtonClick.Die Funkioniert wieder einwandfrei.

    void __fastcall TAkzentMonitor::Button1Click(TObject *Sender)
    {
    
         AkzentMonitor->WindowProc = myWindowProc;
    }
    

    Mich wundert das es in dem einen Fenster funktioniert und in dem anderen nicht.
    Bin ich ein Opfer des Zufalls ?

    MfG Schlumpi



  • Hallo

    benutze mal anstelle des OnCreate den Konstruktor des jeweiligten Forms (wie es auch allgemein empfohlen wird)

    bis bald
    akari





  • akari schrieb:

    Hallo
    benutze mal anstelle des OnCreate den Konstruktor des jeweiligten Forms (wie es auch allgemein empfohlen wird)

    Ich habs mal probiert.
    Das HauptFenster funktioniert immernoch.

    Das AkzentmonitorFenster gibt eine Exception und das Programm wird beendet.

    Ich hab die Zeile danach mal in die FormActivateBehandlung getan und es Funktioniert.
    Es löst zwar das Problem, dennoch bleibt die Verwunderung.

    MfG Schlumpi


Anmelden zum Antworten