Erste Schritte in visualFORTH

Ein Klick auf "Form" lässt ein Pulldown-Menü erscheinen.

Klick auf "Open" öffnet ein Fenster mit dem Ordner "Projects".
Unsere visualFORTH-Files müssen in diesem Ordner abgelegt sein, damit wir die Turnkey-Funktion verwenden können.

Ein Doppel-Klick auf "Projects" zeigt uns den Inhalt dieses Ordners mit dem Beispiel "OneTest.ff", das wir uns anschauen wollen.

Ein Doppelklick auf "OneTest.ff" öffnet dieses Beispiel-Programm.

Ein Klick auf den kleinen blauen Läufer in der Menüzeile startet das Programm.

Ein Klick auf "Button1" lässt den berühmten Forth-Beep ertönen.

Nun schauen wir uns an, wie das zustande kam:

Form1 kann durch Klick auf beendet werden oder beiseite geschoben werden, damit wir diese Form wieder im Entwicklungs-Stadium sehen.

Ein Klick mit der rechten Maustaste auf "Button1" bringt ein Popup-Menü zum Vorschein.

Klick auf "Properties" lässt das Fenster "Properties+" erscheinen.

Dort sehen wir, dass im Schriftfeld "Function" das Wort "Beep" eingetragen ist.

Das ist bereits das ganze Geheimnis der Funktion.

Hier können wir nicht nur ein bereits bestehendes Wort eintragen, wir können auch ein neues Wort definieren, z.B. statt "Beep" das Wort "Test" eintragen.

Um diese Änderung wirksam werden zu lassen, genügt ein Klick auf "Apply".

Nun wollen wir definieren, was unser neues Wort "Test" tun soll.

Ein Klick auf "Ed" bringt ein neues Fenster, das Editier-Fenster „Edit Function“.

"Test" ist bereits eingetragen.
In das untere Schreibfeld können wir nun die Worte eintragen, die beim Klick auf den Pushbutton der Reihe nach ausgeführt werden sollen.

Als Beispiel schreibe ich gerne:

             Beep 300 ms Beep 100 ms Beep

Ein Klick auf "Apply" speichert die Eingabe, ein Klick auf kleinen blauen Läufer , ein Klick auf den Pushbutton, und unser Beep ... Beep ... Beep ertönt.
Richtig einfach, oder?

Selbstverständlich können wir auch umfangreichere Programme einbinden.

Wir klicken erneut auf "Ed", um unser Editier-Fenster wieder zu bekommen, oder wir holen es uns einfach aus dem Fenster-Stapel wieder hervor.

Wenn wir ein Programm erstellt haben, das wir mit einer GUI-Bedien-Oberfläche versehen wollen, sagen wir mal, dieses Programm heißt "MyProgram.f", dann tragen wir in das obere Schreibfeld

             needs MyProgram.f

ein, wobei MyProgram.f ein bereits vorbereitetes Forth-Programm ist.


Wir können in "Requirements" auch Constants, Values, Variable und Wort-Definitionen (in der üblichen Schreibweise mit Doppelpunkt am Anfang und Semikolon am Ende) eingetragen werden, soweit der Speicherplatz von 127 Bytes reicht.

Derzeit gibt es noch einige "Bugs", die noch bereinigt werden sollten.

Diese Bugs haben mich bei meiner Arbeit an einem größeren Projekt, das ich bereits mit visualFORTH erstellt habe, allerdings nicht behindert.

Gelegentlich gibt es eine Fehlermeldung, ein Klick auf die Console und Betätigen der Eingabetaste, und es geht weiter. Manchmal allerdings wird an dieser Stelle visualFORTH abgebrochen.


Es empfiehlt sich daher, nach jedem Programmier-Fortschritt (oder auch zwischendurch) die erreichte Arbeit mit Klick auf "Save all modified" (im Form-Menü) zu sichern.

Eine weitere wichtige Mitteilung ist die Speicherbegrenzung im Edit-Fenster auf 127 Zeichen, wobei für jede neue Zeile zwei Zeichen für CR-LF mitzuzählen sind.

Normalerweise reicht diese Zahl aus. Es wird eine Warnung gegeben, wenn zu viele Zeichen eingetragen werden.

Diese Begrenzung ist zu leicht zu verschmerzen, denn der große Vorteil dieser Eingabe ist, dass alles in einem File, im .ff-File, gespeichert ist.

In den wenigsten Fällen werden mehr als 127 Zeichen benötigt.

Mein erstes Testprogramm war ein "Taschenrechner" mit polnischer Notation - wie bei Forth üblich, und für dessen komplette Funktion mit allem Drum und Dran hat dieser Platz ausgereicht. Allerdings habe ich die Definitionen stark modularisiert und möglichst kurze Namen verwendet.

