Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Ausgabeverzeichnis [gelöst]

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
schildron



Anmeldungsdatum: 25.08.2008
Beiträge: 86

BeitragVerfasst am: 10.08.2009, 10:21    Titel: Ausgabeverzeichnis [gelöst] Antworten mit Zitat

Hallo!

Bei abschließenden Tests meines neuen Programmes musste ich leider einen Fehler bemerken. Da ich noch nicht sehr viel Erfahrung habe und mir auch keine Lösung eingefallen ist, bitte ich nun euch, dass ihr mir helft.

Im folgenden Code wird ein Dialog mit 2 Eingabeknöpfen erzeugt. Der erste erzeugt ein ein Fenster, mit dem man eine Datei auswählen kann. Wenn ich nun eine Datei auswähle, und anschließend eine Datei in das Verzeichnis, indem mein Programm liegt schreiben möchte, wird es nicht mehr in das gewünschte Verzeichnis sondern in den Ordner, wo die Datei liegt die ich vorher ausgewählt habe, gespeichert. Wenn ich keine Datei auswählen und gelich auf Speichern klicke, wird die Testdatei wie gewünscht in das Verzeichnis des Programms gespeichert.

Wie kann ich nun die Testdatei in das verzeichnis meines Programms speichern, wenn ich vorher eine Datei in einem anderen Verzeichnis ausgewählt habe.

Danke!

Mein OS: Win7 Build 7100

Testdatei.Bas:
Code:

''Testdatei

#Include Once "windows.bi"
#Include "win/commctrl.bi"
#Include "win/commdlg.bi"

#Include "Testdatei.bi"

Declare Function DlgProc(ByVal hWnd As HWND, ByVal uMsg As UINT, ByVal wParam As WPARAM, ByVal lParam As LPARAM) As Integer

   '' Dialog erzeugen
   InitCommonControls
   DialogBoxParam(GetModuleHandle(NULL), Cast(ZString Ptr,IDD_DLG1), NULL, @DlgProc, NULL)

   ExitProcess(0)
   End

''' Programmende

Function Dateisuche(ByVal hWin As HWND) As String
   Dim ofn As OPENFILENAME
   Dim buff As ZString*260

   ofn.lStructSize=SizeOf(OPENFILENAME)
   ofn.hwndOwner=hWin
   ofn.hInstance=hInstance
   ofn.lpstrInitialDir=StrPtr("C:\")
   buff=String(260,0)
   ofn.lpstrFile=@buff
   ofn.nMaxFile=260
   ofn.lpstrFilter=StrPtr(szFilter)
   ofn.lpstrTitle=StrPtr("Datei wählen")
   ofn.Flags=OFN_PATHMUSTEXIST Or OFN_HIDEREADONLY Or OFN_EXPLORER
   If GetOpenFileName(@ofn) Then
      Return buff
   EndIf

End Function

Function DlgProc(ByVal hWin As HWND,ByVal uMsg As UINT,ByVal wParam As WPARAM,ByVal lParam As LPARAM) As Integer
   Dim As Long id, Event, x, y, nPos
   Dim hBtn As HWND
   Dim rect As RECT
   Dim buff As ZString*260

   Select Case uMsg
      Case WM_INITDIALOG
         '
      Case WM_CLOSE
         EndDialog(hWin, 0)
         '
      Case WM_COMMAND
         id=LoWord(wParam)
         Event=HiWord(wParam)
         Select Case id
            Case IDC_BTN1
               buff=Dateisuche(hWin)
               
            Case IDC_BTN2
               Open "Testdokument.txt" For Output As #1
               write #1, "Dies ist ein Testdokument!"
               Close #1
               '
         End Select
      Case WM_SIZE
         '
      Case WM_HSCROLL

      Case Else
         Return FALSE
         '
   End Select
   Return TRUE

End Function


Testdatei.bi
Code:

#define IDD_DLG1 1000
#define IDC_BTN1 1001
#define IDC_BTN2 1002
#define IDC_STC1 1003
#define IDC_SBR1 1004

Const szNULL=!"\0"
Const szFilter   = "Txt Files (*.txt)" & szNULL & "*.txt" & szNULL

Dim Shared hInstance As HINSTANCE


Testdatei.rc
Code:

#define IDD_DLG1 1000
#define IDC_BTN1 1001
#define IDC_BTN2 1002
#define IDC_STC1 1003
#define IDC_SBR1 1004

IDD_DLG1 DIALOGEX -4,-16,184,85
CAPTION "IDD_DLG"
FONT 8,"MS Sans Serif",400,0,0
STYLE 0x10CE0800
BEGIN
  CONTROL "Ausgabeort",IDC_BTN1,"Button",0x50010000,3,3,84,21
  CONTROL "Speichern",IDC_BTN2,"Button",0x50010000,93,3,84,21
  CONTROL "Wenn zu Beginn eine Datei mit dem Knpof ""Ausgabeort"" markiert wird, speichert das Programm díe *.txt Datei in diesen Ordner und nicht ins Verzeichnis des Programmes.",IDC_STC1,"Static",0x50000000,9,30,172,36
  CONTROL "Testprogramm (c) 2009",IDC_SBR1,"msctls_statusbar32",0x50000003,6,69,150,6
END



Zuletzt bearbeitet von schildron am 11.09.2009, 20:07, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
schildron



Anmeldungsdatum: 25.08.2008
Beiträge: 86

BeitragVerfasst am: 11.09.2009, 13:25    Titel: Antworten mit Zitat

Nun ja, leider habe ich bis jetzt keine Antwort bekommen. Ich habe das Testprogramm bereits unter Windows Vista gestartet, wo sich das selbe Problem ergiebt. Ich sehe jetzt 2 Möglichkeiten. Meine Lieblinngsmöglichkeit wäre, einfach den Code zu richtig funktionieren zu lassen, was ich allerdings aufgrund mangelndem Wissen nicht selber lösen kann. Die 2. Möglichkeit ist, das Suchfenster in eine eigene *.exe zu zu verschieben und durch das HauptProgramm zu starten. Dies ist nur eine Notlösung, da ich nicht so viele Sachen im Hauptveraberzeichnis haben möchte.

Ich hoffe, dass ich in den nächsten Tagen eine Lösung finden werde.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 11.09.2009, 14:08    Titel: Antworten mit Zitat

Workaround:
Code:
Open ExePath & "/Testdokument.txt" For Output As #1


Ich nehme an, dass die Auswahlfunktion den Wert in CurDir beeinflusst, weil nach der Funktion der Befehl einen falschen Wert hat. Vermutlich verwendet Open genau diesen Befehl um Dateien ohne Pfadangabe zu speichern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
schildron



Anmeldungsdatum: 25.08.2008
Beiträge: 86

BeitragVerfasst am: 11.09.2009, 20:06    Titel: Antworten mit Zitat

1000 Dank für die Antwort.

Das Schlagwort EXEPATH hätte es auch alleine getan, aber DANKE für die Lösung happy happy happy happy happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz