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 AufrufCStdioFile file("datei.txt",CFile::modeRead);
geöffnet.
Falls nicht kannst du mit dem Befehl Open öffnen.Zu 2)
Mache eine Member Variable in deinem DialogCStdioFile *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);
-
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 speichern5Nun in der View OnDraw() m_strFilePath updaten
6Neue ausgewählte Textdatei verwenden.1-4 passiert im Dialog
5-6 passiert in der View OnDraw Funktionmfg Harry
-
Sorry das mit HTML falsch verstanden