Unterform schliessen



  • Hallo zusammen,

    ich habe ein Problem und zwar öffne ich von einem Hauptform aus mit

    Application->CreateForm(__classid(TOpenGL3DGUI), &OpenGL3DGUI);
    OpenGL3DGUI->Show();
    

    ein "Unterfenster" in dem eine OpenGL-Darstellung ist. Wenn ich dieses Fenster nun mit

    void __fastcall TOpenGL3DGUI::FormClose(TObject *Sender, TCloseAction &Action)
    {
    	 if (OpenGL3DGUI != NULL) {
    		 delete OpenGL3DGUI;
             OpenGL3DGUI = NULL;
    	 }
    }
    

    schliesse, und in der folgenden Funktion einen Haltepunkt setze

    void __fastcall TOpenGL3DGUI::IdleLoop(TObject*, bool& done)
    {
        done = false;
        RenderGLScene();
        SwapBuffers(hdc);
    }
    

    so sehe ich, dass diese weiterhin durchlaufen wird. Was muss ich tun, damit das Fenster komplett zerstört wird (also der Zustand VOR öffnen des Fensters wiederhergestellt wird)?

    Danke und Gruss
    Lodi



  • versuch mal

    OpenGL3DGUI->Release();
    

    vor dem delete



  • Am besten ist es, du erzeugst deine neue Form gar nicht erst über CreateForm, sondern einfach mittels new.

    OpenGL3DGUI = new TOpenGL3DGUI(0);
    

    In diesem Fall (0 als Parameter) mußt du natürlich selbst für das Löschen sorgen, was du ja wohl auch willst.



  • Hi,

    wo kann ich denn folgende Eigenschaft setzen:

    [C++] __property TCloseEvent OnClose = {read=FOnClose, write=FOnClose};

    sie steht für untergeordnete SDI-Formulare auf caHide (siehe Hilfe), ich würde sie aber gerne auf caFree setzen????

    Danke und Gruss



  • Hallo

    OnClose ist ein Event. Du must also mit dem Objektinspektor für das Form eine Eventmethode für diesen Event erzeugen. Dann kannst du dem entsprechenden Parameter der Methode auch den Wert caFree übergeben. Das alles kannst du auch in der Builder-Hilfe nachlesen.

    /Edit : und sfds

    bis bald
    akari


Anmelden zum Antworten