WinCC Pfadname auswählen

ATWW-Fuchs

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> 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
 
Hi, hat etwas gedauert aber hier kommts:

Ich verwende WinCC 7.2 und Windows 7.

Wird bei Mausklick auf einen Button (VBS-Aktion) ausgeführt [...]

Code:
Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)    
HMIRuntime.Trace("======= Pfadauswahl gestartet =======" &vbCrLf)
Item.Operation = false
                                                                                            
Dim oSheet, Dateiauswahl, AuswahlTitel, StartOrdner, Ordner, StoragePath, FName, File

AuswahlTitel = "Bitte ein Verzeichnis zum Speichern auswählen" 
StartOrdner = 0    ' 0=Desktop, 17=Computer 

Set Dateiauswahl = CreateObject("Shell.Application").BrowseForFolder(0,AuswahlTitel,16,StartOrdner) 

' prüfen ob ein Ordner ausgewählt wurde
If Dateiauswahl Is Nothing Then
    HMIRuntime.Trace("EXIT: Kein Ordner gewählt !" &vbCrLf &vbCrLf &vbCrLf) 
    Item.Operation = true
    Exit Sub ' ENDE !!!!
End If 

Set Ordner = Dateiauswahl.Self 

' Archivierungspfad (Eingangsparameter) und Dateiname zusammensetzen 
StoragePath = Ordner.Path & "\"


' gewählten Pfad ausgeben
HMIRuntime.Trace("gewählter Pfad: " &StoragePath &vbCrLf)

' in Variable speichern
HMIRuntime.Tags("exportpfad").Write StoragePath

Item.Operation = true
HMIRuntime.Trace("======= Pfadauswahl fertig! =======" &vbCrLf &vbCrLf &vbCrLf) 
End Sub

Probleme gibt es, wenn die Runtime den Zugriff in die Windows Ebene sperrt, da taucht das Fenster (manchmal ?!) im Hintergrund auf und man sieht es nicht.

Ansonsten einfach mal ausprobieren ;)
 
Zurück
Oben