Weiter gehts ...

Um visualFORTH zu beenden, Klick auf "Exit VisualFORTH" im "Form"-Menü, oder - wie sollte es auch anders sein - <Alt>+F4 beendet das Programm.
Beim Beenden kommt eine Erinnerung zum Abspeichern, falls das vergessen wurde.



Auf ein Neues!

Diese Übung nun zeigt von Anfang an, wie ein Windows-GUI-Programm mit visualFORTH erstellt wird.

Ein Doppel-Klick auf den Ordner "visualFORTH" öffnet diesen und zeigt darin enthaltene Programme und Ordner. Ein Doppel-Klick auf "visualFORTH.exe" öffnet visualFORTH.

Mit Klick auf Menü "Form" und "New" öffnen wir eine neue Form.

Wir setzen einen PushButton in diese Form mit Klick auf das Symbol rechts in der Menü-Leiste.

Wichtig ist es, die Maustaste nach dem Anklicken loszulassen, wir haben hier
kein "Drag-andDrop"-System!

Nach dem Anklicken zeigt das "PushButton"-Symbol, dass wir es angeklickt hatten.

Dann bringen wir den Mauszeiger innerhalb der vorher geöffneten Form an die Stelle, an die der PushButton lokalisiert werden soll.

Ein Klick mit der linken Maustaste, und schon haben wir den ersten Pushbutton.

Dann ein Klick mit der rechten Maustaste auf das PushButton-Symbol in der Form, und das schon bekannte Popup-Menü mit "Properties" erscheint.

Ein Klick mit der linken Maustaste auf "Properties", und wir haben wieder das "Properties+" Fenster.

Im "Properties+" Fenster sind die Position und die Abmessungen des gerade eingestellten PushButtons enthalten und können verändert werden.

Um die Position oder die Abmessungen zu verändern, wird die neue Zahl in das entsprechende Feld eingetragen, und mit Klick auf "Apply" übernimmt das System diese Werte und der PushButton verändert sich dementsprechend.
Derzeit ist 1024 die groesste Zahl, die eingegeben werden kann.

Es gibt noch weitere Möglichkeiten, aber darüber ein andermal.

Jetzt können wir wieder zum Testen unser berühmtes "Beep" eintragen:

Wenn diese Funktion nur local sein soll, entfernen wir das Häkchen bei "Global" mit einem Klick mit der linken Maustaste.

Mit Klick auf "Apply" wird die Funktion übernommen, erkennbar daran, dass "Ed" nun freigegeben ist.

Ein Klick auf "Ed" öffnet wieder das Editier-Fenster.
Wie es hier weitergehen kann, wurde ja bereits oben beschrieben.

Mit "Close active Form" im "Form"-Menu werden wir aufgefordert, unser neues Design abzuspeichern. Wichtig ist es, unser File im Ordner "Projects" abzuspeichern, damit wir auf Knopfdruck ein EXE-File erstellen können. Doppelklick auf "Projects" öffnet diesen Ordner und wir speichern unser Projekt.




EXE-File-Erstellung


Nun kommen wir zur automatischen Erstellung des EXE-Files.

In visualFORTH öffnen wir mit "Form" und "Open" wieder unser File. "Open Form File" erscheint.
Klick auf "mybox.ff" im Fenster und Klick auf "Open" öffnet unser File.

Ein Klick auf Run startet den Test. Dieser Test ist wichtig, denn dadurch ist garantiert, dass auch das EXE-File funktioniert.

Ein Klick auf "Button1", und ein Beep ertönt, wie beim letzten Mal.

Ein Exe-File wird erzeugt mit Klick auf das Symbol zwischen "Test" und "Help". Einige Sekunden spaeter ist das fertige EXE-File im visualFORTH-Ordner zu finden.

Hier wie es funktioniert:
Mit Klick auf “Make .exe-File of active Form” wird zunaechst ein .ftk (Forth TurnKey-File) erzeugt. Alle zur Erzeugung eines Turnkey-Programms erforderlichen Daten werden damit einem .frm-File hinzugefuegt.
Sollten Bitmaps verwendet worden sein, so werden diese nachtraeglich in das EXE-file aufgenommen.

Dieses .ftk-File kann mit fload von Win32Forth geladen werden und generiert dann ein EXE-File.
Dies ermoeglicht die Fehlersuche, falls Probleme auftauchen (was eigentlich nur passieren kann, wenn vorher kein Test mit “Run” durchgefuehrt wurde).
Wenn Probleme auftauchen, sollte mit Klick auf ein .frm-File erzeugt werden, und dieses .frm-File kann mit fload von Win32Forth zur Fehlersuche (debug) geladen werden, ohne dass ein EXE-File erzeugt wird.




