 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
schildron
Anmeldungsdatum: 25.08.2008 Beiträge: 86
|
Verfasst am: 10.08.2009, 10:21 Titel: Ausgabeverzeichnis [gelöst] |
|
|
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 |
|
 |
schildron
Anmeldungsdatum: 25.08.2008 Beiträge: 86
|
Verfasst am: 11.09.2009, 13:25 Titel: |
|
|
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 |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 11.09.2009, 14:08 Titel: |
|
|
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 |
|
 |
schildron
Anmeldungsdatum: 25.08.2008 Beiträge: 86
|
Verfasst am: 11.09.2009, 20:06 Titel: |
|
|
1000 Dank für die Antwort.
Das Schlagwort EXEPATH hätte es auch alleine getan, aber DANKE für die Lösung  |
|
Nach oben |
|
 |
|
|
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.
|
|