Discussion:
Webbrowser Control als Explorer, Zugriff auf Ansicht/Dateien...
(zu alt für eine Antwort)
Heinz-Josef Bomanns
2007-03-03 10:29:47 UTC
Permalink
Moin,

in einer Form habe ich ein Webbrowser Control, das z.B. per 'Navigate
"C:\Test"' ein paar Dateien anzeigt. Nun möchte ich

1. Die Ansicht im Control umschalten auf z.B. "Miniaturansicht" oder
"Details".

2. Entweder auslesen können, welche Datei der User markiert hat oder
auf ein "Click"-Ereignis reagieren können.

Habe schon diverse Sachen ausprobiert, aber es scheitert wohl daran,
das "Document" in diesem Fall vom Typ "IShellFolderViewDual2" ist -
nur finde ich dazu kein passendes Objekt, damit ich z.B. per "Set
objSVFD2 = objIE.Document" und vielleicht "objSVFD2.View = 5" oder
"strFile = objSVFD2.SelectedItem" oder so zugreifen kann. Hat schonmal
jemand mit "IShellFolderViewDual2" gearbeitet oder fällt
irgendjemandem irgendwas dazu ein? TIA!
--
Bis dann...
...Bomi
Bei Replies via EMail bitte Unterstriche (_) löschen - Danke!
Alexander Mueller
2007-03-03 10:53:51 UTC
Permalink
Post by Heinz-Josef Bomanns
Moin,
in einer Form habe ich ein Webbrowser Control, das z.B. per 'Navigate
"C:\Test"' ein paar Dateien anzeigt. Nun möchte ich
1. Die Ansicht im Control umschalten auf z.B. "Miniaturansicht" oder
"Details".
2. Entweder auslesen können, welche Datei der User markiert hat oder
auf ein "Click"-Ereignis reagieren können.
Habe schon diverse Sachen ausprobiert, aber es scheitert wohl daran,
das "Document" in diesem Fall vom Typ "IShellFolderViewDual2" ist -
nur finde ich dazu kein passendes Objekt, damit ich z.B. per "Set
objSVFD2 = objIE.Document" und vielleicht "objSVFD2.View = 5" oder
"strFile = objSVFD2.SelectedItem" oder so zugreifen kann. Hat schonmal
jemand mit "IShellFolderViewDual2" gearbeitet oder fällt
irgendjemandem irgendwas dazu ein? TIA!
Du bist auf dem richtigen Weg.
Den Ansichtstyp kannst Du über die Prop CurrentViewMode einstellen.
Selektierte und Fokussierte Objekte erhältst Du über die Props
SelectedItems und FocusedItem. SelectedItems gibt eine FolderItems-Collection zurück
- es können ja mehrere Dateien/Objekte selektiert sein - die
einzelnen Items darin sind vom Typ ShellFolderItem,
FocusedItem ist auch ein ShellFolderItem.

Btw Du kannst auch per Code Dateien selektieren, siehe Methode
SelectItem

http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/objects/objects.asp

Ungetestet:

Dim view As IShellFolderViewDual2
...
Navigate <ordner>
...
Set view = wb.Document
view.CurrentViewMode = 5
If Not view.FocusedItem Is Nothing Then
Debug.Print "Fokussiert: " & view.FocusedItem.Self.Path
End If
If Not view.SelectedItems Is Nothing Then
Dim Item As Object
For Each Item in view.SelectedItems
Debug.Print "Selektiert: " & Item.Self.Path
Next
End If


MfG,
Alex
Heinz-Josef Bomanns
2007-03-03 12:05:59 UTC
Permalink
Hi Alex,
Post by Alexander Mueller
Du bist auf dem richtigen Weg
[...]
Dim view As IShellFolderViewDual2
"IShellFolderViewDual2" wird über Projekt/Verweise aus "Shell Controls
and Automation" eingebunden, das in VB leider "CurrViewMode" nicht
unterstützt - wenn man einfach über'n "Object" geht, klappt es:

Dim View as Object

