====== 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 [[/Hilfe%20zu%20JS%20und%20VBS|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[[/Hilfe%20zu%20JS%20und%20VBS| 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\\ [[/Hilfe%20zu%20JS%20und%20VBS|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%20Programm|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.