xbpFileDialog() und relative Pfadangaben [erledigt]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21191
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
xbpFileDialog() und relative Pfadangaben [erledigt]
Hi,
ich versuche mich gerade damit, ein Auswahlfenster für Dateien anzuzeigen. Das geht auch eigentlich recht gut. Nur habe ich ein Problem, für das ich mal wieder keine Lösung finde. Da unter Windows pauschal automatisch ins Verzeichnis eigene Dateien gehopst und dann dort das Auswahlfenster angezeigt wird, muß natürlich das aktuelle Laufwerk angegeben werden. Da ich aber in Unterverzeichnissen des Programmes selbst Dateien anzeigen möchte, das Programm aber nicht weiß, wie das eigentliche Hauptverzeichnis des Programmes heißt, habe ich innerhalb des Programmes immer nur die Angabe ..\vz1\vz2\ usw. angegeben. Somit kann ich immer sagen, wohin ich will. Die Exe datei steht im Unterverzeichnis Programm, von dem ich dann halt wie oben erwähnt relative Angaben mache. Wie biege ich das denn jetzt dem XbasePart bei, das er relativ zum Programmverzeichnis aus arbeiten soll? Gibt es dazu einen Trick? Ich behelfe mir jetzt, dass ich einen Pfad höher wechsel, den erfrage und speicher, dann wieder zurück ins Programmverzeichnis gehe und dann erst den kompletten Pfad zusammenbaue.
Im Beispiel wird: CurDrive() + ":\" + CurDir() + "\" angegeben. Ich komme nicht drauf, wie ich dort einen relativen Pfad angeben kann, oder geht das nicht?
ich versuche mich gerade damit, ein Auswahlfenster für Dateien anzuzeigen. Das geht auch eigentlich recht gut. Nur habe ich ein Problem, für das ich mal wieder keine Lösung finde. Da unter Windows pauschal automatisch ins Verzeichnis eigene Dateien gehopst und dann dort das Auswahlfenster angezeigt wird, muß natürlich das aktuelle Laufwerk angegeben werden. Da ich aber in Unterverzeichnissen des Programmes selbst Dateien anzeigen möchte, das Programm aber nicht weiß, wie das eigentliche Hauptverzeichnis des Programmes heißt, habe ich innerhalb des Programmes immer nur die Angabe ..\vz1\vz2\ usw. angegeben. Somit kann ich immer sagen, wohin ich will. Die Exe datei steht im Unterverzeichnis Programm, von dem ich dann halt wie oben erwähnt relative Angaben mache. Wie biege ich das denn jetzt dem XbasePart bei, das er relativ zum Programmverzeichnis aus arbeiten soll? Gibt es dazu einen Trick? Ich behelfe mir jetzt, dass ich einen Pfad höher wechsel, den erfrage und speicher, dann wieder zurück ins Programmverzeichnis gehe und dann erst den kompletten Pfad zusammenbaue.
Im Beispiel wird: CurDrive() + ":\" + CurDir() + "\" angegeben. Ich komme nicht drauf, wie ich dort einen relativen Pfad angeben kann, oder geht das nicht?
Zuletzt geändert von Manfred am Mo, 11. Mai 2009 20:30, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16514
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
CurDrive() + ":\" + CurDir() liefert doch Dein aktuelles Verzeichnis - dann kannst Du doch den relativen Pfad ranhängen, oder verstehe ich Dich jetzt falsch?
Das aktuelle Verzeichnis ist ja einfach das "."-Verzeichnis - aber einige der Funktionen brauchen halt absolute Pfade - und die hast Du halt mit dem obigen Beispiel...
Viele Grüße,
Martin
CurDrive() + ":\" + CurDir() liefert doch Dein aktuelles Verzeichnis - dann kannst Du doch den relativen Pfad ranhängen, oder verstehe ich Dich jetzt falsch?
Das aktuelle Verzeichnis ist ja einfach das "."-Verzeichnis - aber einige der Funktionen brauchen halt absolute Pfade - und die hast Du halt mit dem obigen Beispiel...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: xbpFileDialog() und relative Pfadangaben
hi,
Application "installiert" ist ? das ist doch ganz "einfach" :
so nun kommt es darauf an ob du ein "Verzeichniss" oder
eine "Datei" öffnen/auswählen möchtest ?
also erstmal, weil es einfacher ist, eine "Datei"
will man nun "expliziet" eine spezielle Datei
so und nun zu einem "Verzeichniss". Das geht nur mit "Trick"
auch wenn der Befehl eigendlich zum "abspeichern" gedacht ist,
kann man nun prima durch die Verzeichnisse navigieren ABER
er gibt eben nur ein "Verzeichniss" zurück !!!
gruss by OHR
Jimmy
du meist doch das Verzeuichniss in dem die EXE deine Xbase++Manfred hat geschrieben: ... Da ich aber in Unterverzeichnissen des Programmes selbst Dateien anzeigen möchte, das Programm aber nicht weiß, wie das eigentliche Hauptverzeichnis des Programmes heißt,
Application "installiert" ist ? das ist doch ganz "einfach" :
Code: Alles auswählen
PUBLIC zPath
//
// in diesem Verzeichniss ist die EXE gestartet worden
// angenommen C:\Programme\MYDIR\EXE\Xbase.EXE
//
zPath := left(AppName(.t.), len(AppName(.t.)) - len(AppName(.f.)))
//
// dann wäre der "Hauptpath" C:\Programme\MYDIR\
//
zPath := STRTRAN(zPath,"EXE","")
...
FUNCTIN FILEDLG(oParent .....)
LOCAL DrawingArea := oParent:drawingArea
LOCAL aFilters := { {"Playlist","*.JVD;*.M3U"},;
{"JVD Playlist","*.JVD"} ,;
{"M3U Playlist","*.M3U"} }
oFileDlg := XbpFileDialog():new()
oFileDlg:fileFilters := aFilters
oFileDlg:center := .T.
oFileDlg:create( DrawingArea )
...
eine "Datei" öffnen/auswählen möchtest ?
also erstmal, weil es einfacher ist, eine "Datei"
Code: Alles auswählen
cPlayJVD := oFileDlg:open(ZPATH+"DATEN",.T.,.F.) // single
will man nun "expliziet" eine spezielle Datei
Code: Alles auswählen
// wenn man einen Dateinamen "vorgeben" will ...
// BUG in v1.9.331
// kann keine .Extension ”ffnen
//
* cPlayJVD := oFileDlg:open(ZPATH+"DATEN\PLAYLIST.JVD",.T.,.F.)
//
// also dann OHNE Extension
//
cPlayJVD := oFileDlg:open(ZPATH+"DATEN\PLAYLIST",.T.,.F.) // single
Code: Alles auswählen
cPathName := oFileDlg:saveAs(zpath+"Select Path, Press Enter or Click SAVE",,.T.)
kann man nun prima durch die Verzeichnisse navigieren ABER
er gibt eben nur ein "Verzeichniss" zurück !!!
gruss by OHR
Jimmy
- Martin Altmann
- Foren-Administrator
- Beiträge: 16514
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
die Variante von Jimmy (mit AppName()) ist auf jeden Fall sinnvoller!
Selbst wenn während der Laufzeit Deines Programmes das Verzeichnis mal geändert wurde, so gibt seine Version immer das selbe Verezichnis zurück (das Installationsverzeichnis), während meine Variante dann ein anderes Verzeichnis zurückgibt (das aktuelle).
Viele Grüße,
Martin
die Variante von Jimmy (mit AppName()) ist auf jeden Fall sinnvoller!
Selbst wenn während der Laufzeit Deines Programmes das Verzeichnis mal geändert wurde, so gibt seine Version immer das selbe Verezichnis zurück (das Installationsverzeichnis), während meine Variante dann ein anderes Verzeichnis zurückgibt (das aktuelle).
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21191
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi
ich werde im Hintergrund die Vorschläge austesten, aber jetzt kurz erklären wie ich es meine, weil ich mir nicht so ganz sicher bin, ob ich mich gestern Abend deutlich ausgedrückt habe.
Ich befinde mich auf einem Serververzeichnis im Netzwerk. (Samba)
LW (egal, Buchstabe kann genommen werden wie will)
LW:\Prgvz <--- hier steht alles drin, was zum Programm gehört (kann benannt werden wie will)
LW:\Prgvz\programm <-- hier stehen die Exe Files samt DLL drin (Name fest vorgegeben, von hier aus wird aber relativ adressiert)
LW:\PrgVz\datenbanken\umsatz\ <-- hier muß ich hin, bzw. von hier aus soll gestartet werden ( und noch tiefer, soll aber aus dem Auswahlfenster des XbpFileDialog anwählbar sein.)
Wenn ich jetzt direkt vom Programm aus auf Dateien zugreife, dann z.B. so: Use ..\datenbanken\umsatz\xyz
Um dem XbpFileDialog zu sagen, er soll in dem Verzeichnis
LW:\prgvz\datenbanken\umsatz\ anfangen, dann müßte ich zu dem Zeitpunkt den genauen Namen des prgvz wissen und den weiß ich nicht.
Jetzt habe ich gestern Abend noch folgendes ausprobiert:
damit bin ich aber trotzdem im Startverzeichnis Eigene Dateien gelandet. Obwohl im Debugger der korrekte Pfad in der Var zu lesen war.
Da es spät Abends war, werde ich die Sache jetzt nochmals in Ruhe angehen und sehen, ob ich vielleicht einen Denkfehler gemacht habe.
ich werde im Hintergrund die Vorschläge austesten, aber jetzt kurz erklären wie ich es meine, weil ich mir nicht so ganz sicher bin, ob ich mich gestern Abend deutlich ausgedrückt habe.
Ich befinde mich auf einem Serververzeichnis im Netzwerk. (Samba)
LW (egal, Buchstabe kann genommen werden wie will)
LW:\Prgvz <--- hier steht alles drin, was zum Programm gehört (kann benannt werden wie will)
LW:\Prgvz\programm <-- hier stehen die Exe Files samt DLL drin (Name fest vorgegeben, von hier aus wird aber relativ adressiert)
LW:\PrgVz\datenbanken\umsatz\ <-- hier muß ich hin, bzw. von hier aus soll gestartet werden ( und noch tiefer, soll aber aus dem Auswahlfenster des XbpFileDialog anwählbar sein.)
Wenn ich jetzt direkt vom Programm aus auf Dateien zugreife, dann z.B. so: Use ..\datenbanken\umsatz\xyz
Um dem XbpFileDialog zu sagen, er soll in dem Verzeichnis
LW:\prgvz\datenbanken\umsatz\ anfangen, dann müßte ich zu dem Zeitpunkt den genauen Namen des prgvz wissen und den weiß ich nicht.
Jetzt habe ich gestern Abend noch folgendes ausprobiert:
Code: Alles auswählen
STATIC FUNCTION kassenberichtalt()
LOCAL cFile
LOCAL oDlg
LOCAL cShdVerzeichnis, cUmsatzVerzeichnis
DIRCHANGE("..\") // in das Rootverzeichnis des Programmes
cShdVerzeichnis := CurDir() // ermitteln, wie das heißt
DIRCHANGE(cShdVerzeichnis + "\programm")
cUmsatzVerzeichnis := CurDrive()
cUmsatzVerzeichnis += ":\"
cUmsatzVerzeichnis += cShdVerzeichnis
cUmsatzVerzeichnis += "\datenbanken\umsatz\"
oDlg := XbpFileDialog():new():create()
cFile := oDlg:open( cUmsatzVerzeichnis + "*.dbf")
oDlg:destroy()
RETURN(.T.)
Da es spät Abends war, werde ich die Sache jetzt nochmals in Ruhe angehen und sehen, ob ich vielleicht einen Denkfehler gemacht habe.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21191
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi ich nochmal,
wie immer dasselbe.........
ich hatte einen Tippfehler. Das was ich oben angeführt habe, das klappt.
Jetzt werde ich es OHNE Tippfehler in das Beispiel einbauen von Alaska und dann nochmals sehen.
Manomanoman
wie immer dasselbe.........
ich hatte einen Tippfehler. Das was ich oben angeführt habe, das klappt.
Jetzt werde ich es OHNE Tippfehler in das Beispiel einbauen von Alaska und dann nochmals sehen.
Manomanoman
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
1.) wie ich im obrigen Beispiel zeigte funktionieren "Extension" NICHT !
2.) man kann zwar als Wildcard ein "*" benutzen, aber wie es auch im
Help File steht ist das nicht die "richtige" Methode.
"richtig" ist es die Methode ":fileFilters" zu benutzen und ein Array
zu übergeben.
3.) als "default" solltest immer eine "vorhandene" Datei angeben ABER
ohne "Extension"
nun solltest du auch das Verzeichniss "cUmsatzVerzeichnis" angezeigt
bekommen.
gruss by OHR
Jimmy
kein Wunder den so geht es nicht.Manfred hat geschrieben:Code: Alles auswählen
STATIC FUNCTION kassenberichtalt() cFile := oDlg:open( cUmsatzVerzeichnis + "*.dbf")
1.) wie ich im obrigen Beispiel zeigte funktionieren "Extension" NICHT !
2.) man kann zwar als Wildcard ein "*" benutzen, aber wie es auch im
Help File steht ist das nicht die "richtige" Methode.
"richtig" ist es die Methode ":fileFilters" zu benutzen und ein Array
zu übergeben.
3.) als "default" solltest immer eine "vorhandene" Datei angeben ABER
ohne "Extension"
nun solltest du auch das Verzeichniss "cUmsatzVerzeichnis" angezeigt
bekommen.
gruss by OHR
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21191
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
der Tippfehler war eigentlich kein Tippfehler in dem Sinne. Ich hatte über länger Zeit hinweg das Unterverzeichnis "Umsatz" genannt und jetzt in "Kasse" umgetauft. Naja, und wie die Macht der Gewohnheit nun eben ist...
Bis ich dann endlich die Augen aufgemacht und erkannt hatte, das der Name falsch war.
Allerdings muß ich vorher über Verzeichniswechsel eins höher gehen, sprich in das "Hauptverzeichnis" des Programmes, mir das merken und dann den Rest des festen Verzeichnisses anhängen. Ich habe es nicht hinbekommen aus dem Programmunterverzeichnis über relative Pfadangaben das Umsatzverzeichnis anzuwählen.
PS: Wobei mich jetzt aber der Parameter :noWriteAccess etwas verwirrt. Irgendwie sehe ich keine Wirkung, oder verstehe ihn falsch. Kann ich damit nicht abschalten, dass der User neue Verzeichnisse, oder Dateien innerhalb dieses Dialoges erstellen kann?
der Tippfehler war eigentlich kein Tippfehler in dem Sinne. Ich hatte über länger Zeit hinweg das Unterverzeichnis "Umsatz" genannt und jetzt in "Kasse" umgetauft. Naja, und wie die Macht der Gewohnheit nun eben ist...
Bis ich dann endlich die Augen aufgemacht und erkannt hatte, das der Name falsch war.
Allerdings muß ich vorher über Verzeichniswechsel eins höher gehen, sprich in das "Hauptverzeichnis" des Programmes, mir das merken und dann den Rest des festen Verzeichnisses anhängen. Ich habe es nicht hinbekommen aus dem Programmunterverzeichnis über relative Pfadangaben das Umsatzverzeichnis anzuwählen.
PS: Wobei mich jetzt aber der Parameter :noWriteAccess etwas verwirrt. Irgendwie sehe ich keine Wirkung, oder verstehe ihn falsch. Kann ich damit nicht abschalten, dass der User neue Verzeichnisse, oder Dateien innerhalb dieses Dialoges erstellen kann?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!