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