Problem mit MDIs



  • Hi,
    Ich bekomme beim Folgenden Programm eine Exception, weiss aber nicht, woran das liegen könnte.
    Hauptfenster.cpp:

    //---------------------------------------------------------------------------
    void __fastcall THauptfenster::DateiOeffnenClick(TObject *Sender)
    {
     if (OpenDialog->Execute())
     {
      SaveDialog->FileName = OpenDialog->FileName;
      OpenDialog->FileName = "";
      Dateien->Items->Add(SaveDialog->FileName);  //Geöffnete Dateien werden in einer ListBox gespeichert
      TEditorfenster* kin = new TEditorfenster(this);  //MDIChild-Form
      kin->Caption = SaveDialog->FileName;
      kin->ClientHeight = 275;
      kin->ClientWidth = 425;
      kin->Editor->Lines->LoadFromFile(SaveDialog->FileName);  //Editor=RichEdit
      kin->Editor->Modified = false;
     }
    }
    //---------------------------------------------------------------------------
    

    Editorfenster.cpp:

    //---------------------------------------------------------------------------
    void __fastcall TEditorfenster::FormActivate(TObject *Sender)
    {
     Hauptfenster->SaveDialog->FileName = Caption;
    }
    //---------------------------------------------------------------------------
    

    Die Caption eines MDIChild-Forms soll also, nachdem es den Fokus bekommen hat, dem SaveDialog als FileName zugeordnet werden. Bekomme aber folgende Exception:

    Im Projekt CPPCrypt.exe ist eine Exception der Klasse EFOpenError aufgetreten. Meldung: 'Datei Editorfenster_1 kann nicht geöffnet werden'. Prozeß wurde angehalten. Fortfahren mit Einzelschritt oder Start.

    Ich weiß aber auch nicht, warum der da jetzt eine Datei "Editorfenster_1" öffnen will. Da muss irgendwo noch ein Fehler sein. Wenn es nötig ist, kann ich auch noch den restlichen Code zeigen (ist nicht mehr weiter viel), aber ich glaube der Fehler liegt irgendwo hier, oder auch bei einem ganz simplen Logigfehler.

    Der Fehler tritt auf, wenn ich eine neue Datei gespeichert habe, und nun eine Datei öffnen will.

    [ Dieser Beitrag wurde am 29.12.2002 um 21:54 Uhr von FeelingDevil editiert. ]



  • hi,

    ich habe den code nur mal schnell überflogen, aber ich denke, wenn du nach
    der erstellung des forms eine zeile der art:

    Tkinderfom* kin = new Tkinderform(this); //formerzeugung.
    kin->Show(); //nach dem erstellen anzeigen.

    so müsste es gehen, falls nicht, sach bescheid...

    mfg
    murphysto



  • Hi, danke für die Antwort, aber die Exception tritt immer noch auf.
    Aber ich habs probiert so wie du es gesagt hast, und hab gesehen, dass wenn ich eine neue Datei erstelle, die Caption leer ist. Vielleicht liegt es auch an dem Code. Ich werde das noch mal nachprüfen, obwohl ich das jetzt schon tausendmal nachgeprüft habe. Bis denn.



  • Der Fehler taucht jetzt immer auf, wenn ich eine Datei öffne.
    Fehler:

    Im Project CPPCrypt.exe ist eine Exception der Klasse EFOpenError aufgetreten. Meldung 'Datei kann nicht geöffnet werden'. Prozeß wurde angehalten. Fortfahren mit Einzelschritt oder Start.

    Ich überprüf jetzt mal die Caption der Childform nach dem Laden. Nach dem Fehler zu urteilen sollte die Caption also leer sein. Aber wieso, ich versteh das nicht. Vielleicht sollte ich doch mal den gesamten(!) Code posten.

    edit: Die Caption ist wie zu erwarten war leer. Ich kapier's nicht! 😡

    [ Dieser Beitrag wurde am 30.12.2002 um 19:46 Uhr von FeelingDevil editiert. ]



  • Aus lauter Frust hab ich jetzt den Open- und SaveDialog auf die Childform gesetzt, sodass für jede offene Datei, neu erstellt oder geöffnet, ein eigener Dialog bereitsteht. Und siehe da: Es funktioniert :o
    Trotzdem macht mich das schon fertig, weil ich nicht weiß, was ich falsch gemacht habe. Aber was soll's 🙄 . Ich schreib jetzt halt das gesamte Proggi für die verlegten Dialoge um. Tja,... 🙄 ...



  • Hi!
    Also wenn du ein MDIChild Fenster erstellst, wird zuerst der Konstruktur des Fensters und dann der OnActivate Event ausgeführt.
    Das bedeutet in deinem Fall, das du nach der Zeile in der du das Editorfenster erstellst, du den Filenamen des SaveDialogs in die Caption des neu erstellten Fensters änderst. Geh dein Programm mal mit dem Debugger Schritt für Schritt durch.


Anmelden zum Antworten