Hallo Leute,
habe da eine Frage, ist es möglich direkt in der GUI einen Ordner auszuwählen, in einer Baumstruktur (siehe Bild)?
Das man die Funktion "FileSelectFolder" so in der Art in die GUI einbindet.
MfG
MehmeX
Hallo Leute,
habe da eine Frage, ist es möglich direkt in der GUI einen Ordner auszuwählen, in einer Baumstruktur (siehe Bild)?
Das man die Funktion "FileSelectFolder" so in der Art in die GUI einbindet.
MfG
MehmeX
Hallo Mehmex,
so was hat Oscar schon mal gemacht, schau dir das _GUICtrlTreeView_CreateDirectory (erstellt ein TreeView mit Verzeichnissen +Dateien) einfach mal an,
mfg (Auto)Bert
Danke für den Link. Gibt es da aber dafür keine Alternative? Denn man kann mit dieser UDF keine Breite sowie Höhe einstellen.
kann man sowas nicht selber machen, so das dieser dann ein Pfad zurück gibt?
Also bei dem Script von Oscar meine ich paßt sicht die Größe sich an der des GUI an.
Ansonsten Oscar einfach mal fragen. Er beißt nicht und wenn bei seiner Frau.
Hallol leute,
ich weiß das Thema liegt einwenig zurück, aber ich möchte gerne ein eigenes FileSelectFolder das in einer GUI integriert ist schreiben. Gibt es dazu vielleicht ein Object oder ähnliches? Ich wäre für jede Hilfe dankbar.
MfG
MehmeX
Hi,
klar! Du kannst dir einen Treeview aufbauen und dann die Ordner und Dateien einlesen. Ist natürlich etwas Aufwand!
Such mal nach Explorer oder Holger Kotsch.
Mega
Evtl. hilft das in der Anlage. Nennst sich ein "Tree-Menü".
Ist zwar noch in Dänisch, aber sollte dennoch verständlich sein. Ansonsten sag bescheid und ich übersetze es noch da wo es nötig ist.
Download: autoit.de/wcf/attachment/4781/
Hmm, ... danke Alina. Gibt es kein "Object" (von Microsoft) womit man es dann mit der ObjCreate() aufrufen kann.
Ich dachte, dass hätten wir per EMail geklärt?
Wenn Du mit meiner Funktion nicht weiter gekommen bist, warum hast Du nicht nochmal gefragt?
Also hier mal ein anderes Beispiel zu meiner Funktion:
#include <WindowsConstants.au3>
#include <GuiTreeView.au3>
#include <GUIConstantsEx.au3>
$hGui = GUICreate('SelectFolder', 800, 600)
$hTreeView = GUICtrlCreateTreeView(10, 10, 380, 580, Default, $WS_EX_STATICEDGE)
GUISetState()
ToolTip('Please wait...')
_GUICtrlTreeView_CreateDirectory($hTreeView, @UserProfileDir)
ToolTip('')
Do
Until GUIGetMsg() = -3
;===============================================================================
; Function Name: _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles)
; Description:: erstellt ein TreeView mit Verzeichnissen (+Dateien)
; Parameter(s): $hTreeView = ControlID/Handle des TreeViews
; $sPath = Verzeichnispfad, der dargestellt werden soll
; $bFiles = True = auch Dateien anzeigen, False = nur Verzeichnisse
; Requirement(s): #include<GuiTreeView.au3>
; Return Value(s): Array mit Anzahl der Verzeichnisse=[0] und Dateien=[1]
; 0 und @error = 1, wenn der Pfad nicht existiert bzw. kein Verzeichnis ist
; 0 und @error = 2, wenn das FileSystemObject nicht erstellt werden konnte
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles = False)
Local $hFileItem, $FolderColor = 0x0000FF, $Folder, $aCount[2] = [0, 0]
If Not StringInStr(FileGetAttrib($sPath), 'D') Then Return SetError(1, 0, 0)
$sPath = FileGetLongName($sPath)
Local $oFSO = ObjCreate('Scripting.FileSystemObject')
If @error Then Return SetError(2, 0, 0)
_GUICtrlTreeView_BeginUpdate($hTreeView)
_GUICtrlTreeView_DeleteAll(GUICtrlGetHandle($hTreeView))
Local $hTreeViewItem = GUICtrlCreateTreeViewItem($sPath, $hTreeView)
GUICtrlSetColor(-1, $FolderColor)
_GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 0)
$Folder = $oFSO.GetFolder($sPath)
_CreateDirectoryRecursive($hTreeView, $Folder, $hTreeViewItem, $bFiles, $aCount)
If $bFiles Then
For $Files In $Folder.Files
$hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hTreeViewItem)
$aCount[1] += 1
Next
EndIf
_GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 3, 2)
_GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 110, 4)
_GUICtrlTreeView_EndUpdate($hTreeView)
GUICtrlSetState($hTreeViewItem, $GUI_EXPAND)
$oFSO = ''
Return $aCount
EndFunc ;==>_GUICtrlTreeView_CreateDirectory
Func _CreateDirectoryRecursive($hTreeView, $Folder, $ItemOld, $bFiles, ByRef $aCount)
Local $hFolderItem, $hFileItem, $FolderColor = 0x0000FF
For $Subfolder In $Folder.SubFolders
$hFolderItem = GUICtrlCreateTreeViewItem($Subfolder.Name, $ItemOld)
GUICtrlSetColor(-1, $FolderColor)
_GUICtrlTreeView_SetIcon($hTreeView, $hFolderItem, 'shell32.dll', 3, 2)
_GUICtrlTreeView_SetIcon($hTreeView, $hFolderItem, 'shell32.dll', 110, 4)
$aCount[0] += 1
_CreateDirectoryRecursive($hTreeView, $Subfolder, $hFolderItem, $bFiles, $aCount)
If $bFiles Then
For $Files In $Subfolder.Files
$hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hFolderItem)
$aCount[1] += 1
Next
EndIf
Next
EndFunc ;==>_CreateDirectoryRecursive
Ich hatte gedacht, dass es vielleicht eine Funktion bzw. ein Control von Microsoft gibt, mit dem ich das ganze dann mit ObjCreate() benutzen kann.
Bei deiner Funktion hatte ich nur einen Einwand und zwar das die TreeViewItems "Checkboxen" hatten. Nicht das du mich jetzt falsch verstehst Oscar . Aber so wie ich das jetzt sehe, ist diese Funktion einwenig anderst. Besser. Diese Funktion werde ich jetzt von dir verwenden, danke.
Eine Frage noch: Wie bekomme ich den Pfad des aktuell markierten Item zurück?
Hallo Mehmex,
schau die in der Hilfe folgendes an:
Zitat_GUICtrlTreeView_GetTree
--------------------------------------------------------------------------------Ermittelt den kompletten Pfad bis hin zum gewünschten Item
#Include <GuiTreeView.au3>
_GUICtrlTreeView_GetTree($hWnd, $hItem)
das liefert dein gewünschtes Ergebnis , wenn du vorher noch das Separatorzeichen auf "\" einstellst hast du die korrekte Pfadangabe
mfg (Auto)Bert
SUPER, danke.
Bei deiner Funktion hatte ich nur einen Einwand und zwar das die TreeViewItems "Checkboxen" hatten. Nicht das du mich jetzt falsch verstehst Oscar . Aber so wie ich das jetzt sehe, ist diese Funktion einwenig anderst. Besser. Diese Funktion werde ich jetzt von dir verwenden, danke.
Die Funktion ist immer noch die Gleiche, nur das Beispiel dazu ist anders.
Du hattest ja noch geschrieben, dass Du ein Resizing haben willst. Bekommst Du das hin? Ansonsten frag ruhig.