meta data for this page
Textanzeige
FF_MessageBox und Msgbox
Beide Befehle haben den gleichen Zweck und bewirken das gleiche. Sie dienen vorrangig dazu einen kurzen Hinweis zu geben und können auch benutzt werden, dem Benutzer eine Entscheidung abzuverlangen.
Die Textlänge ist auf ca. 1000 Zeichen beschränkt. Längere Texte werden abgebrochen.
Als Parameter sind jeweils anzugeben:
- der anzuzeigende Text und
- der Typ, der sich wiederum zusammensetzt aus dem Icon und der gewünschten Tastenkombination.
Icon und Tastenkombination müssen addiert werden (Beispiele siehe unten).
FF_MessageBox
Ist ein FF-Skriptbefehl, der in der FF-Skript-Befehlsreferenz erläutert wird. Er kann bei JS und VBS genutzt werden: FF_MessageBox(prompt, type)
- prompt = Text, der angezeigt werden soll
- type = setzt sich zusammen aus Icon plus Tastenkombination.
VBS-Beispiel für eine reine Meldung:
FF_MessageBox "Es ist kein Bild geladen!",48 '48 steht für Ausrufezeichen
VBS-Beispiel für eine Entscheidungsabfrage:
Antwort = FF_MessageBox ("Soll das Bild gelöscht werden?",4 + 32) '4 für Ja, Nein / 32 für Fragezeichen if Antwort = 7 then Abbruch = true '7 bedeutet Nein
Anmerkung:
Zur Zeit gibt es leider in der FF-Skript-Befehlsreferenz keine Angabe zu den Rückgabewerten von FF_MessageBox. Daher hier eine Liste:
- 1 = OK
- 2 = Abbrechen (bei Tastenkombination 1 oder 5)
- 3 = Abbrechen (bei Tastenkombination 2 oder 3)
- 4 = Wiederholen
- 5 = Ignorieren
- 6 = Ja
- 7 = Nein
- 10 = Wiederholen
- 11 = Weiter
Msgbox
Ist ein Skriptbefehl, der nur bei VBS erlaubt ist. Er ist erläutert in der Microsoft-Hilfe. Für die Definitionen können statt der Zahlen
auch VB-Konstanten verwendet werden, die man sich leichter merken kann. Außerdem kann man den Titel,
der bei FF_MessageBox immer "FixFoto" heißt, selbst bestimmen.
VBS-Beispiel für eine reine Meldung:
Msgbox "Es ist kein Bild geladen!",vbExclamation, "Warnung"
VBS-Beispiel für eine Entscheidungsabfrage:
Antwort = Msgbox ("Soll das Bild gelöscht werden?",vbYesNo + vbQuestion,"Abfrage") if Antwort = vbNo then Abbruch = true
PopUp
Um mehr als 1000 Zeichen anzuzeigen, kann man den PopUp-Befehl verwenden. Er ist in der Microsoft-Hilfe erläutert
und ist in VBS und JS verwendbar. Er benötigt allerdings das Objekt WScript.Shell.
Im Prinzip bietet der Befehl die gleichen Möglichkeiten wie Msgbox. Man kann allerdings zusätzlich eine Wartezeit angeben,
nach der die Meldung bzw. Abfrage automatisch verschwindet, wenn der Benutzer nicht reagiert. Das Skript wird dann fortgesetzt.
VBS-Beispiel für eine reine Meldung ohne Wartezeit
Set WshShell = CreateObject("WScript.Shell") WshShell.Popup "Es ist kein Bild geladen!" ,,"Warnung",vbExclamation Set WshShell = Nothing
VBS-Beispiel für eine Entscheidungsabfrage mit Wartezeit von 2 sec.
Set WshShell = CreateObject("WScript.Shell") Antwort = WshShell.Popup("Soll das Bild gelöscht werden?",2,"Hinweis",vbYesNo + vbQuestion) if Antwort = -1 then 'keine Taste während der Wartezeit betätigt msgbox "Es erfolgte keine Antwort!" elseif Antwort = vbYes then msgbox "Antwort ist Ja" else msgbox "Antwort ist Nein" end if Set WshShell = Nothing
Anzeige über FF-Dialog
Ist viel Text anzuzeigen können die oben erläuterten Methoden zu sehr hohen Anzeigen führen. Vor allem bei der PopUp-Methode kann
die Anzeige höher werden als die Bildschirmhöhe und ist dann kaum noch zu handhaben. Einen Ausweg bietet hier ein FF-Dialog
mit einem EDIT-Steuerelement. In dieses Steuerelement wird der anzuzeigende Text eingebettet, geschützt durch die Stilzuweisung
"ReadOnly" und versehen mit einer vertikalen Scrollmöglichkeit.
Im folgenden VBS-Beispiel wird nur ein relativ kurzer Text verwendet, der aber zeigt, dass das EDIT-Steuerelement automatisch einen
Zeilenumbruch erzeugt. Der Scrollbalken rechts ist zu erkennen, wird aber erst aktiviert, wenn der eingebettete Text so lang ist, dass
seine Verwendung erforderlich wird.
Option Explicit Dim Text Text = "Irgendein beliebiger Text. Irgendein Text. Irgendein beliebiger Text." call TextAnzeige (150,100) 'Dialogaufruf mit Breite und Höhe '---------------------------------------------------------- Sub TextAnzeige (D_Breite,D_Hoehe) 'Dialog mit EDIT-Steuerelement zur Textanzeige const ES_READONLY = 2048 'Stilkonstanten für EDIT const WS_VSCROLL = 2097152 'Dialog mit Textelement 'Stil: ReadOnly und Vertikal Skrollen, wenn Textblock höher als das Textelement FF_AddDialog "TextAnzeige",D_Breite,D_Hoehe FF_AddControl "TextAnzeige","Beschreibung","EDIT",0,0,D_Breite,D_Hoehe-20 FF_SetControlStyle "TextAnzeige","Beschreibung", ES_READONLY or WS_VSCROLL FF_AddControl "TextAnzeige","OK","BUTTON",D_Breite/2-15,D_Hoehe-15,30,10 FF_SetControl "TextAnzeige","Beschreibung",Text 'Textanzeige do Select Case FF_ShowDialog ("TextAnzeige") Case "OK","CANCEL" exit do end select loop FF_CloseDialog "TextAnzeige" End Sub '----------------------------------------------------------
Zum Schließen des Dialogs wird ein BUTTON-Steuerelement "OK" und CANCEL (das kleine Kreuz oben rechts) genutzt.
Natürlich können weitere BUTTON-Steuerelemente eingebaut werden, wie z.B. "Ja" und "Nein" um aufgrund des angezeigten Textes
dem Benutzer eine Entscheidung abzuverlangen.
Als Quelle für den Text wurde im Beispiel die Zuweisung zur Variablen Text verwendet. Es kann aber auch Text aus dem Skript oder einer
externen Textdatei ausgelesen werden.
Text auslesen aus dem Skript
Bei dem folgenden VBS-Beispiel sind zwei Textbeispiele eingebaut.
- Bei Text_A ist der Text ohne Zeilenumbruch fortlaufend geschrieben. Der Umbruch wird in der Anzeige dem automatischen
Zeilenumbruch im EDIT-Steuerelement überlassen. - Bei Text_B wird versucht, jeder Zeile eine etwa gleiche Länge zu geben. Bei der Textermittlung wird in der Variablen LaengeMax
die maximal in einer Zeile verwendete Anzahl von eingetragen. Diese Zahl wird bei Aufruf der Textanzeige dazu verwendet,
die Breite des Anzeigedialogs zu bestimmen. Dabei wird LaengeMax mit einem Faktor multipliziert, der experimentell ermittelt
wurde (hier 2.5 als Beispiel).
Um das Beispiel zu testen muss es mit der eingebauten Routine "TextAnzeige" als VB-Skript abgespeichert und der Dateiname in der
Konstanten "SkriptName" eingetragen werden. Zum Probieren mit Test_A und Test_B müssen an zwei Stellen die Auskommentierungen
entfernt bzw. gesetzt werden. Bei Textänderungen muss zum weiteren Testen immer erst wieder gespeichert werden.
Option Explicit 'Textbeispiele '** Start Text_A ** 'Dies ist ein beliebiger Text als Beispiel. '--------------------------------------------- 'Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. 'Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. Dies ist ein beliebiger Text als Beispiel. ' '** Textende ** '** Start Text_B ** 'Und hier ist ein ganz anderer Text zu finden, der aber auch beliebig ist. 'Und hier ist ein ganz anderer Text zu finden. Und hier ist ein ganz anderer Text zu finden. '** Textende ** Dim objFs Set objFS = CreateObject("Scripting.FileSystemObject") Dim Text,LaengeMax const SkriptName = "Skript_mit_Text.vbs" 'Skriptname call TextErmittlung ("'** Start Text_A **","'** Textende **") '### Text_A 'call TextErmittlung ("'** Start Text_B **","'** Textende **") '### alternativ Text_B if len(Text) > 0 then call TextAnzeige (150,100) '### Anzeige mit fester Textfeldbreite , Textfeldhöhe ' - geeignet für Text_A 'call TextAnzeige (LaengeMax * 2.5,100) '### alternative Anzeige mit 'variabler Textfeldbreite = LaengeMax * 2.5, Textfeldhöhe ' - geeignet für TextB else msgbox "Es wurde kein Text gefunden!",vbExclamation,"Hinweis" end if Set objFS = Nothing '---------------------------------------------------------- Sub TextErmittlung (T_Anfang,T_Ende) 'Text auslesen von T-Anfang bis T-Ende Const ForReading = 1 Dim Skript, Anfang, Ende, Zeile if not objFs.FileExists(FF_GetScriptPath & "\" & SkriptName) then msgbox "Wahrscheinlich wurde der Originalskriptname" & vbNewLine & _ """" & SkriptName & """" & " abgeändert." & vbNewLine & _ "Der Text kann daher nicht angezeigt werden.",vbExclamation,"Abbruch" exit sub end if Set Skript = objFS.OpenTextFile(FF_GetScriptPath & "\" & SkriptName, ForReading, False) Do While Skript.AtEndOfStream <> True Zeile = Skript.ReadLine if instr(Zeile,T_Ende) > 0 and Anfang then Ende = true exit do end if if Anfang then Text = Text & mid(Zeile,2) & vbNewLine if len(Zeile) > LaengeMax then LaengeMax = len(Zeile) 'zum Auslesen nicht erforderlich end if if instr(Zeile,T_Anfang) > 0 then Anfang = true Loop Skript.Close if not Anfang or not Ende then Text = "" ' msgbox "maximale Zeilenlänge: " & LaengeMax & " Zeichen" & vbNewLine & vbNewLine & Text 'nur zum Test End Sub '----------------------------------------------------------
Text auslesen aus externer Datei
Bei dem folgenden VBS-Beispiel wird davon ausgegangen, dass eine Textdatei auf dem Rechner gespeichert und der Ablageort bekannt ist.
Um das Beispiel zu testen muss es mit der eingebauten Routine "TextAnzeige" als VB-Skript abgespeichert und der vollständige Pfad
der auszulesenden Datei in der Konstanten "Textdatei" eingetragen werden.
Option Explicit Dim objFs Set objFS = CreateObject("Scripting.FileSystemObject") Dim Text const Textdatei = "D:\Eigene Dateien\Eigene Dokumente\EMail_Einstellungen.txt" 'externe Textdatei call TextExtern if len(Text) > 0 then call TextAnzeige (150,100) else msgbox "Es wurde kein Text gefunden!",vbExclamation,"Hinweis" end if Set objFS = Nothing '---------------------------------------------------------- Sub TextExtern Const ForReading = 1 Dim Datei if not objFs.FileExists(Textdatei) then msgbox "Die Textdatei" & vbNewLine & Textdatei & vbNewLine & _ "ist nicht zu finden.",vbExclamation,"Abbruch" exit sub end if Set Datei = objFS.OpenTextFile(Textdatei, ForReading, False) Text = Datei.ReadAll Datei.close End Sub '----------------------------------------------------------
Anzeige des Inhalts einer externen Datei über ein externes Programm
Man kann auch externe Programme dazu benutzen, Dateiinhalte anzuzeigen. In den meisten Fällen ist einer Dateierweiterung in der Sytemsteuerung
des Rechners ein Programm zugeordnet. Beispielsweise wird bei Doppelklick auf eine PDF-Datei ein PDF-Reader geöffnet und darin der Inhalt der
PDF-Datei angezeigt, vorausgesetzt es ist ein PDF-Reader installiert.
Diese Verbindung von Dateiendung und Programm kann auch per Skript benutzt werden, indem man die Datei mit dem Run-Befehl aufruft.
Dabei tritt allerdings ein Fehler auf, wenn kein Reader installiert ist, oder die Datei nicht existiert. Diesen Fehler sollte man abfangen.
VBS-Beispiel für Direktaufruf einer Datei
Option Explicit Dim WshShell Set WshShell = CreateObject("WScript.Shell") on error resume next WshShell.Run """D:\Eigene Dateien\Eigene Dokumente\Unfall 20_03_2008.pdf""",1,false if err <> 0 then msgbox "Die PDF-Datei konnte nicht geöffnet werden." & vbNewLine & _ "Möglicherweise wurde die PDF-Datei gelöscht oder" & vbNewLine & _ "es ist kein PDF-Reader installiert (?).",vbExclamation,"Hinweis" err.clear on error goto 0
Die Datei in drei Anführungszeichen ein zufassen, ist erforderlich damit Leerzeichen nicht als Trennung erkannt werden.
Die dann folgende Zahl bestimmt die Art des Fensters in dem das Programm geöffnet wird und die folgende Kennung false oder true
legt fest, ob das Skript auf die Beendigung des geöffneten Programms warten soll oder nicht. Eine ausführliche Erläuterung ist in der
Microsoft-Hilfe zu finden.
Es kann aber auch erforderlich sein, das Programm, das zum Öffnen der Datei verwendet werden soll, festzulegen. Dies kann man
ebenfalls mit dem Run-Befehl erzwingen indem man das Programm aufruft und nach einem Leerzeichen die Datei als Parameter anhängt.
VBS-Beispiel für Programmaufruf und Datei als Parameter
Option Explicit Dim WshShell Set WshShell = CreateObject("WScript.Shell") on error resume next WshShell.Run """C:\Program Files\Notepad++\notepad++.exe""" & " " & _ """D:\Eigene Dateien\Eigene Dokumente\history.log""",3,false if err <> 0 then msgbox "Die Log-Datei konnte nicht geöffnet werden." & vbNewLine & _ "Möglicherweise wurde die Datei gelöscht oder" & vbNewLine & _ "das Programm Notepad+ ist nicht installiert (?).",vbExclamation,"Hinweis" err.clear on error goto 0
Auch hier sollte ein möglicherweise auftretender Fehler abgefangen werden.
Der Run-Befehl wird hier in der Wiki auch unter "Externes Programm aufrufen" erläutert.
Es sei noch erwähnt, dass für Pfadangaben auch Systemvariable verwendet werden können. Der Pfad zum Ordner Programme ist beispielsweise immer %PROGRAMFILES% unabhängig von der verwendeten Windows-Version.
Bei Verwendung der Systemvariable kann obigen Beispiel statt """C:\Program Files\Notepad++\notepad++.exe""" dann """%PROGRAMFILES%\Notepad++ \notepad++.exe""" heißen.