138. Eigenentwicklung: HTA zur Abwägung von Pro Contra
Einleitung
Pro und Contra ist die philosophische Königsdisziplin in der
Diskussion, die unter anderem in der Erörterung ihren Platz findet. Der
Sternenhimmelstuermer kreierte zu diesem Thema eine HTA mit einem
geringen cmd-Anteil (eine Zeile zum Löschen mehrerer Datensätze zu
einem Thema, die vollständig in der HTA integriert ist)), mit dem
der User ein Brainstorming durchführen kann, dass bei einer
Entscheidungsfindung helfen kann.
Der User gibt dabei ein Argument in ein Textfeld ein und vergibt danach
aus einem Dropdownfeld eine subjektive Gewichtung von 1-10 ein. Danach
ordnet er das Argument als Pro-Argument oder Contra-Argument ein und
betätigt den entsprechenden Button.
Dieses Spiel wiederholt er so lange, bis ihm keine Argumente mehr
einfallen.
Am Ende drückt er die Ergebnistaste und Pro-Argumente und
Contraargumente werden nun eingeblendet. Gleichzeitig werden Ihnen die
Prozentangaben der von Ihnen eingegebenen addierten Bewertungen
angegeben.
Sie haben sich vielleicht unbewusst für ein Thema entschieden, obwohl
weitaus mehr Argumente für die andere Seite Sprechen (ein Argument mit
10 Punkten ist genauso viel Wert wie 10 Gegenargumente, denen Sie nur
einen Punkt zubilligen...
Schüler und Studenten sollten diesen Artikel mit Aufmerksamkeit lesen,
da manch Schüler schon die leidvolle Erfahrung machen musste, dass die
Bewertung seiner Argumente durch Lehrkräfte zerrissen wurde, weil Sie
gegen das Bewertungssystem der Lehrkräfte ging...das ist nicht
fair...es liegt immer in den Augen des Betrachters, die sind leider
auch nicht immer objektiv und daher kann man bei einer Erörterung
eigentlich nur bewerten, ob die Form (Einleitung, pro/contra,
Wendepunkt, contra/pro, Fazit, eigene Meinung) eingehalten wurde...
Im Film I-Robot wird ein Roboter zwischen die Wahl gestellt, ein
Mädchen oder einen Erwachsenen (den Hauptprotagonisten des Films zu
retten).
Der Roboter entschied sich für die höhere Chance des Überlebens und
damit auch irgendwie für die Fortsetzung des Films...-:)
Der Sternenhimmelstuermer stellt Ihnen die Möglichkeit zur Verfügung,
ihre Entscheidung auf Grund von Fakten und ihrer Bewertung einzelner
Argumente zu treffen - in Zahlen dargestellt - Nutzen Sie diese
praktische Lebenshilfe!
Sämtliche Themen werden gespeichert und sind jederzeit abrufbar oder
löschbar. Die Software ist Freeware, gerade mal 12 KB groß und auf
jedem Windows lauffähig.
Download
(proundcontra.txt,12 kb)
Erste Schritte
Download
Einfach den kopierten Text in ein Textdokument einfügen oder das
Textdokument runterladen und in HTA umbenennen
---
Einschub
Sie sollten auf ihrem Betriebssystem die Einstellung Erweiterungen bei bekannten
Dateitypen
ausblenden deaktivieren, damit Sie im folgendenen Schritt proundcontra.txt in proundcontra.hta umbenennen
können:
Beliebigen Ordner öffnen: Organisieren
-
Layout
- Menüleiste
auswählen. In der Menüleiste: Extras - Ordneroptionen
- Reiterkarte
Ansicht:
Dort Häkchen entfernen bei: Erweiterungen
bei bekannten
Dateitypen ausblenden.
Einschubende
---
Bedienung
Zuerst geben Sie ein Thema vor, dessen Name nicht zu lang sein
sollte, da es als Dateiname verwendet wird. Ä.Ö,Ü, Leerzeichen sind
erlaubt...-
;,! natürlich nicht!!! Soll ja auch nur ein Stichwort sein
Der Name des Themas muss im oberen Feld bei den folgenden Eingaben
immer im oberen Feld stehen bleiben. Das tut er ja auch, es sei denn
Sie löschen ihn oder schließen die HTA.
Der User gibt dann ein Argument in ein Textfeld ein und vergibt danach
aus einem Dropdownfeld eine subjektive Gewichtung von 1-10 . Danach
ordnet er das Argument als Pro-Argument oder Contra-Argument ein und
betätigt den entsprechenden Button.
Es erscheint eine Meldung im Argumentfeld, dass das Argument
registriert und gespeichert wurde! Die Meldung Überschreiben Sie bei
der nächsten Eingabe.
Dieses Spiel wiederholen Sie so lange, bis ihm keine Argumente mehr
einfallen.
Bild von ProundContra.hta bei Eingabe vor Betätigung des Ergebnisbutton:

