Eine Textdatei öffnen und übergeben



  • Hallo,

    ich möchte in einem Nicht Modalen Dialogfeld eine Funktion haben in der ich eine Textdatei öffnen kann.

    Nachdem diese geöffnet wurde musss ich der View Klasse irgendwie bescheid sagen das sie diese Datei übernimmt und dadurch zum Neuzeichnen (Invalidate) gezwungen wird.

    Hier wird mal meine textdatei benutzt (in der View Klasse)
    Ich sollte mal die Datei auf m_dateiname ändern um sie variabel zu machen oder?

    // Werte aus Textdatei einlesen
    	CStdioFile file("datei.txt",CFile::modeRead);
    

    Wie müsste ich jetzt den Button im Nichtmodalen Dialogfeld definieren, dass er mir 1. die Datei öffnen und 2. den Dateinamen in die CView Klasse shcickt und dort ein Neuzeichnen aufruft.

    mfg Harry



  • harrychen01 schrieb:

    Hallo,

    ich möchte in einem Nicht Modalen Dialogfeld eine Funktion haben in der ich eine Textdatei öffnen kann.

    Nachdem diese geöffnet wurde musss ich der View Klasse irgendwie bescheid sagen das sie diese Datei übernimmt und dadurch zum Neuzeichnen (Invalidate) gezwungen wird.

    Hier wird mal meine textdatei benutzt (in der View Klasse)
    Ich sollte mal die Datei auf m_dateiname ändern um sie variabel zu machen oder?

    // Werte aus Textdatei einlesen
    	CStdioFile file("datei.txt",CFile::modeRead);
    

    Wie müsste ich jetzt den Button im Nichtmodalen Dialogfeld definieren, dass er mir 1. die Datei öffnen und 2. den Dateinamen in die CView Klasse shcickt und dort ein Neuzeichnen aufruft.

    mfg Harry

    Zu 1)
    Die Datei wird ja schon durch den Aufruf

    CStdioFile file("datei.txt",CFile::modeRead);
    

    geöffnet.
    Falls nicht kannst du mit dem Befehl Open öffnen.

    Zu 2)
    Mache eine Member Variable in deinem Dialog

    CStdioFile *pFile = NULL;
    

    und übergib beim Aufruf des Dialogs dieser Membervariable die Adresse aus der file Variable aus deiner View.

    dlg.pFile = &myView.file;
      dlg.DoModal();
    

    somit solltest du im Dialog mit der Datei arbeiten können



  • hm,

    so ich habe jetzt in meinem DIalog den Pfadnamen in der Variable m_strFilePath

    void CMyDialog4::OnBnClickedOpenexistingfile()
    {
    	CString m_strFileName;
    	//CString m_strFilePath;
    
        // Objekt der Klasse CFileDialog erstellen
        CFileDialog m_File(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Text-Dateien (*.txt)|*.txt||");
    
        // Startverzeichnis initialisieren
        m_File.m_ofn.lpstrInitialDir = "C:\\";
    
        // Dialogfeld öffnen und Ergebnis auffangen
        if(m_File.DoModal()==IDOK)
        {
          // Gewählten Pfad ermitteln
    	  m_strFilePath = m_File.GetPathName();
    
          // Ausgewählte Datei öffnen
          //ShellExecute(NULL, "open", m_strFileName, NULL, NULL, SW_SHOW);
        }
    }
    

    also ganz klar ist mir jetzt nicht wie ich diese Variable an die View übermitteln soll

    die Membervariable in der View hab ich ebenfalls m_strFilePath benannt.

    jetzt muss ich am Ende des obrigen Codes...
    Eigentlich nen Pointer auf die C45646View machen, klappt jedoch nicht wirklich (gibt mir ne Fehlermeldung beim includieren des C45646View.h aus)

    könntest du das vielleicht etwas spezifizieren...

    CStdioFile *pFile --> damit ich den Filename bekomme? den hab ich jetzt durch m_strFilePath
    dlg.pFile = &myView.file --> dlg (mein Dialgfeld wo ich die Datei öffne? wäre in meinem Fall dann CMyDialog4) // --> myView (lässt mich nicht so drauf zugreifen)
    dlg.DoModal()



  • Moment, möchtest du eine Datei auswählen über den CFileDialog und dann in der View öffnen oder eine in der View geöffnete Datei in einem weiteren Dialog nutzen? Habe hier das zumindest so verstanden das du das CFile Objekt in einem neuen Dialog nutzen willst!



  • ich will ersteres deiner genannten Möglichkeinte machen

    Ihc habe ein Nichtmodales Dialogfeld mit einem Button.
    Dort befindet sich ein Button mit "Open Data"
    Jetzt öffne ich eine Datei , bekomm den ganzen Pfad inklusive Namen in den String m_strFilePath.

    Nun möchte ich diesen String an die View weiterleiten.
    (Es handelt sich um ein Diagramm das gezeichnet wird und die Werte aus einer Textdatei enthält)

    Und die View soll dann eben die Werte der neuen Datei anzeigen.

    mfg harry



  • Dann geht es ja nur um einen String der übergeben werden soll.
    Mach ne Membervariable in der View die den String aufnehmen kann.

    UpdateData(true);
    myView.m_MeinString = dlg.m_strFilePath;
    UpdateData(false);
    

    http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/kap05.htm



  • hallo, klappt mittlerweile schon soweit das ich m_strFilePath aus dem Dialog in die View holen kann, jedoch wird bei mir nur die vom Konstruktor erstellte Datei angezeigt (damit die Anzeige nicht leer ist) und wenn ich eine Datei öffne und den neuen m_strFilePath erzegut habe nimmt er mir diese nicht.

    Code vom Button

    void CMyDialog4::OnBnClickedOpenexistingfile()
    {
    	UpdateData(TRUE);
    
    	// Objekt der Klasse CFileDialog erstellen
        CFileDialog m_File(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Text-Dateien (*.txt)|*.txt||");
    
        // Startverzeichnis initialisieren
        m_File.m_ofn.lpstrInitialDir = "C:\\";
    
        // Dialogfeld öffnen und Ergebnis auffangen
        if(m_File.DoModal()==IDOK)
        {
          // Gewählten Pfad ermitteln
    	  m_strFilePath = m_File.GetPathName();
    
          // Ausgewählte Datei öffnen
          //ShellExecute(NULL, "open", m_strFileName, NULL, NULL, SW_SHOW);
        }
    
    	UpdateData(FALSE);
    
    }
    

    Code in der View

    UpdateData(TRUE);
    	m_strFilePath = m_myDialog4.m_strFilePath;
    	UpdateData(FALSE);
    

    mfg Harry



  • harrychen01 schrieb:

    hallo, klappt mittlerweile schon soweit das ich m_strFilePath aus dem Dialog in die View holen kann, jedoch wird bei mir nur die vom Konstruktor erstellte Datei angezeigt (damit die Anzeige nicht leer ist) und wenn ich eine Datei öffne und den neuen m_strFilePath erzegut habe nimmt er mir diese nicht.

    Welchen Konstruktor meinst du? Welche Anzeige?



  • hi,

    <a target="_blank" href="http://www.inrion.com/screen1.gif">Screenshot vom Programm </a>
    

    also mit Anzeige (was du natürlich nicht wissen kannst) meine ich das Diagramm was sich in der View Klasse CMy45646View in der OnDraw Funktion befindet

    Im Konstruktor vom Dialogfeld (Im Screenshot das unterste) erzeuge ich m_strFilePath = "start.txt" damit die Anzeige nicht leer ist (also das Diagram), weil ich hab ja mittlerweile noch keine Datei ausgewählt.

    Nun öffne ich die Datei --> Open Existing

    void CMyDialog4::OnBnClickedOpenexistingfile()
    {
        UpdateData(TRUE);
    
        // Objekt der Klasse CFileDialog erstellen
        CFileDialog m_File(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Text-Dateien (*.txt)|*.txt||");
    
        // Startverzeichnis initialisieren
        m_File.m_ofn.lpstrInitialDir = "C:\\";
    
        // Dialogfeld öffnen und Ergebnis auffangen
        if(m_File.DoModal()==IDOK)
        {
          // Gewählten Pfad ermitteln
          m_strFilePath = m_File.GetPathName();
    
          // Ausgewählte Datei öffnen
          //ShellExecute(NULL, "open", m_strFileName, NULL, NULL, SW_SHOW);
        }
    
        UpdateData(FALSE);
    
    }
    

    Nochmal erwähnt welche Funktion nun durchgeführt werden soll

    1Drücke Button "Open Existing"
    2Öffnen des CFileDialog Fensters
    3Auswählen der .txt Datei
    4Pfad der .txt Datei in m_strFilePath speichern

    5Nun in der View OnDraw() m_strFilePath updaten
    6Neue ausgewählte Textdatei verwenden.

    1-4 passiert im Dialog
    5-6 passiert in der View OnDraw Funktion

    mfg Harry



  • Sorry das mit HTML falsch verstanden 😉

    http://www.inrion.com/screen1.gif


Anmelden zum Antworten