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:

  1. FF_MessageBox "Es ist kein Bild geladen!",48 '48 steht für Ausrufezeichen

VBS-Beispiel für eine Entscheidungsabfrage:

  1. Antwort = FF_MessageBox ("Soll das Bild gelöscht werden?",4 + 32) '4 für Ja, Nein / 32 für Fragezeichen
  2. 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:

  1. Msgbox "Es ist kein Bild geladen!",vbExclamation, "Warnung"

VBS-Beispiel für eine Entscheidungsabfrage:

  1. Antwort = Msgbox ("Soll das Bild gelöscht werden?",vbYesNo + vbQuestion,"Abfrage")
  2. if Antwort = vbNo then Abbruch = true

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

  1. Set WshShell = CreateObject("WScript.Shell")
  2. WshShell.Popup "Es ist kein Bild geladen!" ,,"Warnung",vbExclamation
  3. Set WshShell = Nothing

VBS-Beispiel für eine Entscheidungsabfrage mit Wartezeit von 2 sec.

  1. Set WshShell = CreateObject("WScript.Shell")
  2. Antwort = WshShell.Popup("Soll das Bild gelöscht werden?",2,"Hinweis",vbYesNo + vbQuestion)
  3. if Antwort = -1 then 'keine Taste während der Wartezeit betätigt
  4. msgbox "Es erfolgte keine Antwort!"
  5. elseif Antwort = vbYes then
  6. msgbox "Antwort ist Ja"
  7. else
  8. msgbox "Antwort ist Nein"
  9. end if
  10. 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.

  1. Option Explicit
  2. Dim Text
  3. Text = "Irgendein beliebiger Text. Irgendein Text. Irgendein beliebiger Text."
  4.  
  5. call TextAnzeige (150,100) 'Dialogaufruf mit Breite und Höhe
  6.  
  7. '----------------------------------------------------------
  8. Sub TextAnzeige (D_Breite,D_Hoehe)
  9. 'Dialog mit EDIT-Steuerelement zur Textanzeige
  10.  
  11. const ES_READONLY = 2048 'Stilkonstanten für EDIT
  12. const WS_VSCROLL = 2097152
  13.  
  14. 'Dialog mit Textelement
  15. 'Stil: ReadOnly und Vertikal Skrollen, wenn Textblock höher als das Textelement
  16. FF_AddDialog "TextAnzeige",D_Breite,D_Hoehe
  17. FF_AddControl "TextAnzeige","Beschreibung","EDIT",0,0,D_Breite,D_Hoehe-20
  18. FF_SetControlStyle "TextAnzeige","Beschreibung", ES_READONLY or WS_VSCROLL
  19. FF_AddControl "TextAnzeige","OK","BUTTON",D_Breite/2-15,D_Hoehe-15,30,10
  20.  
  21. FF_SetControl "TextAnzeige","Beschreibung",Text 'Textanzeige
  22.  
  23. do
  24. Select Case FF_ShowDialog ("TextAnzeige")
  25. Case "OK","CANCEL"
  26. exit do
  27. end select
  28. loop
  29.  
  30. FF_CloseDialog "TextAnzeige"
  31.  
  32. End Sub
  33. '----------------------------------------------------------

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.

  1. Option Explicit
  2.  
  3. 'Textbeispiele
  4. '** Start Text_A **
  5. 'Dies ist ein beliebiger Text als Beispiel.
  6. '---------------------------------------------
  7. '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.
  8. '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.
  9. '
  10. '** Textende **
  11.  
  12. '** Start Text_B **
  13. 'Und hier ist ein ganz anderer Text zu finden, der aber auch beliebig ist.
  14. 'Und hier ist ein ganz anderer Text zu finden. Und hier ist ein ganz anderer Text zu finden.
  15. '** Textende **
  16.  
  17. Dim objFs
  18. Set objFS = CreateObject("Scripting.FileSystemObject")
  19. Dim Text,LaengeMax
  20.  
  21. const SkriptName = "Skript_mit_Text.vbs" 'Skriptname
  22.  
  23. call TextErmittlung ("'** Start Text_A **","'** Textende **") '### Text_A
  24. 'call TextErmittlung ("'** Start Text_B **","'** Textende **") '### alternativ Text_B
  25.  
  26. if len(Text) > 0 then
  27. call TextAnzeige (150,100) '### Anzeige mit fester Textfeldbreite , Textfeldhöhe
  28. ' - geeignet für Text_A
  29. 'call TextAnzeige (LaengeMax * 2.5,100) '### alternative Anzeige mit
  30. 'variabler Textfeldbreite = LaengeMax * 2.5, Textfeldhöhe
  31. ' - geeignet für TextB
  32. else
  33. msgbox "Es wurde kein Text gefunden!",vbExclamation,"Hinweis"
  34. end if
  35.  
  36. Set objFS = Nothing
  37. '----------------------------------------------------------
  38. Sub TextErmittlung (T_Anfang,T_Ende)
  39. 'Text auslesen von T-Anfang bis T-Ende
  40.  
  41. Const ForReading = 1
  42. Dim Skript, Anfang, Ende, Zeile
  43.  
  44. if not objFs.FileExists(FF_GetScriptPath & "\" & SkriptName) then
  45. msgbox "Wahrscheinlich wurde der Originalskriptname" & vbNewLine & _
  46. """" & SkriptName & """" & " abgeändert." & vbNewLine & _
  47. "Der Text kann daher nicht angezeigt werden.",vbExclamation,"Abbruch"
  48. exit sub
  49. end if
  50.  
  51. Set Skript = objFS.OpenTextFile(FF_GetScriptPath & "\" & SkriptName, ForReading, False)
  52.  
  53. Do While Skript.AtEndOfStream <> True
  54. Zeile = Skript.ReadLine
  55.  
  56. if instr(Zeile,T_Ende) > 0 and Anfang then
  57. Ende = true
  58. exit do
  59. end if
  60.  
  61. if Anfang then
  62. Text = Text & mid(Zeile,2) & vbNewLine
  63. if len(Zeile) > LaengeMax then LaengeMax = len(Zeile) 'zum Auslesen nicht erforderlich
  64. end if
  65.  
  66. if instr(Zeile,T_Anfang) > 0 then Anfang = true
  67. Loop
  68.  
  69. Skript.Close
  70.  
  71. if not Anfang or not Ende then Text = ""
  72. ' msgbox "maximale Zeilenlänge: " & LaengeMax & " Zeichen" & vbNewLine & vbNewLine & Text 'nur zum Test
  73.  
  74. End Sub
  75. '----------------------------------------------------------

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.

  1. Option Explicit
  2.  
  3. Dim objFs
  4. Set objFS = CreateObject("Scripting.FileSystemObject")
  5. Dim Text
  6.  
  7. const Textdatei = "D:\Eigene Dateien\Eigene Dokumente\EMail_Einstellungen.txt" 'externe Textdatei
  8.  
  9. call TextExtern
  10.  
  11. if len(Text) > 0 then
  12. call TextAnzeige (150,100)
  13. else
  14. msgbox "Es wurde kein Text gefunden!",vbExclamation,"Hinweis"
  15. end if
  16.  
  17. Set objFS = Nothing
  18. '----------------------------------------------------------
  19. Sub TextExtern
  20. Const ForReading = 1
  21. Dim Datei
  22.  
  23. if not objFs.FileExists(Textdatei) then
  24. msgbox "Die Textdatei" & vbNewLine & Textdatei & vbNewLine & _
  25. "ist nicht zu finden.",vbExclamation,"Abbruch"
  26. exit sub
  27. end if
  28.  
  29. Set Datei = objFS.OpenTextFile(Textdatei, ForReading, False)
  30. Text = Datei.ReadAll
  31. Datei.close
  32.  
  33. End Sub
  34. '----------------------------------------------------------

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

  1. Option Explicit
  2.  
  3. Dim WshShell
  4. Set WshShell = CreateObject("WScript.Shell")
  5.  
  6. on error resume next
  7. WshShell.Run """D:\Eigene Dateien\Eigene Dokumente\Unfall 20_03_2008.pdf""",1,false
  8. if err <> 0 then
  9. msgbox "Die PDF-Datei konnte nicht geöffnet werden." & vbNewLine & _
  10. "Möglicherweise wurde die PDF-Datei gelöscht oder" & vbNewLine & _
  11. "es ist kein PDF-Reader installiert (?).",vbExclamation,"Hinweis"
  12. err.clear
  13. 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

  1. Option Explicit
  2.  
  3. Dim WshShell
  4. Set WshShell = CreateObject("WScript.Shell")
  5.  
  6. on error resume next
  7. WshShell.Run """C:\Program Files\Notepad++\notepad++.exe""" & " " & _
  8. """D:\Eigene Dateien\Eigene Dokumente\history.log""",3,false
  9. if err <> 0 then
  10. msgbox "Die Log-Datei konnte nicht geöffnet werden." & vbNewLine & _
  11. "Möglicherweise wurde die Datei gelöscht oder" & vbNewLine & _
  12. "das Programm Notepad+ ist nicht installiert (?).",vbExclamation,"Hinweis"
  13. err.clear
  14. 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.