Buch: "C++ für Kids" ... mdi speichern ?? "Builder 1.0"



  • Habe mir das Buch "C++ für Kids" gekauft das wir c++ in der schule machen,
    als ich zum Kapitel 11. "Für all Fälle MDI?" kam ...
    was ich sofort fasziniert von dem möglichkeiten die ein mdi bietet ...
    aber als es zum thema "speichern" kam ... schriebt der Autor ...

    "Denn es geht mir nicht um das Programmieren einer kompletten Anwendung." ⚠

    so da sind wir bei meinem Problem ...

    WIE SPEICHERE ICH EINE MDI ANWENDUNG ??? 😡 in "Builder 1.0"

    bei quellcode anfrage stehe ich gerne zu verfügung....

    ➡ Hubert S. 😃



  • Was genau meinst du mit "Speichern"?



  • Jansen schrieb:

    Was genau meinst du mit "Speichern"?

    ... ich meine den quellcode so zu ändern, dass ich in der fertigen anwendung

    ein geöffnetes textdokument mit den menue punkt

    datei->speichern

    z.B.: mit einen anderen namen speichern kann ....

    es wäre net schlecht auch noch bmp speichern zu können

    thx für schnelle antwort ...

    ➡ Hubert S. 😃



  • Das Textdokument wird ja in einem TRichEdit geladen. Mit welcher Funktion war das? Ja genau mit LoadFromFile. Wie koennte das jetzt beim Speichern funktionieren? Einfach mal in die Hilfe schauen...
    Bei dem Bild genau dasselbe!
    MfG Aoeke



  • so sieht mein quellcode im mchild1.cpp (untergeordnetes mdi) aus ...

    //---------------------------------------------------------------------
    
    void __fastcall TMDIChild::GetText(String DateiName)
    {
        Image1->Hide();
        RichEdit1->Show();
    	RichEdit1->Lines->LoadFromFile (DateiName);
    }
    //---------------------------------------------------------------------
    void __fastcall TMDIChild::FormCreate (TObject *Sender)
    {
        RichEdit1->Align = alClient;
        RichEdit1->ScrollBars = ssBoth;
        Image1->Align = alClient;
        Image1->Center = true;
    }
    //---------------------------------------------------------------------
    void __fastcall TMDIChild::GetImage (String DateiName)
    {
        RichEdit1->Hide ();
        Image1->Show();
        Image1->Picture->LoadFromFile (DateiName);
    }
    //---------------------------------------------------------------------
    

    und so im mmain.cpp ...

    //---------------------------------------------------------------------
    void __fastcall TMainForm::CreateMDIChild(String Name)
    {
    	TMDIChild *Child;
        String Kennung;
        Child = new TMDIChild(Application);
    	Child->Caption = Name;
        Kennung = UpperCase (ExtractFileExt (OpenDialog->FileName));
        if (Kennung == ".BMP")
        	Child->GetImage (OpenDialog->FileName);
        else
        	Child->GetText (OpenDialog->FileName);
    }
    //---------------------------------------------------------------------
    

    so und ich weiß das man mit SaveToFile speichert...

    GetText wird aufgerufen und wie sag ich dem builder jetzt das er speichern und nicht erstellen soll ??

    thx ... schritt für schritt .. ist mir am liebsten ... dann lerne ich wenigstens was ... wenn ihr keine lust habt dann reicht mir auch eine quick erklärung...
    cu
    ➡ Hubert S. 😃

    Edit:
    Bitte die Code-Tags benutzen. Danke!



  • Du hast doch dein MainMenu. Wenn du dort auf Datei->Speichern klickst, wird eine Ereignisfunktion ausgeloest. In diesem Ereignis ueberpruefst du folgendes:

    1. Welches Fenster gerade aktiv ist
    2. Ob das RichEdit oder das Image angezeigt wird
    3. Daraus schliesst du, ob du jetzt den Text oder das Bild speichern musst
    4. Passende Dialog aufrufen
    5. Dateinamen holen
    6. abspeichern
    7. FERTIG

    Das muesste so glaube ich mal die Idee sein.. (Wenn nicht, nicht schlagen! 😃 )
    MfG Aoeke



  • habe es mal damit versucht :

    void __fastcall TMainForm::FileSaveItemClick(TObject *Sender)
    {
    if (SaveDialog1->Execute())
    ActiveMDIChild(SaveDialog1->FileName);
    }

    aber bekomme die fehlermeldung

    "Call of nofunction"

    sag mir ob ich auf dem richtigen weg bin ...!

    wenn das von mir falsch ist dann sag mir bitte die lösung ...
    bin mit meinen latein (C++) 😕 am Ende ... bin schon seit fast 4 Wochen an der sche*** ... habe keine möglichkeit gehabt meinen lehere zu fragen ... wir haben in der schule nur mit der DOS Umgeung von Borland C++ gearbeitet ...
    also nicht NICHTS schreiben ... bitte .. bitte ... 🙄
    //---------------------------------------------------------------
    wenn ich es so mache ...
    Child->RichEdit1->Lines->SaveToFile(Name); // in mmain1.cpp
    sagt er mir das Child undefiniert ist ... da habe ich mir überlegt "wie kann ich ein Child übergeben ?" ... abba das wäre zu hoch für mich ... und im mchild1.cpp habe ich es auch mit dem zweiten quelltext versucht ... abba da habe ich das problem mit dem draufzu kommen in das mchild1.cpp ... oder wie ich ihm sage das ich jetzt speichern und nicht öffnen will ...
    habe in meinem verständnis vom MDI und Programm-ablauf bestimmt noch ein gedanken fehler .. hoffentlich hilft mir jemand auch dabei ... so das war jetzt eine mamut antwort...
    cu und danke ... gut nacht ⚠

    ➡ Hubert S. 😃



  • So in etwa:

    TMDIChild *Child = (TMDIChild *)ActiveMDIChild;
    Child->Memo1->Lines ...
    


  • Jansen schrieb:

    So in etwa:

    TMDIChild *Child = (TMDIChild *)ActiveMDIChild;
    Child->Memo1->Lines ...
    

    So dann has du das aktive Fenster. (war 1.).
    Jetzt ueberpruefst du, ob das Image oder das RichEdit sichtbar war (2.) und rufst den richtigen Dialog auf (3./4.)

    if( Child->RichEdit1->Visible ) // wird das RichEdit angezeigt?
    {
    	if( SaveDialog1->Execute() ) // rufe den Dialog auf
    	{
    		// speichere den Inhalt des RichEdits unter dem
    		// angegeben Dateinamen ab
    		Child->RichEdit1->Lines->SaveToFile( SaveDialog1->FileName );
    	}
    }
    else if( Child->Image1->Visible ) // oder wird das Image angezeigt?
    {
    	if(  SavePictureDialog1->Execute() ) // rufe den Bildspeichern Dialog auf
    	{
    		// speichere das Bild unter dem angegeben Dateinamen ab
    		Child->Image->Picture->SaveToFile( SavePictureDialog1->Execute() );
    	}
    }
    

    Ich denke, dass es so funktionieren muesste.
    MfG Aoeke

    <edit>Kommentare eingefuegt!</edit>



  • thx for help ...

    so das programm wird (wieder) ausgeführt ... wenigstens etwas ... und txt dateien lassen sich öffnen ... beim speichern der neu erstellten oder geöffnenten txt datei ... schreibt das programm noch DINGE dazu die ich net verstehe und net haben will
    ...
    z.B.:

    //-------------------------------------------------------------------
    {\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 System;}}
    \viewkind4\uc1\pard\lang1031\f0\fs20 das programm schreibt vor jeder Zeile "\\par "
    \par 
    \par Zeile 3
    \par 
    \par Zeile 5
    \par }
    //-------------------------------------------------------------------
    

    urstprünglich
    das programm schreibt vor jeder Zeile

    Zeile 3

    Zeile 5

    //-------------------------------------------------------------------

    ➡ Hubert S. 😃



  • Dazu solltest du dir mal die Eigenschaft PlainText von TRichEdit anschauen und rumprobieren.
    MfG Aoeke



  • THX

    Aoeke schrieb:

    Dazu solltest du dir mal die Eigenschaft PlainText von TRichEdit anschauen und rumprobieren.
    MfG Aoeke

    habe ich mir mal angeschaut ...

    PlainText war auf false gestellt !!!

    was macht den das PlainText ??



  • Huberts schrieb:

    was macht den das PlainText ??

    Was sagt denn die Hilfe zu PlainText?

    Und in Zukunft bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema.


Log in to reply