Hallo,
wie kann man verhindern, dass die FileListBox nicht sortiert, oder aber das Ganze nach Datum sortiert ist.
Danke.
Gruß
Gunter
Hallo,
wie kann man verhindern, dass die FileListBox nicht sortiert, oder aber das Ganze nach Datum sortiert ist.
Danke.
Gruß
Gunter
Moi, Gunter,
wie kann man verhindern, dass die FileListBox nicht sortiert,
oder aber das Ganze nach Datum sortiert ist.
das Fenster, das da aufgeht, wird von der Comdlg32.ocx gesteuert. Was dann per rechte Maustaste > Ansicht > Symbole anordnen > {Name | Datum …} aufgerufen wird, weiß ich leider nicht - vermutlich wieder so ein Modul aus der Windows API, das kein Aas kennt.
Nach dem Weg, hier eine Sortierung vorzugeben, suche ich schon länger.
Gruß Ralf
Hallo Gunter,
kurz und bündig. Mit dem Werkzeug (FileListBox) von VB aus garnicht!
Aber es kostet rel. muehen sich selbst ein Steuerelement zu bauen, was das alles mit sich bringt. Diese koennte man dann sogar Alternativ noch erweitern
MfG Alex
Hallo Ralf,
sprach Gunter nicht von VB ? Das was du beschrieben hast, ist das Verhalten im Explorer und das hat wiederrum nichts mit Comdlg32.ocx am Hut. Das ist selbst progammiert, was ja kein grosser Aufwand ist!
Nach dem Weg, hier eine Sortierung vorzugeben, suche ich schon
länger.
Dazu muesstest du schon selbst Hand anlegen. Am besten gleich ein OCX basteln und gut ist. Der Aufwand sollte sich in Grenzen halten
MfG Alex
Hi Alex,
Du hast vergessen, eine schöne Beschreibung zu verlinken, wie man eigene Steuerelemente schreibt.
[FAQ:2683]
Wozu haben wir sonst unsere FAQ?
Gruß Rainer
Hallo Ralf,
[FAQ:2683]
dazu 2 Fragen (ich nehme an, das ist Dein Beritt):
Dert Code? Der ist von Alex.
- Wozu braucht es die Leerzeilen im Code?
- Bei mir bricht der Code nach 2/3 einfach ab.
Das sind beides Bugs, die die neue Oberfläche von w-w-w mit sich gebracht haben muss, habe ich Beides noch nicht bemerkt. Vor dem Rebrush war das in Ordnung.
Danke für den Hinweis, ich werde den fehler gleich ans Team melden.
Gruß Rainer
Hallo Alex,
habe mir eine Listbox gebastelt in die ich die Dateien einlese. Damit kann ich ja machen was ich will. Ist halt mehr Aufwand.
An ein OCX wage ich mich im Augenblick nicht heran.
Gruß
Gunter
Hallo Ralf,
Dazu muesstest du schon selbst Hand anlegen. Am besten gleich
ein OCX basteln und gut ist. Der Aufwand sollte sich in
Grenzen haltenMfG Alex
Moin Ralf,
Und noch eine Anmerkung: Die Codestrecke als Anleitung für das
Erstellen einer OCX zu verkaufen finde ich ganz schön mutig.
Gefühlte 700 Zeilen Code, keine Zeile Kommentar, kein Wort,
was da überhaupt passiert - bist Du sicher, dass das nicht
eher der Abschreckung dient?
700 Zeilen reichen da nicht. Du solltest aber bedenken was das Steuerelement alles macht. Wenn man sich ein wenig mit Objecten auskennt und API Aufrufen und das Steuerelement im Step by Step Modus durchlaufen laesst, so wird schnell ersichtlich wie alles funktioniert.
Die FAQ ruehrte eigentlich daher, das ich mal ein Project entwickelt habe, was viele Steuerelemente beinhaltet hat. Irgendwie waren wir gerade bei dem Thema gewesen und dann habe ich mal das eine Steuerelement aus dem Project rauskopiert. Da ich es entworfen habe und es läuft, brauche ich auch keine Kommentare dazu Nachtraeglich noch Kommis hinzufügen, bin ich ehrlich gesagt zu faul.
Aber wenn einer Fragen dazu hat oder im Allgemeinen wie mein OCX erstellt, so kann er sie hier gerne stellen und bekommt dann sicherlich auch eine passende Antwort dazu
Es hört sich schwer an. Aber das erstellen eines OCX ist rel. simple und ist meinstens auch nur aus anderen Steuerelementen zusammengesetzt
MfG Alex
MfG Alex
Hallo Gunter,
siehst wenn du nun schon den Source hast, fürs sortieren etc, so kannst du diesen ja kopieren in ein Usercontrol. Die benötigten Objecte draufziehen und volla, fertig ist der Husten Ok, man muss noch die Einstellungen speichern, via Propbag
Willst du nur die Files sehen oder auch das Datum etc. ? Fals letzteres würde sich eine ListView anbieten
MfG Alex
PS: Nach welchen Kriterien kannst du denn alles sortieren ?
Hallo Alex,
sortiere im Augenblick nur nach Datum, mehr brauche ich für den Zweck nicht.
Gruß
Gunter
PS: Nach welchen Kriterien kannst du denn alles sortieren ?
Hallo Gunter,
mal auf die schnelle ein Grundgeruest, was fast ihren Dienst macht
Erstelle dazu -> Neu Project -> Active X Steuerelement.
Auf das Usercontrol packe ne Listbox (List1) und setze ein verweis auf Microsoft Scripting Runtime
Option Explicit
Private Type FileInformation 'Die Daten ermitteln wir alle
Filename As String
Attribute As Long
Created As Date
Modified As Date
LastAccessed As Date
Extension As String
End Type
Private MyPattern As String
Private MySorted As Boolean
Private MyPath As String
Private MyMultiSelect As Boolean
Private MyToolTip As String
Private MyArchive As Boolean
Private MyNormal As Boolean
Private MySystem As Boolean
Private MyReadOnly As Boolean
Private mySortKriterium As Byte
Private FSO As New FileSystemObject
Private oFolder As Folder
Private oFile As File
'Eigenschaften
'Property Get = Gibt die Eigenschaft zurueck!
'Property Let = Setzt eine Eigenschaft
'Soll Eigenschaft nur gesetzt werden koennen, so einfach die Property Get löschen
'Soll Eigenschaft nur gelesen werden koennen, so einfach die Property Let löschen
Public Property Get Pattern() As String
Pattern = MyPattern
End Property
Public Property Let Pattern(ByVal vNewValue As String)
If InStr(1, vNewValue, ".", vbTextCompare) = 0 Then Exit Property
MyPattern = vNewValue
Call GetData
End Property
Public Property Get Sorted() As Boolean
Sorted = MySorted
End Property
Public Property Let Sorted(ByVal vNewValue As Boolean)
MySorted = vNewValue
Call GetData
End Property
Public Property Get Path() As String
Path = MyPath
End Property
Public Property Let Path(ByVal vNewValue As String)
If Dir(vNewValue) = "" Then Exit Property
MyPath = vNewValue
Set oFolder = FSO.GetFolder(vNewValue)
Call GetData
End Property
Public Property Get MultiSelect() As Boolean
MultiSelect = MyMultiSelect
End Property
Public Property Let MultiSelect(ByVal vNewValue As Boolean)
MyMultiSelect = vNewValue
End Property
Public Property Get ToolTip() As String
ToolTip = MyToolTip
End Property
Public Property Let ToolTip(ByVal vNewValue As String)
MyToolTip = vNewValue
List1.ToolTipText = MyToolTip
End Property
Public Property Get Archive() As Boolean
Archive = MyArchive
End Property
Public Property Let Archive(ByVal vNewValue As Boolean)
MyArchive = vNewValue
Call GetData
End Property
Public Property Get Normal() As Boolean
Normal = MyNormal
End Property
Public Property Let Normal(ByVal vNewValue As Boolean)
MyNormal = vNewValue
Call GetData
End Property
Public Property Get System() As Boolean
System = MySystem
End Property
Public Property Let System(ByVal vNewValue As Boolean)
System = vNewValue
Call GetData
End Property
Public Property Get ReadOnly() As Boolean
ReadOnly = MyReadOnly
End Property
Public Property Let ReadOnly(ByVal vNewValue As Boolean)
MyReadOnly = vNewValue
Call GetData
End Property
Public Property Get SortKriterium() As Byte
SortKriterium = mySortKriterium
End Property
Public Property Let SortKriterium(ByVal vNewValue As Byte)
mySortKriterium = vNewValue
Call GetData
End Property
Private Sub List1\_Click()
Dim Pos As Long
Static Flag As Boolean
If Flag Then Exit Sub
Flag = True
Pos = List1.ListIndex
Call SetMultiselect
List1.ListIndex = Pos
List1.Selected(Pos) = True
Flag = Not (Flag)
End Sub
'UserControl Routinen
Private Sub UserControl\_Initialize() 'Initialisierung
MyPattern = "\*.\*"
MySorted = False
MyPath = App.Path
MyMultiSelect = False
MyToolTip = "Vorhanden Dateien, entsprechend der Pattern"
MyArchive = True
MyNormal = True
MySystem = False
MyReadOnly = True
mySortKriterium = 0
End Sub
Private Sub UserControl\_ReadProperties(PropBag As PropertyBag) 'Eigenschaften lesen
With PropBag
.ReadProperty Pattern, "\*.\*"
.ReadProperty Path, App.Path
.ReadProperty MultiSelect, False
.ReadProperty ToolTip, "Vorhanden Dateien, entsprechend der Pattern"
.ReadProperty Archive, True
.ReadProperty Normal, True
.ReadProperty System, False
.ReadProperty Sorted, False
.ReadProperty ReadOnly, True
.ReadProperty SortKriterium, 0
End With
End Sub
Private Sub UserControl\_Resize() ' Das Usercontrol aendert seine Grösse!
On Error Resume Next
List1.Move 0, 0, UserControl.Width, UserControl.Height
End Sub
Private Sub UserControl\_WriteProperties(PropBag As PropertyBag) 'Eigenschaften speichern
With PropBag
.WriteProperty Pattern, MyPattern, "\*.\*"
.WriteProperty Path, MyPath, App.Path
.WriteProperty MultiSelect, MyMultiSelect, False
.WriteProperty ToolTip, MyToolTip, "Vorhanden Dateien, entsprechend
der Pattern"
.WriteProperty Archive, MyArchive, True
.WriteProperty Normal, MyNormal, True
.WriteProperty System, MySystem, False
.WriteProperty Sorted, MySorted, False
.WriteProperty ReadOnly, MyReadOnly, True
.WriteProperty SortKriterium, mySortKriterium, 0
End With
End Sub
'Allgemeine Function
Private Function GetData() 'liest Daten in die Liste ein
Dim MyData() As FileInformation
Dim Count As Boolean
Dim I As Long
Count = 0
List1.Clear
For Each oFile In oFolder.Files
If Not Count Then
ReDim MyData(0)
Count = Not (Count)
Else
ReDim Preserve MyData(UBound(MyData) + 1)
End If
MyData(UBound(MyData)).Attribute = oFile.Attributes
MyData(UBound(MyData)).Filename = oFile.Name
MyData(UBound(MyData)).Created = oFile.DateCreated
MyData(UBound(MyData)).Modified = oFile.DateLastModified
MyData(UBound(MyData)).LastAccessed = oFile.DateLastAccessed
MyData(UBound(MyData)).Extension = FSO.GetExtensionName(oFile)
Next
Call FilterData(MyData)
Call SortArray(MyData)
For I = LBound(MyData) To UBound(MyData)
List1.AddItem MyData(I).Filename
Next I
End Function
Private Sub SetMultiselect() 'je nach Einstellung wird selektiert oder nicht
Dim I As Long
If List1.ListCount = 0 Then Exit Sub
If Not (MyMultiSelect) Then
For I = 0 To List1.ListCount - 1
List1.Selected(I) = False
Next I
End If
End Sub
Private Sub SortArray(vret() As FileInformation) 'Wir sortieren
'hier kannst du dein Array sortieren
'Daten stehen im Array vret. Wenn du das veraenderst, so hast du die Aenderung drinnen
'Nicht benötigte Daten werfe aus dem Array heraus :wink:
If Not MySorted Then Exit Sub
Select Case mySortKriterium
'Hier sortieren. Anhand von mysortkriterium kannst du festlegen nach was sortiert werden soll!
Case 0 'bsp. Filename
Case 1 'bsp. Erstellungsdatum
Case 2 'bsp. Zuletzt modifiziert etc ...
End Select
End Sub
Private Sub FilterData(vret() As FileInformation) 'Wir filtern die Daten anhand der Einstellungen
'Hier kannst du dein Array Filtern ... Dateiextension ( \*.\*) , vbarchiv etc.
'Pattern kannst du ueber mypattern abfragen
'Daten stehen im Array vret. Wenn du das veraenderst, so hast du die Aenderung drinnen
'Nicht benötigte Daten werfe aus dem Array heraus :wink:
End Sub
'Methoden
Public Function GetFilename(Index) As String
If Index \> List1.ListCount Then Exit Sub
GetFilename = List1.List(Index)
End Function
Public Function GetIndex() As Long 'erstes selectiertes Element
GetIndex = List1.ListIndex
End Function
Public Function GetAllSelectedFiles() as String
Dim vRet as string
Dim I as Long
If List1.ListCount=0 then exit function
For I=0 to List1.ListCount-1
if List1.Selected(i) then vret=vret & List1.List(i) & "|"
Next I
GetAllSelectedFiles=Left(vret,Len(vret)-1)
End Function
Wie du siehst ist es eigentlich nicht schwer
Ist ungetestet, aber muesste eigentlich functionieren, wenn du noch die 2 Function fertigstellst
Mfg Alex