Am Ende drücken Sie die Ergebnistaste und Pro-Argumente und
Contra-Argumente werden nun eingeblendet. Gleichzeitig werden Ihnen die
Prozentangaben der von Ihnen eingegebenen addierten Bewertungen
angegeben:

Das war eigentlich erstmal alles!
Sie können ein Thema erweitern, auch wenn Sie die HTA zwischenzeitlich schließen.
Dazu geben Sie den Namen des Themas ein und fügen ein Pro- oder
Contra-Argument hinzu. Nach Bestätigung des Buttons wird das Argument
hinzugefügt.
Nur direkt Ergebnisbutton nach Eintragen des Themennamens ist verboten:
Hintergrund der Name muss erstmal eingelesen werden - ansonsten startet
die Berechnung ohne andere Eingaben und es wird zwischenzeitlich
mathematisch mi einer 0/0 - Funktion gerechnet - das geht natürlich
nicht, aber es geht dabei nichts verloren...
Sie können ein Thema löschen, in dem Sie das eingetragene Thema stehen lassen und den del thema Button betätigen. Sämtliche erstellte Dokumente zu diesem Thema werden nun gelöscht.
Ja, es wurden während ihrer Eingabe fünf Textdokumente erstellt, die
nun parallel im Ordner liegen und deren Dateiname immer mit dem
Themennamen beginnt.
Die Textdokumente können Sie öffnen, bei einem Doppelklick wird je nach
Einstellung ihres Systems Word oder der Texteditor von Microsoft das
*.txt geöffnet.
Zusätzlich kann eine del.bat im Ordner liegen, wenn Sie eine Löschaktion durchführten...
Sie können so viele Datenbanken bzw. Themen mit Datenbanken erstellen, wie Sie wollen.
Weitere Ausführungen zu Problemschwerpunkten in der Programmierung werden hier noch Schrittweise eingetragen
Der Sternenhimmelstuermer wünscht Ihnen viel Spaß!
Überfliegen des Codes
Der Quellcode braucht weitestgehend nicht erklärt werden, da in der
Abhandlung über HTA des Sternenhimmlstuermers bereits viele erklärt
wurde - vielleicht ein wenig ergänzend dazu:
Es wurden ein paar Zeilen Batch benutzt, um in der Löschfunktion die
Textdokumente zu einem Thema zu löschen. VBS ist nicht unbedingt auf
das Löschen von Dokumenten spezialisiert - im Gegenteil - ist eher ein
Krampf im Gegensatz zum einfach gehaltenen Delete Befehl aus der
CMD-Welt mit seinen vielfältigen Parametern.
Dann brauchen Sie in VBS eine Pfadangabe, was bei relativen Dokumente nicht so prickend ist.
Der Sternenhimmelstuermer weicht in solchen Fällen lieber auf die cmd
aus, besser auf eine Batch, die u. a. den Vorteil bietet mehrere
Befehle auszuführen, nicht im Systemordner von der Kommandozeile
ausgeführt wird, sondern im Ordner, wo die Batch liegt - damit entfällt
in vielen Fällen die leidige Pfadsuche und irgendwelche Wechselaktionen
(cd)
Mal den Quellcode der Funktion:
Sub weg
dim variable
dim entfernen
entfernen = thema.value
variable = "del " & entfernen& "_*.txt"
outputFile = "del.bat"
set fso = CreateObject("scripting.FileSystemObject")
set datei = fso.opentextfile(outputFile, 2, 1)
datei.write "chcp 28591 > NUL" & vbCrLf
datei.write variable & vbCrLf
datei.write "exit" & vbCrLf
datei.close
dim shell
set shell = createobject("wscript.shell")
shell.run """del.bat""", 1, true
End Sub
Mit dem Dim Befehl werden wie üblich zwei Variablen definiert, deren Namen der Fantasie überlassen bleibt...
Thema.value ist lediglich der Textinhalt des Inputfeldes, in der der
User den Themennamen eingab. Der Themenname wird in
der Pro und Contra HTA als Dateiname der einzelnen
Textdokumente verwendet.
Das Thema Umweltverschmutzung beinhaltet also z. B. die Textdokumente:
Umweltverschmutzung_contra.txt
Umweltverschmutzung_contrazahl.txt
Umweltverschmutzung_pro.txt
Umweltverschmutzung_prozahl.txt
Umweltverschmutzung_zahl.txt
All diese Dokumente haben den Themennamen mit Unterstrich als Separator
vor der nächsten "Gliederungsebene" gemeinsam. Mit dem einfachen Befehl
del Umweltverschmutzung_*.txt werden sämtliche Textdokumente gelöscht - der Stern steht für einen beliebig langen Text hinter dem Separator _.Bindestrich.
Dieser ist auch der ziemlich einzig erlaubte Separator in einem Dateinamen - alles andere ist so ziemlich verboten...
"del " & entfernen& "_*.txt"
Ist also der zusammengesetzte Text, wobei die Variable entfernen wie
gesagt für den Themennamen steht, der den User bekanntlich selbst
festlegt und aus Sicht des HTA-Schreibers ziemlich uninteressant ist...
outputFile = "del.bat"
Der Dateiname der Objekthülle ist del.bat - eben ein Name für die neue Batch, die in den folgenden Zeilen geschrieben wird.
chcp
28591 > NUL ist ein Befehl der Batch, damit ü,ä usw. erkannt werden. Da das ein Text ist, muss der Befehl in
Anführungszeichen stehen.
Das & vbCrLf ist
dem Umstand geschuldet, dass nach jedem Befehl eine neue Zeile
begonnen wird und ist somit der Semantik des VBS geschuldet
In der zweiten Zeile steht die Variable mit dem Namen Variable für den
Löschbefehl. Die cmd bekommt den Namen in Klarschrift übermittelt - mit
dem Platzhalter Stern.
Am Ende wird mit dem shell.run Befehl die Batch gestartet und das
VB-Script wartet auf die Ausführung der Batch - entspricht mit den
Parametern dem start wait aus der CMD-Welt...
Fazit: Durch intelligente Vergabe von Dateinamen im Vorfeld können Sie
später leicht eine Löschfunktion erstellen. Verwenden Sie lieber eine
Batch, als einen einfachen Befehlssatz, damit wie in diesem Befehl die
Ausführung auch ohne Pfadangaben klappt - vergessen Sie bei
einem Einzeiler, dass die cmd im Ordner System 32 liegt, so können Sie
bei einem allgemeingültigen Löschbefehl viel Schaden anrichten - oder
bekommen bei anderen Befehlen lustige Ergebnisse.
Setzen Sie zum Testen ruhig bei längeren Befehlen ein Pause Befehl,
um zu kontrollieren was bei Fehlern in der Batch nicht stimmt - Beim
kurzen aufflackern des CMD-Fensters sehen Sie sonst erstmal nichts...
---
Mathe und VBS
Teil 1
Mathe und VBS ist ein Thema, dass nach dem Geschmack des
Sternenhimmelstuermers viel zu wenig im Internet eruiert wurde - dabei
meint der Sternenhimmelstuermer nicht hochkomplexe Rechnungen, die man
lieber einem integrierten Javascript in der HTA überlassen sollte -
auch wenn Sie sonst VBS verwenden - Javascript ist der Spezialist in
Mathe und VBS die einzige Möglichkeit, um auf das System zuzugreifen
und die Verwendung von beiden Sprachen zeugt mehr von Intelligenz als
die kernigen Aussagen der Javascript oder VBS-Fetischisten, die dass
laufende Wechseln der Sprachen als Schwäche interpretieren...
Es geht wie gesagt um die Grundrechenarten + - * / und dann vielleicht
noch die obligatorischen Klammern (), weil der Grundsatz Punkt vor
Strichrechnung schon manchen Anfänger vor Probleme stellt -:)
Um einen Zähler einzubauen, ein Dropdownfeld oder Text aus einer
Textarea oder InputFeld zu ziehen brauchen Sie nun einmal ein paar
Hinweise:
Sub ergebnisScript
Dim datname15
datname15=thema.value
Dim edrechnungpro
Dim edrechnungcontra
Dim edrechnung
Dim gegenrechnungcontr
edrechnungpro=proArea.value
edrechnungcontra=contraArea.value
edrechnung=100*CLng(edrechnungpro)/(edrechnungpro + CLng(edrechnungcontra))
gegenrechnungcontr=100-edrechnung
document.all.ergebnisArea.value="Es
sprechen " & edrechnung & "Prozent für " & datname15 &
" und " & gegenrechnungcontr & "Prozent dagegen"
Diesmal nur ein Teilausschnitt aus einer Funktion
datname15=thema.value
Diese Zeile ist uns schon bekannt, nämlich der Inhalt eines Inputfeldes
mit dem Themennamen. Das ist jetzt nur interessant für die Ausgabe in
der letzten Zeile, wo in einem Text der Themenname in einer Textarea
angezeigt wird - also absolut mathefrei
Danach werden vier Variablen mit Dim eingeführt - der Name ist wieder einmal Schall und Rauch...
Was Sie jetzt nicht wissen können: Der Sternenhimmelstuermer missbrauchte die zwei Textareas (edrechnungpro=proArea.value und edrechnungcontra=contraArea.value)
zum Eintrag der Bewertungspunkte, die aus einem
Dropdownfeld stammten und addierte immer dort die Punkte.
Die beiden Textareas sind ja sowieso während der
Bearbeitung ausgeblendet und werden erst am Ende der HTA
durch Betätigung des Ergebnisbuttons nach der Rechnung eingeblendet -
dann aber mit einem Text, der die Zwischenrechnung nach Auswertung
überschreibt.
edrechnung=100*CLng(edrechnungpro)/(edrechnungpro + CLng(edrechnungcontra))
Hier steht die Berechnung, in diesem Fall wird der Prozentsatz nach der guten alten Formel berechnet.
Clng() ist kein Bestandteil der Formel, sondern das einzige wichtige, was Sie bei Berechnungen mit VBS im Hinterkopf behalten müssen:
Zahlen aus einer Textarea, Textdokumenten, Dropdownfeldern müssen immer
mit dem eben genannten Befehl verwendet werden, um überhaupt als Zahl
erkannt zu werden.
Die Prozentrechnungsformel stellt nur noch eine Herausforderung: Die
Addition hinter dem geteilt-Zeichen muss selbstverständlich in Klammern
gesetzt werden, damit erst die Summe gebildet wird - also
ganz normal Mathematik...
Mathe Teil 2
Ein Punktzähler
Wie es eben schon beschrieben wurde, können Textdokumente oder
Textareas ausgelesen und deren Werte addiert werden. Der Vorgang
verursacht ein wenig Schreibarbeit:
Dim rchng
Dim datname11
datname11=thema.value &"_zahl.txt"
Dim zahlpro11
zahlpro11=proArea.value
Dim fso11
set oFSO11=CreateObject("Scripting.FileSystemObject")
set oFile11=oFSO11.OpenTextFile(datname11,1)
text11=oFile11.ReadAll
rchng= CLng(text11) + CLng(zahlpro11)
document.all.proArea.value=rchng
oFile11.Close
Dim datname25
datname25=thema.value &"_prozahl.txt"
Dim fso25
Set fso25 = CreateObject("Scripting.FileSystemObject")
Set objFSO25 = CreateObject("Scripting.FileSystemObject")
objFSO25.CreateTextFile(datname25)
Set objFile25 = objFSO25.OpenTextFile(datname25, 2)
objFile25.WriteLine proArea.Value
objFile25.Close
End Sub
Im ersten Teil werden wie gewohnt mit Dim Variablen definiert. datname11=thema.value &"_zahl.txt" ist eines dieser berühmten Textdokumente, die beim Löschen erklärt wurden..
Der zweite und dritte Block ist für uns von Interesse.
Der Sternenhimmelstuermer zieht sich eine Zahl aus der Pro-Textarea(proArea.value), die der Sternenhimmelstuermer wie bereits erwähnt als Schmierzettel für die Rechnung missbraucht.
Danach öffnet der Sternenhimmelstuermer ein Textdokument (datname11,1), in dem eine alte Punktezahl steht, zu der er nun die neue Zahl addiert (rchng= CLng(text11) + CLng(zahlpro11)) . Beide Zahlen bekommen bei der Addition eine Sonderbehandlung mit dem Befehl CLng(), da die eine Zahl aus einem Textdokument stammt und die andere Zahl aus einer Textarea.
Danach wird das Ergebnis der Berechnung wieder in die Textarea geschrieben und überschreibt den alten Wert (document.all.proArea.value=rchng).
Die Zahl wird im dritten Block dann noch in ein Textdokument
geschrieben, da der neue Inhalt einer Textarea bekanntlich genau so
flüchtig wie RAM ist - will sagen, schließt man die Anwendung, sind die
Ergebnisse Futsch und VBS hat nun einmal die Möglichkeit den
Punktestand abzuspeichern - ganz ohne DOM-Modell, cookies oder sonstige
Ränkespiele in Javascript.
Die drei Blöcke kreierte der Sternenhimmelstuermer für sich und weiß
nicht wie andere es machen. In dem o. a. Beispiel sind alle
Variationen drinnen: Öffnen und auslesen eines Dokumente mit .ReadAll, und create textfile, auslesen einer Textarea wie gewohnt mit definierten Variablen (zahlpro11=proArea.value) und Ausgabe mit dem Pfad (document.all.proArea.value=rchng), wobei proArea die ID für die Textarea ist und der einzutragene value.
Fazit: Mit den althergebrachten Methoden können Sie leicht einen
Punktezähler erstellen. Mathematik beschränkt sich bei einem
Punktezähler dabei auf eine Zeile, bei der die Rechnung in eine
Variable geschrieben wurde (rchng= CLng(text11) + CLng(zahlpro11)) .
So eine unsichtbare Textarea ist dabei eine nützliche Hilfe, ohne auf
ein anderes Thema vorzugreifen einmal der Quellcode für eine
"unsichtbare Textarea:
<div><textarea name="contraArea" id="contraArea" style="visibility:hidden" rows="20" cols="30" ></textarea> </div><br>
im Body und die dazugehörige Funktion im JAVASCRIPT um die CSS
Anweisung unsichtbar auf sichtbar umzustellen (nur bei Bedarf,
natürlich kann man auch das Feld als Austauschcenter z. B. zwischen
Javascript und VBS immer für den User unsichtbar lassen - die
Funktionsweise ist deshalb in keiner Weise eingeschränkt:
<script type="text/javascript">
function showme () {
if (document.getElementById)
document.getElementById("contraArea").style.visibility = "visible";
}
</script>
, welches Vorzugsweise mit einer VBS Zeile aus einer Funktion mit der schlichten Zeile showme()
gestartet wurde.
Mathe Teil 3
Dropdownfelder, Hm, das dürfte nach den vorherigen Ausführungen wirklich keine Hürde sein,
im Body sehen Sie im Prinzip schon alles, worauf es ankommt!
<td
style="vertical-align: top; text-align:
center;"><div><br><br><select size="1"
name="DropDown1" id="DropDown1" onChange="zahlScript">
<option value="0">Punkt eingeben!</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select></div></div>
Der User sucht sich also eine Zahl von 1-10. Die blauen Zahlen vor dem
letzten Option sind der angezeigte Text, uns interessiert der Value,
nicht die sichtbaren Zahlen.
Mit onChange="zahlScript" wird das VB-Script gestartet.
Beim Wechsel wird automatisch ein Textdokument erstellt, welches die jeweilige Zahl des Dropdownfelds enthält:
.Sub zahlScript
datname10=thema.value &"_zahl.txt"
Set objFSO10 = CreateObject("Scripting.FileSystemObject")
objFSO10.CreateTextFile(datname10)
Set objFile10 = objFSO10.OpenTextFile(datname10, 2)
objFile10.WriteLine DropDown1.Value
objFile10.Close
End Sub
Jetzt wird es für den Sternenhimmelstuermer einfach, da er in der HTA
einfach den Wert an dieser Stelle in ein Textdokument schrieb und
danach wieder die Ausführungen von Mathe 2 greifen..., ja man muß nur
Zahlen aus Dropdownfeldern oder Textdokumenten wieder mit dem Befehl CLng() zu rechenbaren Zahlen machen - das muss an dieser Stelle wirklich nicht noch einmal durchexerziert werden...
---
Unsichtbare Objekte - mit CSS und Javascript kein Problem in einer HTA
Manchmal fragt sich der Sternenhimmelstuermer, warum er nicht viel mehr Javascriptanteile in den veröffentlichten HTAs sieht.
Der Wechsel zwischen sichtbaren und unsichtbaren Objekten im Body ist mit wenig Aufwand zu realisieren:
<div><textarea name="contraArea" id="contraArea" style="visibility:hidden" rows="20" cols="30" ></textarea> </div><br>
im Body und die dazugehörige Funktion im JAVASCRIPT um die CSS
Anweisung unsichtbar auf sichtbar umzustellen (nur bei Bedarf,
natürlich kann man auch das Feld als Austauschcenter z. B. zwischen
Javascript und VBS immer für den User unsichtbar lassen - die
Funktionsweise ist deshalb in keiner Weise eingeschränkt:
<script type="text/javascript">
function showme () {
if (document.getElementById)
document.getElementById("contraArea").style.visibility = "visible";
}
</script>
, welches Vorzugsweise mit einer VBS Zeile aus einer Funktion mit der schlichten Zeile showme()
gestartet wurde.
Das Javascript wurde gekürzt - Sie können alle Objekte mit ID (im Beispiel die Textarea mit der ID= contraArea) beliebig aus und einblenden: schauen Sie bei Self-HTML mal einfach nach...
Die Display - Methode testete der Sternenhimmelstuermer nicht - wozu?
Die meisten Methoden funktionieren auch in der HTA, obwohl die Ausnahme bekanntlich die Regel nicht immer bestätigt:
Beispiel: Als funktionierender Tip für die Veränderung von der Fenstergröße wird das Kommando resizeto gehandelt.
(Es gibt glaube ich sogar Seiten, die das anhand einer HTA erklären...)
Böse Falle, wenn man Tips versehentlich weiterverbreitet, ohne Sie selbst ausgiebig getestet zu haben. Resizeto hat die unschöne Eigenschaft, dass es mit dem Grundgerüst der HTA kolidiert, dass als windowsestate nur wenige Stufen kennt.
Die Folge ist, dass nachfolgende Funktionen auf einmal Fehlermeldungen
verursachen bzw. nicht mehr ausführbar sind (implementieren Sie den
Befehl in diese HTA - sie werden das dann sehen).
Wie gesagt, dass Fenster nimmt dann wirklich die gewünschte Größe an,
aber die Funktionalität der Funktionen geht dann verloren.
Workaround: Machen Sie es so wie alle Profis - css ist die bessere Alternative...
So, dass war schon alles erwähnenswerte, der Rest kann über die
Abandlung über die HTA nachgeschlagen werden - eines der
umfangreichsten Kompendien im Internet über die HTA als Gui - zufällig vom selben Autor geschrieben...
Der Sternenhimmelstuermer schrieb diese eher leichte HTA, um ein paar
Lücken im Bereich VBS zu schließen, obwohl man dabei immer wieder
betonen muss: HTA-VBS und VBS allgemein sind zwar fast identische paare
Schuhe, aber die Betonung liegt auf fast!!!
Kleine Änderungen in der Syntax führen zu unschönen Ergebnissen.