ATWW-Fuchs
Level-1
- Beiträge
- 6
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo zusammen,
ich verwende WinCC V7.0 SP3 UPD1 unter Windows XP (auf Notebook in VM) und ich habe in einem Bild ein Eingabefeld. Dort kann man einen Pfadnamen eintragen. Leider ist das bei langen Pfadnamen sehr unkomfortabel und außerdem muss man sein gewünschtes Verzeichnis ganz genau kennen.
Ich hätte nun gerne vor dem Eingabefeld einen Button. Durch drücken soll sich dann ein Explorer-Fenster öffnen. Darin könnte man sich dann per Maus bis zum Zielverzeichnis durchklicken und den Pfadnamen mit einem weiteren Mausklick übernehmen. Vorteil: Man muss nicht 100% genau wissen wo es liegt und man muss nicht mehr den langen Pfadnamen eintragen. Wobei letzteres Optional noch möglich sein soll. Jetzt habe ich von jemand folgende Funktion bekommen die das angeblich erledigen soll.
Function SelectFile()' File Browser via HTA
' Features: Works in Windows Vista and up (Should also work in XP).
' Fairly fast.
' All native code/controls (No 3rd party DLL/ XP DLL).
' Caveats: Cannot define default starting folder.
' Uses last folder used with MSHTA.EXE stored in Binary in [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32].
' Dialog title says "Choose file to upload".
Dim objExec, strMSHTA, wshShell
SelectFile = ""
'For use in "plain" VBScript only:
strMSHTA = "mshta.exe ""about:<input type=file id=FILE>" _
& "<script>FILE.click();new ActiveXObject('Scripting.FileSystemObject')" _
& ".GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>"""
Set wshShell = CreateObject("WScript.Shell")
Set objExec = wshShell.Exec(strMSHTA)
SelectFile = objExec.StdOut.ReadLine( )
Set objExec = Nothing
Set wshShell = Nothing
End Function
In meinem Bild habe ich einen Button eingfügt und unter Ereignis/Maus folgendes eingetragen:
Sub OnClick(ByVal Item)
'Aufruf von einem Button aus
Dim strFile
strFile = SelectFile()
If strFile <> "" Then
'"FilePath" ist eine WinCC-Variable vom Typ Text
HMIRuntime.Tags("FilePath").Write strFile
End If
End Sub
Beim speichern kommt erstmal keine Fehlermeldung. Wenn ich die Runtime starte, kommt aber nun statt dem Bild ein gelbes Warndreieck mit Ausrufezeichen drin. Wenn ich die Zeile mit dem Aufruf der Funktion im Buttonereignis auskommentiere dann wird mir wieder das Bild korrekt angezeigt, aber es funktioniert nichts. Ich hätte da als Laie mit gefährlichem Halbwissen mal folgende Fragen:
1. Warum passiert das so? Das Bild dürfte doch eigentlich erst dann abkacken (gelbes Warndreieck) wenn ich auf den Button klicke?
2. Es hängt ja eindeutig mit der Funktion SelectFile() zusammen. Ist da ein Fehler drin.
3. Wird die Funktion evtl. garnicht gefunden. In welchem Verzeichnis müsste die denn liegen. (Momentan im VBS-Editor unter Standardmodule)
4. Wenn das alles wie gewünscht funktionieren würde, könnte ich die Variable FilePath auch dem Eingabefeld zuordnen um so auch weiterhin die manuelle Eingabe zu ermöglichen?
5. Ist das womöglich alles Unsinn und funktioniert so garnicht? Hat jemand einen besseren Vorschlag zur Lösung.
Ja, ja ich weiß, eine ganze Menge komplizierter Fragen. Ihr würdet mir allerdings sehr helfen wenn ich das hinbekommen würde. Daher vorab schon mal besten Dank für die Bemühungen.
Grüße
Uli
ich verwende WinCC V7.0 SP3 UPD1 unter Windows XP (auf Notebook in VM) und ich habe in einem Bild ein Eingabefeld. Dort kann man einen Pfadnamen eintragen. Leider ist das bei langen Pfadnamen sehr unkomfortabel und außerdem muss man sein gewünschtes Verzeichnis ganz genau kennen.
Ich hätte nun gerne vor dem Eingabefeld einen Button. Durch drücken soll sich dann ein Explorer-Fenster öffnen. Darin könnte man sich dann per Maus bis zum Zielverzeichnis durchklicken und den Pfadnamen mit einem weiteren Mausklick übernehmen. Vorteil: Man muss nicht 100% genau wissen wo es liegt und man muss nicht mehr den langen Pfadnamen eintragen. Wobei letzteres Optional noch möglich sein soll. Jetzt habe ich von jemand folgende Funktion bekommen die das angeblich erledigen soll.
Function SelectFile()' File Browser via HTA
' Features: Works in Windows Vista and up (Should also work in XP).
' Fairly fast.
' All native code/controls (No 3rd party DLL/ XP DLL).
' Caveats: Cannot define default starting folder.
' Uses last folder used with MSHTA.EXE stored in Binary in [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32].
' Dialog title says "Choose file to upload".
Dim objExec, strMSHTA, wshShell
SelectFile = ""
'For use in "plain" VBScript only:
strMSHTA = "mshta.exe ""about:<input type=file id=FILE>" _
& "<script>FILE.click();new ActiveXObject('Scripting.FileSystemObject')" _
& ".GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>"""
Set wshShell = CreateObject("WScript.Shell")
Set objExec = wshShell.Exec(strMSHTA)
SelectFile = objExec.StdOut.ReadLine( )
Set objExec = Nothing
Set wshShell = Nothing
End Function
In meinem Bild habe ich einen Button eingfügt und unter Ereignis/Maus folgendes eingetragen:
Sub OnClick(ByVal Item)
'Aufruf von einem Button aus
Dim strFile
strFile = SelectFile()
If strFile <> "" Then
'"FilePath" ist eine WinCC-Variable vom Typ Text
HMIRuntime.Tags("FilePath").Write strFile
End If
End Sub
Beim speichern kommt erstmal keine Fehlermeldung. Wenn ich die Runtime starte, kommt aber nun statt dem Bild ein gelbes Warndreieck mit Ausrufezeichen drin. Wenn ich die Zeile mit dem Aufruf der Funktion im Buttonereignis auskommentiere dann wird mir wieder das Bild korrekt angezeigt, aber es funktioniert nichts. Ich hätte da als Laie mit gefährlichem Halbwissen mal folgende Fragen:
1. Warum passiert das so? Das Bild dürfte doch eigentlich erst dann abkacken (gelbes Warndreieck) wenn ich auf den Button klicke?
2. Es hängt ja eindeutig mit der Funktion SelectFile() zusammen. Ist da ein Fehler drin.
3. Wird die Funktion evtl. garnicht gefunden. In welchem Verzeichnis müsste die denn liegen. (Momentan im VBS-Editor unter Standardmodule)
4. Wenn das alles wie gewünscht funktionieren würde, könnte ich die Variable FilePath auch dem Eingabefeld zuordnen um so auch weiterhin die manuelle Eingabe zu ermöglichen?
5. Ist das womöglich alles Unsinn und funktioniert so garnicht? Hat jemand einen besseren Vorschlag zur Lösung.
Ja, ja ich weiß, eine ganze Menge komplizierter Fragen. Ihr würdet mir allerdings sehr helfen wenn ich das hinbekommen würde. Daher vorab schon mal besten Dank für die Bemühungen.

Grüße
Uli