Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Seltsames problem mit Cfiledialog(?)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
10.02.2003, 10:43 Uhr
bIOHAZARd



Hi,

ich programmiere gerade ein kleines dialogfeldbasiertes tool. unter anderem soll man in dem dialog einen pfad zu einer ausführbaren datei angeben. habe zu dem zweck einerseits ne normale textbox und zum andern daneben einen button 'Find...' mit dem man eine CFileDialog-box öffnen kann. klickt der benutzer auf OK wird per GetPathName() der dateiname samt pfadangabe in m_strProgramFile (CString) kopiert... durch ein UpdateData(false) steht der pfad dann in der o.g. textbox.... relativ simpel.

in dem dialog ist auch noch ein button zum speichern der einstellungen... gespeichert wird indem ich ein objekt, das als eigenschaften die aktuellen einstellungen hat, serialisiere.

nun zum seltsamen part:
wenn ich manuell einen dateinamen in die textbox schreibe und dann auf speichern klicke funktioniert alles wunderbar, beim nächsten start werden die einstellungen korrrekt wiederhergestellt.

wenn ich aber nun über den button 'Find...', also der CFileDialog-box eine datei auswähle und der dateiname in die textbox geschrieben wird, klappt das speichern der einstellungen nicht mehr.

es scheint direkt mit der CFileDialog-box zu tun zu haben: wenn ich den aufruf der dialogbox über m_ldFile.DoModal(); auskommentiere und m_strProgramFile = "auf irgendwas fest setze", dann funktioniert das serialisieren, also das speichern der einstellungen wieder.

Die Funktion des 'Find...'-buttons:

Code:
void CMyDlg::OnBfindexe()
{
    static char BASED_CODE szFilter[] = "Program Files (*.exe)|*.exe||";

    CFileDialog m_ldFile(TRUE, ".exe", m_strProgramFile, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
    
    if(m_ldFile.DoModal()==IDOK)
    {
        m_strProgramFile = m_ldFile.GetPathName();
        GetDlgItem(IDC_BSTARTSERVER)->EnableWindow(true);
    }

    UpdateData(false);
}



bei google oder msdn find ich auch nix..... bin hier echt am verzweifeln :/

Dieser Post wurde am 10.02.2003 um 10:44 Uhr von bIOHAZARd editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.02.2003, 11:02 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Poste mal den Source deiner Serialize Funktion

mfg mike
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.02.2003, 11:06 Uhr
bIOHAZARd




Code:
void CSettings::SaveSettings(CString filename)
{
    CFile file;
    CFileException ex;

    if(!file.Open(filename, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite))
    {
        TCHAR szError[1024];
        ex.GetErrorMessage(szError, 1024);
        ((CMyDlg*)m_pWnd)->MessageBox(szError, "Error!", MB_OK);
    }

    CArchive ar(&file, CArchive::store);
    CObject::Serialize(ar);

    ar << m_bMinToTray << m_iMethod << m_iPort << m_iType << m_strServerAddr << m_strProgramFile;

    ar.Close();
    file.Close();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.02.2003, 11:14 Uhr
mike
Pinguinhüpfer
(Operator)


Hast du ein Updatedata(TRUE); hingeschrieben, bevor du SaveSettings(..); aufrufst?
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.02.2003, 11:27 Uhr
bIOHAZARd



jo... wie gesagt wenn ich oben

Code:
    if(m_ldFile.DoModal()==IDOK)
    {


auskommentiere und die zeile

Code:
    m_strProgramFile = m_ldFile.GetPathName();


z.b. durch

Code:
    m_strProgramFile = "C:\test.exe";


ersetzte funktioniert alles wunderbar.

aber mit dem DoModal() wird nix serialisiert.... es wird dann keine datei erstellt.

Dieser Post wurde am 10.02.2003 um 11:32 Uhr von bIOHAZARd editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.02.2003, 14:44 Uhr
Volle



Hi, was spricht der Debugger?

füge mal ein paar Traces ein. Etwa so


C++:
void CMyDlg::OnBfindexe()
{
    static char BASED_CODE szFilter[] = "Program Files (*.exe)|*.exe||";

    CFileDialog m_ldFile(TRUE, ".exe", m_strProgramFile, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
    
    if(m_ldFile.DoModal()==IDOK)
    {
        m_strProgramFile = m_ldFile.GetPathName();
        TRACE("%s\n", m_strProgramFile);
        GetDlgItem(IDC_BSTARTSERVER)->EnableWindow(true);


void CSettings::SaveSettings(CString filename)
{
    CFile file;
    CFileException ex;
    TRACE("%s\n", filename);



Vielleicht kommst du der Sache so auf die Spur.

Grüße, Volle.

Dieser Post wurde am 10.02.2003 um 14:45 Uhr von Volle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.02.2003, 14:58 Uhr
bIOHAZARd



ich hab das problem mal isoliert und ein neuen workspace erstellt, wer will kann sich das ja mal angucken:
www.workwork.de/testproject.zip

(hoffentlich will jemand ;P)


auch hierbei gilt:
- trägt man direkt was in die textbox ein und klickt auf OK wird der eintrag gespeichert und wird beim nächsten start des programms korrekt geladen.

- benutzt man den CFileDialog ('Durchsuchen...'-button) schlägt das speichern später beim klick auf OK fehl.

- es scheint irgendwie mit m_ldFile.DoModal() zusammen zu hängen.

wer mir bei dem problem weiterhelfen kann bekommt 1000 gummipunkte... :/
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.02.2003, 14:59 Uhr
bIOHAZARd




Zitat:
Volle postete
Hi, was spricht der Debugger?

füge mal ein paar Traces ein. Etwa so


C++:
...


Vielleicht kommst du der Sache so auf die Spur.

Grüße, Volle.



ist eigentlich alles korrekt :/
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.02.2003, 15:45 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Also du hast gepostet, dass er das nicht speichert. Hmmm. Bei mir tut er es aber

mfg mike
PS: Arbeitet auf einem WinNT 4.0 Rechner und hab die exe im ersten Ordner
ausgeführt
Leider nur gewisse exe File. Komisch...
--

Dieser Post wurde am 10.02.2003 um 15:50 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
10.02.2003, 15:54 Uhr
bIOHAZARd



hm.. das wär natürlich auch ne möglichkeit.. also das das irgendwie speziell an meinem system liegt

wär mir sogar fast noch lieber weil ich eh bald formatiere und alles neu draufziehe und ich codetechnisch da sonst einfach nich durchblicken würde
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: