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.