XbpFileDialog für Ordner

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

XbpFileDialog für Ordner

Beitrag von peternmb »

ich weiß, es gibt einen Parameter, so dass man keine Datei auswählen muss - nur weiß ich nicht mehr wo der hingehört :?

Code: Alles auswählen

oDialog:title  := 'Standard-Ordner für Text-Dateien festlegen'
oDialog:FileFilters := { {"um Verzeichnis auszuwählen <Enter> oder <Speichern>", "*.TXT"} }
oDialog:create()
auswahl:=oDialog:SaveAs( Hauptpfad+"\Texte" )
ich möchte ein bestimmtes Verzeichnis vorgeben, und die darin befindlichen txt-Dateien anzeigen lassen.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Re: XbpFileDialog für Ordner

Beitrag von Manfred »

meinst Du oDialog:open() ?
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!!
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: XbpFileDialog für Ordner

Beitrag von peternmb »

Manfred hat geschrieben:meinst Du oDialog:open() ?
nein - es gibt soweit ich weiß einen undokumentierten Parameter mit dem man ein Verzeichnis (keine Datei) auswählen kann.
Irgendwo kommt ein .T. rein - nur wo weiß ich nicht mehr :banghead:

Ich habe mittlerweile das gefunden:
http://www.xbaseforum.de/viewtopic.php? ... filedialog

Ich schaffe es aber einfach nicht, diesen Code auf mein Beispiel "umzudenken".
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Re: XbpFileDialog für Ordner

Beitrag von Manfred »

Verstehe ich jetzt nicht. Du gibst das Verzeichnis mit an und dann wird genau ab da geöffnet.

Code: Alles auswählen

cVerzeichnis := oDialog:open("lw:\verzeichnis")
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!!
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: XbpFileDialog für Ordner

Beitrag von peternmb »

Manfred hat geschrieben:Verstehe ich jetzt nicht. Du gibst das Verzeichnis mit an und dann wird genau ab da geöffnet.
Das ist nicht mein Problem. Ich möchte im Dialogfenster einVerzeichnis auswählen, keine Datei.
Beim normalen XbpFileDialog muss immer eine Datei ausgewählt werden.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Re: XbpFileDialog für Ordner

Beitrag von Manfred »

Du möchtest ein Verzeichnis auswählen um dann mit dem Namen weiterzuarbeiten, oder ein Verzeichnis auswählen um darein zu wechseln?
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!!
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: XbpFileDialog für Ordner

Beitrag von peternmb »

Manfred hat geschrieben:Du möchtest ein Verzeichnis auswählen um dann mit dem Namen weiterzuarbeiten
JA.
Das Standardverzeichnis wird vorgegeben (Hauptpfad+"\Texte")
Der Rückgabewert soll das gewählte Verzeichnis sein - der eigentlich Knackpunkt ist: das soll auch funktionieren, wenn keine Datei ausgewählt wurde.

Bisher habe ich dafür die dll-Funktion "selectfolder" eingesetzt.
Damit gibt es aber offensichtlich unter win7/64 Probleme - beim 2.Aufruf der Funktion stürzt mein Programm mit einem fatal-error den ich nicht zuordnen kann ab.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Re: XbpFileDialog für Ordner

Beitrag von Manfred »

peternmb hat geschrieben: ich möchte ein bestimmtes Verzeichnis vorgeben, und die darin befindlichen txt-Dateien anzeigen lassen.
Naja, ganz ehrlich klingt das aber nicht so. Aber egal, ich werde auch immer falsch verstanden. :lol:
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!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16586
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XbpFileDialog für Ordner

Beitrag von Martin Altmann »

Moin,
peternmb hat geschrieben:Bisher habe ich dafür die dll-Funktion "selectfolder" eingesetzt.
Damit gibt es aber offensichtlich unter win7/64 Probleme - beim 2.Aufruf der Funktion stürzt mein Programm mit einem fatal-error den ich nicht zuordnen kann ab.
könnte es sein, dass Du mehrmals (also auch beim zweiten Aufruf) ein dllload() machst, ohne (nach erfolgtem Aufruf) ein dllunload() zu machen?

Viele Grüße,
Martin
:grommit:
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.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12913
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: XbpFileDialog für Ordner

Beitrag von AUGE_OHR »