With Me.wbCtrl
.Navigate "C:\Windows"
While .ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
Set objView = Me.wbCtrl.Document
objView.CurrentViewMode = 5
End With


Ein "Click"-Event gibt es nicht, dafür ein "SelectionChanged":

Dim WithEvents wbView As ShellFolderView

Set wbView = Me.wbCtrl.Document

Private Sub wbView_SelectionChanged()
Dim X$, I&
Dim objFile As Object

X$ = ""
For Each objFile In wbView.SelectedItems
X$ = X$ & objFile.Path & vbCrLf
Next
MsgBox "SelectionChanged? " & vbCrLf & vbCrLf & X$

End Sub


Danke nochmal für Deine Hinweise!

Vergnügten Sonntag noch ,-)
--
Bis dann...
...Bomi
Post by Alexander Mueller
Bei Replies via EMail bitte Unterstriche (_) löschen - Danke!
Alexander Mueller
2007-03-03 14:05:16 UTC
Permalink
Post by Heinz-Josef Bomanns
Hi Alex,
Post by Alexander Mueller
Du bist auf dem richtigen Weg
[...]
Dim view As IShellFolderViewDual2
"IShellFolderViewDual2" wird über Projekt/Verweise aus "Shell Controls
and Automation" eingebunden, das in VB leider "CurrViewMode" nicht
Wusste aus der Erinnerung dass da irgendein Problem lauert ..
Post by Heinz-Josef Bomanns
Dim View as Object
With Me.wbCtrl
.Navigate "C:\Windows"
While .ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
Set objView = Me.wbCtrl.Document
objView.CurrentViewMode = 5
End With
Ja stimmt,

WithEvents und EarlyBinding geht aber wenn man statt IShellFolderViewDual2 oder
ShellFolderView WebFolderViewContents als Typ verwendet. Das ist eine
normalerweise ausgeblendete Schnittstelle im Objektkatalog.


Dim WithEvents wbView as WebViewFolderContents

With Me.wbCtrl
.Navigate "C:\Windows"
While .ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
Set wbView = Me.wbCtrl.Document
wbView.CurrentViewMode = 5
End With
Kannte ich noch gar nicht, gut um auf Userinteraktion zu
reagieren.
Post by Heinz-Josef Bomanns
Danke nochmal für Deine Hinweise!
Vergnügten Sonntag noch ,-)
Ebenso,

MfG,
Alex
Heinz-Josef Bomanns
2007-03-04 01:01:29 UTC
Permalink
Hi Alex,
Post by Alexander Mueller
WithEvents und EarlyBinding geht aber wenn man statt IShellFolderViewDual2 oder
ShellFolderView WebFolderViewContents als Typ verwendet. Das ist eine
normalerweise ausgeblendete Schnittstelle im Objektkatalog.
Ahja, Danke für die Ergänzung, erleichtert die Fummelei nochmals ein
wenig ,-)
--
Bis dann...
...Bomi
Post by Alexander Mueller
Bei Replies via EMail bitte Unterstriche (_) löschen - Danke!
Heinz-Josef Bomanns
2007-03-04 16:48:49 UTC
Permalink
Hi Alex,

ich nochmal - Erfolgsmeldung ,-)
Post by Alexander Mueller
Btw Du kannst auch per Code Dateien selektieren, siehe Methode
SelectItem
Das habe ich jetzt mal wie folgt eingebastelt:

Dim objView As WebViewFolderContents, objItem As Object

X$= "1234.bmp"
Set objView = Me.wbCtrl.Document
Set objItem = objView.Folder.ParseName(X$)
'1 Select the item
'4 Deselect all but the specified item.
'8 Ensure the item is displayed in the view.
'16 Give the item the focus.
Me.wbCtrl.SetFocus
objView.SelectItem objItem, 1 or 4 Or 8 Or 16
Set objView = Nothing

Just for the records...
--
Bis dann...
...Bomi
Post by Alexander Mueller
Bei Replies via EMail bitte Unterstriche (_) löschen - Danke!
Loading...