Button-Arrays


Einige Funktionen erleichtern die Erstellung eines Arrays von Pushbuttons, Bitmaps oder anderer Controls, insgesamt 256 von einer Sorte, bis zu 32 in einer Reihe oder Spalte. Die Beispiele Textbox64.ff und LED-Matrix-16x16.ff zeigen wie es aussehen kann.

Hier die Anleitung dazu:
Ein Array sollte stets als erstes nach dem Öffnen einer Form erstellt werden.
Ein rechter Maus-Klick auf die Form bringt das Popup-Menu, und ein linker Maus-Klick auf “Group Action” laesst Properties+, Action window, erscheinen.
Dort wird die gewuenschte Zahl der Reihen und Spalten eingestellt, dann Pushbutton (oder eine andere Control) anklicken und mit linkem Mausklick links oben im geplanten Array positionieren. Alle Array-Bestandteile liegen dann zunaechst in einem Stapel.
Jetzt wird durch Druecken und Festhalten der linken Maustaste ein Rahmen gezogen, der die Position und Groesse des fertigzustellenden Arrays bestimmt. Sollten beim erstenmal Position oder Groesse des Rahmens nicht stimmen, kann nach Loslassen der linken Maustaste der Rahmen erneut gezogen werden.

Mit einem Klick auf “To Box” wird das Array gebildet.

Weitere Moeglichkeiten:
Wenn der Control-Stapel gesetzt ist, kann der obere Control mit Funktionen, Variablen, etc. oder einer Bitmap ergaenzt werden - siehe unser Beispiel LedBox.ff. Mit linkem Maus-Klick auf “To Box” werden diese Ergaenzungen auf alle Controls in diesem Stapel uebertragen und die Erstellung des Arrays gestartet.

Mit einem Klick auf “To Box” bestimmt der Rahmen Groesse und Position des zu erstellenden Arrays.

Die Groesse kann auch durch Setzen der Dimensionen mit “Width” und “Height” der obersten Control im Stapel bestimmt werden.

Fuer diesen Fall wird das Array nach Ziehen des Rahmens mit Klick auf Arrange “Horizontally” oder “Vertically” anstelle von “To Box” gestartet. Alle Controls werden dann mit horizontaler bzw. vertikaler Numerierung entsprechend der Groesse und Position des obersten Elementes erzeugt. In diesem Falle braucht der Rahmen nur den Stapel zu umranden.

Der Abstand der Controls wird mit “Spacing” eingestellt, fuer das LED-Array wurde Spacing auf Null gesetzt, die Normal-Einstellung ist zwei, wie abgebildet.

Um eine Gruppe oder einen Stapel von Controls zu loeschen, wird ein Rahmen um die zu loeschenden Elemente gezogen, und ein Klick auf “Delete Controls” im Popup-Menu, dass bei rechtem Maus-Klick auf die Form ausserhalb des Rahmens erscheint, startet den Loeschvorgang.

Sollte ein Array spaeter erstellt werden, ist es wichtig, die bisherige Arbeit mit “Save all modified” zu speichern.




Bitmaps


Es gibt zwei Controls mit Bitmap, “Bitmap Button” und “Static Bitmap”.
In Properties+, Bitmap: kann mit Klick auf eine Bitmap selektiert werden. Im Falle eines Bitmap-Arrays erhaelt jede Control die gleiche Bitmap – die Selektion muss allerdings vor der Fertigstellung erfolgen.

Es ist ganz einfach, die Bitmap per Programm zu aendern:

Als erstes muss ein neuer Bitmap-Handle definiert werden.
Nehmen wir an, als Bitmap soll nun MeinBild.bmp verwendet werden, dann sieht die Erstellung des Bitmap-Handles so aus:

z" MeinBild.bmp" LoadBitmap value MeinBild


Das Setzen der Bitmap ist ebenfalls ganz einfach.
Um dieses Bild zur Ansicht zu bringen, reicht es, folgendes einzugeben:


Meinbild 1 Bitmap! \ damit erscheint Meinbild auf Bitmap1


Bitmap Handles werden automatisch erstellt, wenn bei einem Bitmap-Button oder einer Static-Bitmap eine Bitmap definiert wurde.

Handles fuer weitere Bitmaps werden automatisch erstellt, wenn diese Bitmaps - inclusive .bmp-Endung - als Worte in Properties+ "Form" "Add Words" "This Form needs:" eingetragen werden (siehe Beispiel LedBox.ff).

Die unter Projects mitgelieferten Beispiele LEDswitch und LedBox enthalten alle fuer das Arbeiten mit Bitmaps wesentlichen Elemente.