peternmb hat geschrieben:ich weiß, es gibt einen Parameter, so dass man keine Datei auswählen muss - nur weiß ich nicht mehr wo der hingehört :?
...
ich möchte ein bestimmtes Verzeichnis vorgeben, und die darin befindlichen txt-Dateien anzeigen lassen.
also das hier

Code: Alles auswählen

   oFileDlg        := XbpFileDialog():new()
   oFileDlg:center := .T.
   oFileDlg:title  := 'Start Ordner auswählen'
   oFileDlg:create()
   cPathName := oFileDlg:saveAs("Select Path, Press Enter or Click SAVE",,.T.)

   IF .NOT. EMPTY(cPathname)
      *** extract path in case user selected a file
      nPosi := RAT("\",cPathName)
      IF nPosi > 0
         cPathName := UPPER(LEFT(cPathName,nPosi))
      ENDIF
   ENDIF
gruss by OHR
Jimmy
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: XbpFileDialog für Ordner

Beitrag von peternmb »

Martin Altmann hat geschrieben:Moin,
peternmb hat geschrieben:Bisher habe ich dafür die dll-Funktion "selectfolder" eingesetzt.
Damit gibt es aber offensichtlich unter win7/64 Probleme - beim 2.Aufruf der Funktion stürzt mein Programm mit einem fatal-error den ich nicht zuordnen kann ab.
könnte es sein, dass Du mehrmals (also auch beim zweiten Aufruf) ein dllload() machst, ohne (nach erfolgtem Aufruf) ein dllunload() zu machen?

Viele Grüße,
Martin
Nein, eigentlich nicht. Die DLL wird nur beim Programmstart einmalig aufgerufen:

Code: Alles auswählen

#pragma library("XppUi2")
//------------------------------------------
// Declaration of the external DLL-Functions
//------------------------------------------
DLLFUNCTION SelectFolder(cCaption,cDefault,@cRet,nHwnd) USING STDCALL FROM "SelectFolder.dll"
Könnte unter Umständen auch mit nicht sichtbaren Ordnern (ProgramData) zusammenhängen.
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: XbpFileDialog für Ordner

Beitrag von peternmb »

AUGE_OHR hat geschrieben:also das hier

Code: Alles auswählen

   oFileDlg        := XbpFileDialog():new()
   oFileDlg:center := .T.
   oFileDlg:title  := 'Start Ordner auswählen'
   oFileDlg:create()
   cPathName := oFileDlg:saveAs("Select Path, Press Enter or Click SAVE",,.T.)

   IF .NOT. EMPTY(cPathname)
      *** extract path in case user selected a file
      nPosi := RAT("\",cPathName)
      IF nPosi > 0
         cPathName := UPPER(LEFT(cPathName,nPosi))
      ENDIF
   ENDIF
JA, ich schaffe es allerdings damit nicht, mein Standardverzeichnis vorzugeben (denn das steht bei mir in der saveAs-KLammer).
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: XbpFileDialog für Ordner

Beitrag von peternmb »

ich schaffe es einfach nicht, den Ordner vorzugeben der geöffnet wird.
Windows gibt immer den zuletzt geöfffneten Ordner vor, was hierbei allerdings nicht sehr sinnvoll ist.
Auch meine Versuche das Verzeichnis mit CurDir() zu setzen haben daran absolut nichts geändert .

Code: Alles auswählen

CurDir(wunschverzeichniss)  // bringt nichts
oFileDlg        := XbpFileDialog():new()
oFileDlg:center := .T.
oFileDlg:title  := 'Standard-Ordner für Text-Dateien festlegen'
oFileDlg:FileFilters := { {"Standard-Ordner für Text-Dateien", "*.TXT"} }
oFileDlg:create()
auswahl := oFileDlg:saveAs("wenn OK, Speichern klicken oder Enter",,.T.)
Kennt vielleicht noch jemand einen Weg?
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Re: XbpFileDialog für Ordner

Beitrag von Rolf »

sieh doch mal in die Hilfe bei XbpFileDialog():saveAs( cDefaultFile <----
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: XbpFileDialog für Ordner

Beitrag von peternmb »

Rolf hat geschrieben:sieh doch mal in die Hilfe bei XbpFileDialog():saveAs( cDefaultFile <----

Code: Alles auswählen

auswahl := oFileDlg:saveAs("wenn OK, Speichern klicken oder Enter",,.T.)
Da ich saveAs anders belegt habe funktioniert das anscheinend nicht mehr so wie in der Hilfe beschrieben.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: XbpFileDialog für Ordner

Beitrag von UliTs »

Hallo Peternmb,

meinst Du vielleicht:

Code: Alles auswählen

oDialog:title  := 'Standard-Ordner für Text-Dateien festlegen'
oDialog:FileFilters := { {"um Verzeichnis auszuwählen <Enter> oder <Speichern>", "*.TXT"} }
oDialog:create()
auswahl:=oDialog:SaveAs( Hauptpfad+"\Texte\<*.TXT" )
:?:
Du schreibst am Anfang, dass du ein Verzeichnis vorgeben willst, und die darin befindlichen Text-Dateien anzeigen möchtest.
Ich meine, dies geschieht mit dem obigen Code :!:
Zwischendurch schreibst Du, Du möchtest nur ein Verzeichnis auswählen. Warum möchtest Du dann die Text-Dateien anzeigen?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12913
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: XbpFileDialog für Ordner

Beitrag von AUGE_OHR »

hi,

im Grunde ist das was du vorhast eben nicht für Ordner gedacht sondern für Files den es beruht ja auf der OPENFILENAME Structure
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

XbpFileDialog():saveAs() verwendet vermutlich die GetSaveFileName API Function
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
welche auch von der SaveFileDialog Componente verwendet wird http://msdn.microsoft.com/en-us/library ... 80%29.aspx

das was du nun "sucht" ist die SHBrowseForFolderA API Function http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Ein Beispiel findest du im Thread http://www.xbaseforum.de/viewtopic.php?f=32&t=860 was Günter Beyes in seinem FolderBrowseSample verwendet
Demonstration der API-Funktion SHBrowseForFolder in Xbase++.
Bap.dll wird nicht benötigt.
es ist die 19th Message von Hubert, Di Nov 28, 2006 8:43 pm und das File heisst FolderBrowse_110.zip
ich habe nun den Link nicht geschrieben denn der führt nur zu
Error 404 - Not found
gruss by OHR
Jimmy
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: XbpFileDialog für Ordner

Beitrag von peternmb »

UliTs hat geschrieben:Hallo Peternmb,
Du schreibst am Anfang, dass du ein Verzeichnis vorgeben willst, und die darin befindlichen Text-Dateien anzeigen möchtest.
Ich meine, dies geschieht mit dem obigen Code :!:
Zwischendurch schreibst Du, Du möchtest nur ein Verzeichnis auswählen. Warum möchtest Du dann die Text-Dateien anzeigen?
Uli
Ich will beides: Der Auswahldialog zur Verzeichnis-Auswahl soll ein vorgegebenes Verzeichnis öffnen und es sollen nur txt-Dateien angezeigt werden. Sicher könnte ich alle Dateien anzeigen lassen, aber da dieses Vezeichnis zum Speichern von txt-Dateien verwendet wird, wäre es übersichtlicher nur diese anzuzeigen.
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: XbpFileDialog für Ordner

Beitrag von peternmb »

AUGE_OHR hat geschrieben: das was du nun "sucht" ist die SHBrowseForFolderA API Function http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Ein Beispiel findest du im Thread http://www.xbaseforum.de/viewtopic.php?f=32&t=860 was Günter Beyes in seinem FolderBrowseSample verwendet
Demonstration der API-Funktion SHBrowseForFolder in Xbase++.
Bap.dll wird nicht benötigt.
JA, das wäre eigentlich genau was ich suche - das Problem dabei ist allerdings, dass z.B. unter Win7 der Ordner ProgramData nicht angezeigt wird, auch wenn dort in der Ordner-Ansicht die Option "ausgeblendete Dateien, Ordner und Laufwerke anzeigen" markiert ist.
Ich habe die Parameter im Quellcode auch schon soweit abgeändert, dass versteckte und System-Dateien angezeigt werden sollten - hilft jedoch nichts.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: XbpFileDialog für Ordner

Beitrag von brandelh »

Hi,

ich verwende diese Funktionen schon sehr lange, die setzen auch das Standardverzeichnis zurück wenn es geändert wurde.

Code: Alles auswählen

*-------------------------------------------------------------
FUNCTION GetFilenameOpen(cTitle,lCenter,cFilter,aFileFilters) // aFileFilters nur Win32
   local oFileDlg, cFile, cAltCurDir, cAltCurDrive, cFilterOhnePfad

   DEFAULT cTitle  TO "Öffnen ..."
   DEFAULT lCenter TO .t.
   DEFAULT cFilter TO "*.*"
   do case
      case "\" $ cFilter
           cFilterOhnePfad := substr(cFilter,rat("\",cFilter)+1 )
      case ":" $ cFilter
           cFilterOhnePfad := substr(cFilter,rat(":",cFilter)+1 )
      otherwise
           cFilterOhnePfad := cFilter
   endcase
   DEFAULT aFileFilters TO     { { cFilterOhnePfad , cFilterOhnePfad } }

   cAltCurDrive  := CurDrive()
   cAltCurDir    := CurDir()

   oFileDlg := XbpFileDialog():new()
   oFileDlg:center      := lCenter
   oFileDlg:title       := cTitle
   oFileDlg:FileFilters := aFileFilters
   oFileDlg:create()

   cFile := oFileDlg:open(cFilter)

   oFileDlg:destroy()

   CurDrive(cAltCurDrive)
   CurDir(cAltCurDrive+":\"+cAltCurDir)

return cFile

*-------------------------------------------------------------
FUNCTION GetFilenameSaveAs(cTitle,lCenter,cFileName,lFileList)
   local oFileDlg, cFile, cAltCurDir, cAltCurDrive

   DEFAULT cTitle    TO "Speichern unter ..."
   DEFAULT lCenter   TO .t.
   DEFAULT lFileList TO .t.
   DEFAULT cFileName TO "*.*"

   cAltCurDrive  := CurDrive()
   cAltCurDir    := CurDir()

   oFileDlg := XbpFileDialog():new()
   oFileDlg:center := lCenter
   oFileDlg:title  := cTitle
   oFileDlg:create()

   cFile := oFileDlg:SaveAs(cFileName,lFileList,lCenter)

   oFileDlg:destroy()
   CurDrive(cAltCurDrive)
   CurDir(cAltCurDrive+":\"+cAltCurDir)

return cFile
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12913
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: XbpFileDialog für Ordner

Beitrag von AUGE_OHR »

peternmb hat geschrieben:JA, das wäre eigentlich genau was ich suche - das Problem dabei ist allerdings, dass z.B. unter Win7 der Ordner ProgramData nicht angezeigt wird, auch wenn dort in der Ordner-Ansicht die Option "ausgeblendete Dateien, Ordner und Laufwerke anzeigen" markiert ist.
hm ... ist "ProgramData" nicht eine "Symbol-link" ?
gruss by OHR
Jimmy
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: XbpFileDialog für Ordner

Beitrag von peternmb »

AUGE_OHR hat geschrieben:hm ... ist "ProgramData" nicht eine "Symbol-link" ?
Nein, eigentlich nicht. Man kann es schön z.B. im Firefox unter Win7 sehen. Der Folderbrowser dort (z.B. zum Festlegen des Download-Verzeichnisses) zeigt das Verzeichnis ProgramData nur an, wenn der Ordner sichtbar gemacht ist.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12913
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: XbpFileDialog für Ordner

Beitrag von AUGE_OHR »

peternmb hat geschrieben:
AUGE_OHR hat geschrieben:hm ... ist "ProgramData" nicht eine "Symbol-link" ?
Nein, eigentlich nicht. Man kann es schön z.B. im Firefox unter Win7 sehen. Der Folderbrowser dort (z.B. zum Festlegen des Download-Verzeichnisses) zeigt das Verzeichnis ProgramData nur an, wenn der Ordner sichtbar gemacht ist.
falls das Problem noch nicht gelöst ist : das sind "spezial" Folder in die man nicht mit "CD" so einfach rein kommt.
siehe mal nach SHGetSpecialFolderPath unter http://msdn.microsoft.com/en-us/library ... 85%29.aspx

bei Pablo findest du ein Sample seiner CLASS TShellFolders. Damit man kann z.b. auf den Desktop des User wechseln.

Code: Alles auswählen

LOCAL cDir := TShellFolders():cDesktopDir

   oFD := XbpFileDialog()...
   cPathName := oFD:SaveAs(cdir+"hier abspeichern",,.T.)

   IF .NOT. EMPTY(cPathname)
      *** extract path in case user selected a file
      nPosi := RAT("\",cPathName)
      IF nPosi > 0
         cPathName := UPPER(LEFT(cPathName,nPosi))
      ENDIF
   ENDIF
RETURN cPathName
gruss by OHR
Jimmy
Antworten