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.



 

Impressum
Datenschutz