Mit der “List Controls” Funktion kann die Nummer der Bitmap ermittelt werden.

Bitmaps werden automatisch in ein EXE-File aufgenommen (siehe oben “One-Click-EXE-File”).




Start-/Stop-Funktion


Mit Forth ist alles möglich, also können wir unsere Form auch ganz einfach - nach dem Compilieren mit "Test active Form" - von der Forth Console aus Starten und Stoppen. Wirklich ganz einfach:

Start <Enter>

startet die From, und

Stop <Enter>

Schliesst die Form. Cool, oder?
Selbstverständlich kann die Form auch von einem Programm aus gestartet und gestoppt werden, so wie es bei Forth üblich ist.

Frage: Was ist wenn mehrere Formen offen sind?

Auch da ist vorgesorgt. Start und Stop Öffnen und Schliessen stets die zuletzt compilierte Form. Wenn eine vorher geöffnete Form gestartet oder gestoppt werden soll, so wird ganz einfach der Name des Files dieser Form vorausgestellt. Wenn das File zum Beispiel Form1.ff heisst, dann wird diese Form1 mit Form1-Start gestartet und mit Form1-Stop gestoppt. Einfacher geht's doch nicht, oder?
Die gleiche Methode funktioniert natürlich auch, wenn nur eine Form compiliert wurde.




Zooming-Funktion


Mit Forth ist alles möglich, also können wir unsere Form auch zoomen - grösser oder kleiner werden lassen. Voraussetzung dafür ist, dass wir unter "Options" "Set Preferences" ein Häkchen bei "Compiler Settings" vor "Zooming" gemacht haben.
Wie die Rubrik "Compiler Settings" schon ahnen lässt, sorgt der Compiler dafür, dass das Zoomen moeglich gemacht wird. Diese Schaltmöglichkeit besteht deshalb, weil das Zooming das compilierte File u.U. wesentlich grösser werden und unübersichtlich werden lässt. Also muss das Häkchen vor "Zooming" gemacht werden, bevor "Test active Form" angeklickt wird, und auch vor Starten einer One-Click-Exe.

Wenn die Form gestartet ist, kann durch Eingeben des Zoomfaktors in der Console (Öffnen über "Tools", "Forth Console" oder <Ctrl>+F) die Grösse verändert werden:

75 %Zoom <Enter>

Cool, oder? Geht natürlich auch mit 150 %Zoom oder irgend einer anderen Zahl.
Wenn die Zahl zu gross wird, kann sein, dass die Form verschwindet. Aber mit 100 %Zoom kommt sie wieder zurueck!
Selbstverständlich kann, wenn die Form mit Zooming compiliert wurde, die Grösse auch von einem Programm aus verändert werden, so wie es bei Forth üblich ist.




Listing-Funktionen


Drei Listing-Funktionen helfen bei der Programm-Entwicklung:
Im Menue “Control” gibt es “List Controls” und “List Functions”, wahlweise wird in die Console oder auf Clipboard kopiert.
Mit dem Popup Menu, das mit rechtem Mausklick auf die Form erscheint, wird mit linkem Mausklick auf “View/Edit Source” der automatisch generierte Source Code fuer diese Form angezeigt. Dieser Code kann editiert und als separates Forth-File gespeichert werden, ohne die erstellte Forth-Form zu beeinflussen. Diese Funktion ist fuer Testzwecke gedacht.




Anmerkungen


Diese Alpha-Version ist sorgfaeltig getestet worden. Dennoch koennen Fehler (bugs) enthalten sein. Deshalb sollte die Arbeit regelmaessig gespeichert werden, insbesondere vor Start einer besonderen Aktion, wie z.B. der Erstellung eines Arrays, der Loeschung einer Gruppe von Elementen, oder der Erzeugung eines EXE-Files.

Normalerweise wird ein Fehler auf der Console angezeigt. Ein Klick auf die Console und Druecken der Eingabe-Taste, und der Fall ist meist erledigt, manchmal aber wird visualFORTH abgebrochen. Wegen dieses gelegentlichen Problems empfehle ich dringend, die Arbeit regelmaessig und insbesondere vor speziellen Aktionen abzuspeichern.

There you find: the original ForthForm-Notes

Viel Spass beim Testen!

Fuer Rueckfragen, Bemerkungen, Verbesserungs- und Ergaenzungs-Vorschlaege: visualFORTH@yahoogroups.de

Jeder ist zu unserer visualFORTH-Gruppe herzlich eingeladen: http://de.groups.yahoo.com/group/visualFORTH/

Diese visualFORTH-Gruppe ist eine deutsch- und englischsprachige Forth-Gruppe und wird von mir betreut.


29. Juli 2009 Dirk Bruehl

4. Mai 2010 - Version 0.01.14