Seite 1 von 1

Alternative zu XbpFileDialog

Verfasst: Mo, 06. Nov 2017 9:06
von vorti
Hallo,

gibt es eine Möglichkeit mir Textdateien aus einen Ordner anzeigen zu lassen, ohne die ganzen Optionen im XbpFileDialog (also nur ein Fenster mit den Dateien, ein Suchfeld und der Bestätigen/Abbrechen Button).

Re: Alternative zu XbpFileDialog

Verfasst: Mo, 06. Nov 2017 9:55
von AUGE_OHR
vorti hat geschrieben: Mo, 06. Nov 2017 9:06...ohne die ganzen Optionen im XbpFileDialog
XbpFileDialog() ist nun mal der Wrapper für den "Windows Common Dialog".

Das "Problem" bei XbpFileDialog() ist das es "im eigenen" Windows Thread Fenster läuft und darauf hat man aus Xbase++ keinen Zugriff :(

das was du haben willst kann man sich doch, mittels Formdesigner (XppFD.EXE), selbst zusammen stellen.
1 x XbpListbox() und 2 x XbpPushbutton() sowie ein XbpSLE() und dann CLASS Code generieren und schon hast du dein eigenes Fenster :-)

nun musst du "nur" noch die Listbox() füllen und die beiden Button "o:Activate" Callback Slots bestücken mit der gewünschten Aktion. wenn du damit dann noch Probleme hast : weiter Fragen stellen ... wir werden antworten ;-)

Re: Alternative zu XbpFileDialog

Verfasst: Di, 07. Nov 2017 8:59
von vorti
Wenn mir jemand veraten könnte wie ich die Listbox fülle, das wäre super. Ich weiß nicht wie ich die einzelnen Dateien ansprechen soll.

Re: Alternative zu XbpFileDialog

Verfasst: Di, 07. Nov 2017 9:23
von Tom
:AddItem() befüllt das/ein Listbox-Array. Das ginge auch mit einem XbpBrowse/XbpQuickbrowse, das ein Array direkt als Datenquelle verwendet, was den Vorteil hätte, dass man direkt auf die Rückgabe von Directory() zugreifen könnte, während die Listbox nur eindimensional arbeitet. Möglicherweise kannst Du beim Versuch, das umzusetzen, eine Menge Sachen lernen, aber vielleicht bist Du mit dem XbpFileDialog besser dabei.

Re: Alternative zu XbpFileDialog

Verfasst: Di, 07. Nov 2017 12:04
von vorti
Bevor ich gleich in den Bildschirm schlage, frag ich nochmal nach.
Mein "directory" Befehl funktioniert leider nicht wie gewünscht. Wenn ich das Array manuell fülle, funktioniert es.

Code: Alles auswählen

LOCAL i := 0,;
      aTxtFiles := directory("C:\Users\Public\Documents\*"),;
      nLen := Len( aTxtFiles )

DO WHILE ++i <= nLen
         oListBox:addItem( aTxtFiles[i] )
ENDDO

RETURN oListBox
Ich habe jetzt so ziemlich alle Varianten die ich zu directory gefunden habe ausprobiert, aber bekomme immer ne Fehlermeldung das der Parameter von "addItem" nicht passt. "directory" sollte mir doch nen String ins array legen oder versteh ich da was falsch?

Re: Alternative zu XbpFileDialog

Verfasst: Di, 07. Nov 2017 12:14
von Tom
Directory() liefert ein zweidimensionales Array. Der Dateiname steht an Stelle 1, Konstante "F_NAME" aus DIRECTRY.CH.

Entweder:

Code: Alles auswählen

oListBox:addItem( aTxtFiles[i,1] )
Oder:

Code: Alles auswählen

#include 'directry.ch'
oListBox:addItem( aTxtFiles[i,F_NAME] )

Re: Alternative zu XbpFileDialog

Verfasst: Di, 07. Nov 2017 22:18
von AUGE_OHR
wer Directory() mit XbpQuickbrowse() verwenden will kann das Alaska Demo

Code: Alles auswählen

..\SOURCE\samples\basics\QBrowse\QBROWSE1.prg
nehmen.

---

wie schon gesagt kann man bei XbpFileDialog() nicht viel "einstellen" weil es die SHBrowseForFolderA API verwendet
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
viewtopic.php?f=23&t=8227

zu XbpFileDialog() noch dieser Thread
viewtopic.php?f=32&t=9981
was mich wieder zur Listbox() bringt

für eine Listbox() gäbe es noch den Windows API "Trick" um eine Listbox "on-fly" zu füllen.

Code: Alles auswählen

   oListBox := XbpListbox():new( ... )
   ...

   // statt einer FOR / NEXT
   //
   // FOR i := 1 TO 100
   //    oListBox:additem(LTRIM(STR(i)))
   // NEXT

   PimpMyXb(oListBox)

PROCEDURE PimpMyXb(oListBox,cMask)
LOCAL hWnd
LOCAL iAttr

DEFAULT cMask TO "*.*"

   hWnd  := oListBox:getHWND()
   iAttr := DDL_READWRITE + DDL_DIRECTORY
   SendMessageA( hWnd, LB_DIR, iAttr , cMask )

RETURN
damit kann man bis zu 32Kb "im Stück" (schnell) in eine Listbox schieben.