Wenn man unter Windows ein Programm startet, öffnet sich auf dem Bildschirm sein Programmfenster, sein Formular. Die Formulare von verschiedenen Programmen unterscheiden sich natürlich voneinander, sie sind beispielsweise verschieden groß, haben verschiedene Farben, und es sind verschiedene Dinge darauf zu sehen. Die Besonderheiten, die das Fenster selbst betreffen, wie Größe, Farbe, Titel usw. nennt man die Eigenschaften des Fensters. Und die Dinge, die innen im Fenster zu sehen sind, meistens Texte, Bilder, Icons oder ähnliches, nennt man Objekte oder Steuerelemente. Diese Objekte selbst haben auch wieder Eigenschaften wie Länge und Breite, Farbe, usw.
Wenn ein Programm gestartet wurde und sein Formular auf dem Bildschirm geöffnet ist, setzt sich das Programm zur Ruhe und wartet nur noch darauf, daß irgend etwas «passiert», daß zum Beispiel in das Formular geklickt wird, Menüpunkte oder Icons angeklickt werden oder ähnliches. Wenn so etwas passiert, nennt man das ein Ereignis. Für jedes Ereignis, das unser Programm interessiert, hat der Programmierer (wir!) in einer Computersprache wie Basic ein Programmstückchen geschrieben, das jedesmal ausgeführt wird, wenn das Ereignis «eintrifft»: eine Ereignis-Prozedur-. Mit dem Wort Prozedur verbindest Du wahrscheinlich bisher eher Dinge wie den Check eines Flugzeugs vor dem Start durch die Piloten oder vielleicht auch das alljährliche Geburtstagskaffeetrinken mit anschließendem Minigolf bei Onkel Alfons. Kurz: Prozeduren sind Vorgänge, die wie nach einer Art Kochrezept immer ähnlich ablaufen. Und ungefähr so ist es auch beim Programmieren: Prozeduren sind Schritt-für-Schritt-Anweisungen für den dummen Computer, der ja nichts anderes kann, als blind viele einfache Befehle zu befolgen - das allerdings sehr schnell.
Wenn also zum Beispiel in einem Malprogramm das Ereignis eintrifft, daß der Benutzer den Menüpunkt «Speichern» angeklickt hat, muß die Ereignisprozedur, die jetzt ausgeführt wird, aus Befehlen bestehen, die den Computer dazu bringen, das gemalte Bild abzuspeichern.
Ein Visual-Basic-Programm, auch Projekt genannt, besteht also aus mindestens einem Formular (mit bestimmten Eigenschaften), den Objekten (mit deren Eigenschaften) und aus mehreren Ereignisprozeduren für die verschiedenen Funktionen des Programms. Man erstellt mit Visual Basic Programme, indem man zuerst ein Formular mit verschiedenen Objekten darauf entwirft und dann für die einzelnen Objekte die Ereignisprozeduren schreibt, die das Fenster «zum Leben erwecken». Das ist das eigentliche «Programmieren».
Um sein Programm zu starten, zu unterbrechen oder zu beenden,
kann man entweder das Menü «Ausführen» benutzen
oder die drei Icons oben am Bildschirm, die aussehen wie auf einem
Kassettenrecorder. Man kann ein Programm jederzeit stoppen, indem
man die Tasten Strg und Untbr gleichzeitig drückt.
Das gleiche bewirkt man mit dem «Pause»-Icon, aber das
funktioniert nur, solange das Programm gerade auf ein Ereignis
wartet. In beiden Fällen kann man jedenfalls danach mit dem
«Start»-Icon an der gleichen Stelle im Programm weitermachen.
Wenn man ein Programm allerdings so unterbrochen hat, kann man
es nur begrenzt ändern: man kann zwar die Prozeduren - also
den in der Programmiersprache Basic geschriebenen "Code"
- umschreiben, aber nicht an den verschiedenen Objekten herumspielen
oder Eigenschaften verändern: dazu muß man das Programm
mit dem dritten Icon, dem "Stop-Knopf" beenden. Ob man
sein Programm gerade gestartet, unterbrochen oder beendet hat,
kann man ganz oben auf dem Bildschirm in der Titelzeile sehen:
Hinter «Visual Basic» steht dort in eckigen Klammern
entweder «ausführen», wenn das Programm
gerade läuft, «unterbrechen», wenn das Programm
unterbrochen, aber noch nicht endgültig gestoppt ist, oder
«entwerfen», wenn das Programm beendet (oder
nie gestartet) wurde. Nur wenn «entwerfen»
in der Titelzeile steht (man sagt auch, Visual Basic ist im «Entwurfsmodus»),
kann man Objekte und ihre Eigenschaften verändern.
Um sein mühsam erstelltes Projekt vor dem traurigen Tod beim Ausschalten des Computers zu bewahren, muß man es vorher auf Festplatte oder Diskette speichern. Speichern kann man Projekte, indem man im «Datei»-Menü den Punkt «Projekt speichern» wählt. Wenn man stattdessen den Menüpunkt «Projekt speichern unter...» wählt, kann man dem Projekt vorher noch einen neuen Namen geben. Interessant zu wissen ist noch, daß Visual Basic ein Projekt nicht in eine einzige Datei speichert, sondern mindestens zwei Dateien anlegt: eine «Form»-Datei für das Formular, deren Name auf .frm endet, und eine «Projekt»-Datei für das Gesamtprojekt, deren Name auf .mak endet und die nur ein bißchen Verwaltungskram enthält. Für beide darf/muß man sich Namen ausdenken, die nur höchstens acht Buchstaben haben dürfen. Vorsicht: Wenn man statt "Projekt speichern" den Menüpunkt "Datei speichern" benutzt, wird nur die .frm-Datei gespeichert, und man kann das Programm dann manchmal nicht mehr laden. Also bitte nur "Projekt speichern..." benutzen, außer wenn man genau weiß, was man tut!
Wenn man das Projekt beim nächsten Mal wieder laden will, wählt man den Menüpunkt «Datei/Projekt öffnen...», sucht im Fenster, das daraufhin erscheint, den Namen seines Projektes heraus und klickt ihn an. Wenn man dann «OK» klickt, wird das Projekt geladen. Mehr Infos zu Dateien, Laufwerken und diesem Fenster gibt's im Anhang A.
Das Form(ular)-Fenster ist die
Vorlage für das spätere Programmfenster: hier entwirft
man die «Benutzeroberfläche» seines Programms.
Man kann das Form-Fenster auf dem Bildschirm herumschieben, verkleinern
und vergrößern, seine Eigenschaften im Eigenschaftenfenster
ändern, Objekte von der Objektsammlung darauf anordnen und
im Editorfenster Ereignisprozeduren dafür schreiben. Das
Formular selbst gilt übrigens auch als Objekt, sozusagen
als Ober-Objekt. Eines der Objekte ist immer das «aktuelle
Objekt», und dessen Eigenschaften
werden im Eigenschaftenfenster aufgelistet. Wenn man ein Objekt
anklickt, wird es zum aktuellen Objekt. Man erkennt das meist
daran, daß es umrahmt oder sonst irgendwie markiert ist.
Hier werden die Eigenschaften
des aktuellen Objekts (s. o.) aufgelistet. Die Eigenschaft, die
blau dargestellt wird, kann oben in der Zeile geändert werden.
Manchmal muß man den Eintrag selber eingeben, manchmal kann
man aus einer Liste wählen, die man mit dem Icon rechts im
Eingabefeld anzeigen läßt. Mit dem «Haken»-Icon
wird die Änderung in die Liste übernommen, mit dem «Kreuz»-Icon
kann sie rückgängig gemacht werden. So haben Formulare
zum Beispiel eine «Caption»-Eigenschaft
(caption heißt auf deutsch «Titel»), die
bestimmt, was in der Titelzeile
des Formulars steht. Wenn man die entsprechende Zeile im Eigenschaftenfenster
anklickt, kann man oben einen neuen Titel eingeben, und wenn man
danach den Haken anklickt oder die Eingabe-Taste drückt,
ändert sich die Titelzeile des Formfensters und es erscheint
das, was man eingegeben hat.
(Auch Werkzeugsammlung
genannt): Hier kann man die Objekte aussuchen, die man auf sein
Formular plazieren will: Um zum Beispiel eine Linie in das Fenster
zu zeichnen, klickt man auf das Icon mit der Linie, klickt im
Formular an die Stelle, wo die Linie anfangen soll, und zieht
die Maus bei gedrücktem Knopf dahin, wo das Ende sein soll.
Fertig! Die einzelnen Objekte werden später noch nach und
nach beschrieben.
Im Editorfenster werden
die Ereignisprozeduren geschrieben (und später andere Basic-Programmteile).
Man kann das Editorfenster auch Code-Fenster nennen, denn
Texte in einer Programmiersprache heißen auch «Code».
Das Code-Fenster öffnet sich, wenn man auf das Objekt, für
das man eine Ereignisprozedur schreiben will, doppelklickt, oder
wenn man im Projektfenster auf «Code
anzeigen» klickt. Oben links im Code-Fenster steht das Objekt
und oben links dessen Ereignis, für das man gerade eine Prozedur
schreibt. Man sieht also immer sofort, wann die Befehle, die man
gerade schreibt, ausgeführt werden. Mit der Maus kann man
Text markieren, indem man mit gedrückter
Maustaste darüberstreift. Wenn man mit dem Cursor eine Zeile
verläßt, prüft Visual Basic, ob sie in richtigem
Basic geschrieben und vollständig ist. Wenn nicht, gibt's
gleich eine Fehlermeldung.
Die wichtigsten Tastenfunktionen im Editorfenster:
Strg+C Markierten Text in die Zwischenablage kopieren. Strg+X Markierten Text ausschneiden und in die Zwischenablage legen. Entf Markierten Text löschen und nicht in die Zwischenablage legen. Strg+V Den Inhalt der Zwischenablage an der Cursorposition einfügen. Strg+Z Die letzte Aktion in der Zeile rückgängig machen. Strg+N Eine leere Zeile oberhalb der aktiven Zeile einfügen. Strg+Y Cursorzeile ausschneiden und in die Zwischenablage übertragen. Bild-Nach-Unten Seitenweise durch alle ProzedurenProzedurdurch alle blättern weiterblättern. Bild-Nach-Oben Seitenweise durch alle Prozeduren zurückblättern. F2 Liste der Prozeduren des Projekts anzeigen Prozeduralle anzeigen F5 Projekt ausführen (oder fortsetzen, falls unterbrochen).
(sprich: Diebag) Das Debug-Fenster ist eigentlich als Hilfe bei der Suche nach Fehlern (Computerslang: bugs) im Programm gedacht. Es eignet sich aber auch sehr gut, um mal schnell einzelne Basic-Befehle auszuprobieren. Dieses Fenster erscheint jedesmal, wenn man sein Programm startet, rechts unten auf dem Bildschirm. Wenn man sein Programm unterbricht (Visual Basic ist dann im Unterbrechungsmodus, s.o.), wird dieses Fenster von Visual Basic nach vorne geholt, und es erscheint ein Cursor darauf. Hier kann man dann direkt Basic-Programmzeilen eingeben, und wenn man die Return-Taste drückt, wird diese Befehlszeile sofort ausgeführt! Der Print-Befehl (siehe unten) schreibt in diesem Falle übrigens nicht ins Formular, sondern direkt unter die Befehlszeile ins Debug-Fenster, was auch sehr praktisch ist.
Wenn man die Farbe irgendeines Objekts verändern will, doppelklickt man normalerweise auf die entsprechende Farb-Eigenschaft im Eigenschaftenfenster, und es erscheint eine «Farbpalette» mit Standardfarben, aus denen man eine aussucht. Wenn Dir die dort angebotenen Farben nicht gefallen, und Du ein blaueres Grün oder ein gelberes Rot brauchst, kannst Du mit Hilfe des eigentlichen Farbpalettenfensters ähnlich wie auf einer Malerpalette eigene Farben «mischen». Auf den Bildschirm bringt man dieses Fenster, indem man den Menüpunkt «Fenster/Farbpalette» wählt. Wie man am Computer Farben mischt, werde ich hier nicht erklären; laß' es Dir von Deinem Kursleiter zeigen, es ist nicht schwer.
Dieses Fenster braucht man fast nur, wenn man kompliziertere Programme schreibt, die zum Beispiel aus mehreren Formularen bestehen. Dann kann man mit diesem Fenster zwischen den einzelnen Formularen umschalten. Wir werden das Fenster noch nicht verwenden. Nur eins: Wenn das Form-Fenster einmal nicht zu sehen ist, kann man im Projekt-Fenster auf die Schaltfläche "Form anzeigen" klicken, und es erscheint wieder.
Prozeduren beginnen in Basic mit dem Befehl Sub, gefolgt vom Namen der Prozedur und (), und sie enden mit End Sub. (engl. subroutine: Unter-Programm) Dazwischen stehen die Befehle, die zur Prozedur gehören. Sie werden, wenn die Prozedur ausgeführt wird, einfach nacheinander «befolgt».
Die meisten Prozeduren sind Ereignisprozeduren: für jedes Ereignis, auf das das Programm reagieren soll, muß man eine Ereignisprozedur schreiben. Dabei werden Sub, der Prozedurname, () und End Sub schon von Visual Basic vorgegeben.
(engl. load: laden) Die Ereignisprozedur Form_Load wird jedesmal beim Start des Programms ausgeführt, bevor das Formular auf den Bildschirm gebracht wird. Es ist deshalb zwecklos, in dieser Prozedur schon etwas in das Fenster schreiben oder malen zu wollen (mit Print o.ä.), denn das wird einfach nicht gemacht. Das Fenster ist halt noch nicht da!
Ein Click-Ereignis tritt auf, wenn mit der linken Maustaste auf ein Objekt geklickt wurde. Wenn der Benutzer auf ein Steuerelement im Formular geklickt hat, wird die Click-Ereignisprozedur dieses Objekts aufgerufen. Klickt man in den "Hintergrund" der Form, gibt es ein Form_Click-Ereignis, das eine eigene Ereignisprozedur haben kann.
Dieses Ereignis tritt auf, wenn mit der Maus zweimal kurz hintereinander in ein Objekt geklickt wurde. Vorsicht: beim ersten der beiden Mausklicks tritt trotzdem außerdem noch ein Click-Ereignis ein, beim zweiten dann nicht mehr!
(engl. print: drucken) Mit dem Print-Befehl kann man von einer Prozedur aus Texte in das Formular schreiben. Der Text muß dabei in Anführungszeichen (") stehen. Beispiel:
Print "Hallo, Du da vorm Bildschirm!"
schreibt ins Formular:
Hallo, Du da vorm Bildschirm!
Den Print-Befehl kann man auch zum Rechnen verwenden:
Print "413 + 512 sind genau" Print 413 + 512
ergibt im Formular:
413 + 512 sind genau
925
Alles, was hinter dem Print-Befehl zwischen zwei Anführungszeichen steht, wird beim Ausführen vom Computer Buchstabe für Buchstabe, Zahl für Zahl und Zeichen für Zeichen genauso «abgeschrieben». Was hinter dem Print-Befehl dagegen ohne Anführungszeichen steht, muß in der Programmiersprache Basic geschrieben sein und wird vom Computer «übersetzt»: so ist zum Beispiel 413 + 512 Basic und bedeutet für den Computer «das Ergebnis von 413 plus 512». Und dieses Ergebnis soll nun, das sagt der Print-Befehl, im Fenster ausgegeben werden. Deshalb steht dort dann «925».
Mit dem Print-Befehl kann man auch Werte von Eigenschaften oder Variablenwerte (s.u.) ausgeben:
Print Form1.Caption
schreibt genau das ins Form-Fenster, was auch in seiner Titelzeile steht, denn Form1.Caption ist Basic und bedeutet für den Computer: «die Caption-Eigenschaft des Formulars mit dem Namen Form1». Und was kommt wohl bei dem Befehl Print "Form1.Caption" heraus?
Noch drei Infos zum Print-Befehl:
1. Malnehmen und Teilen tut man in Basic mit dem Stern * und dem Schrägstrich /. Außerdem kennt der Computer auch Dezimalbrüche, allerdings muß man in Basic statt des Kommas einen Punkt verwenden, wie in England und den USA üblich.
Print 8 / 2 Print 3 * 2.5
ergibt
4
7,5
Im Ergebnis, das ausgegeben wird, wird die Zahl 7,5 dann übrigens doch mit Komma geschrieben! Nur im Basic-Code selbst muß man den Punkt verwenden.
2. Wenn man mehrere Sachen in einer Zeile im Fenster ausgeben will, schreibt man in der Print-Befehlszeile Strichpunkte (= Semikolons = ; ; ;) dazwischen:
Print "1 + 1 sind immer noch "; 1 + 1; Print ", und drei mal null ist "; 3 * 0
ergibt:
1 + 1 sind immer noch 2, und drei mal null ist 0
3. Wenn man Text einrücken möchte, kann man nach Print die Tab(...)-Anweisung verwenden. Der Text wird um so viele Leerzeichen eingerückt, wie es in der Klammer hinter dem Tab steht:
Print Tab(10) "Eins steht fest: Der Ball ist rund!" Print Tab(10) "Huhu!"; Tab(30) "Prfffz!"
ergibt:
Eins steht fest: Der Ball ist rund!
Huhu! Prfffz!
Zwischen «Huhu!» und linkem Rand sind 10 Leerzeichen Platz, zwischen «Prfffz!» und linkem Rand (!) sind 30 Leerzeichen Platz. Vorsicht: die Zeichen auf dem Bildschirm sind unterschiedlich breit; ein W ist breiter als ein i. Deshalb passen zwischen die Position 10 und Position 30 nicht unbedingt 20 Buchstaben!
Mit diesen Grafikbefehlen kann man richtig nette Grafiken in seine Formulare zeichnen. Um dem Computer dabei in Zahlen sagen zu können, wohin er denn zeichnen soll, benutzt man Koordinaten. Den Umgang mit Koordinaten lernt Ihr im Kurs.
Abstände auf dem Bildschirm, wie es Koordinaten ja sind, werden in Visual Basic nicht in Zentimetern gemessen, sondern in einer speziellen Maßeinheit namens «Twips ». Ein Twip ist ein sehr kleiner Abstand: schau Dir einmal die vielen Rasterpunkte, die im Entwurfsmodus auf das Formular gezeichnet sind, an. Der Abstand zwischen zwei Rasterpunkten. die nebeneinander liegen, sind 120 Twips!
Um nun also eine Linie zu ziehen, muß man ihren Anfangs- und Endpunkt in Koordinaten angeben. Beispiel:
Line (1000,1500)-(5000,1500)
Anfangspunkt Endpunkt
Mit diesem Befehl wird eine horizontale Linie gezogen, denn Anfangs- und Endpunkt haben den gleichen Abstand zum oberen Rand des Fensters (1500 Twips). Der Anfang der Linie ist 1000 Twips vom linken Rand entfernt, das Ende der Linie hingegen 5000 Twips. Also ist die Linie 4000 Twips lang.
Wenn man will, kann man noch die Farbe angeben, in der gezeichnet werden soll (Normalerweise schwarz). Dazu muß man allerdings wissen, wie Windows mit Farben umgeht: im Computer gibt es für jede Farbe, die der Computer kennt, einfach eine Zahl, denn Zahlen kann der Computer ja bekanntlich besonders gut verarbeiten. Für uns ist es aber weniger leicht zu verstehen, daß ein helles Schokobraun der Zahl 8887245 entspricht, deswegen gibt es in Basic ein Zwischending: die RGB-Funktion. Mit der erklärt man dem Computer, wie er ein Farbe «mischen» soll. Bei Fernsehern und Computermonitoren ist nämlich jede Farbe eine Mischung aus einem Rot-, einem Grün- und einem Blauanteil. In jeder Farbe ist unterschiedlich viel von jedem Anteil enthalten. Allerdings funktioniert dieses Mischen nicht genau wie beim Tuschkasten: wenn man zum Beispiel von rot, grün und blau gleichviel mischt, kommt bei dieser Mischmethode ein Grau dabei heraus.
Line (1000,1500)-(5000,3000), RGB(255,0,0)
zeichnet eine rote diagonale Linie. Die Farbe wird mit der RGB-Funktion beschrieben, indem man einzeln den Rot-, Grün- und Blauanteil der Farbe angibt (jeweils Zahlen zwischen 0 und 255). Auf diese Weise kann man alle Farben zusammensetzen. Laß Dir im Kurs zeigen, wie das geht. Am besten lernt man es mit dem Farbpalettenfenster.
Wichtige Farben:
R(ot) G(rün) B(lau) R G B schwarz 0 0 0 gelb 255 255 0 weiß 255 255 255 violett 255 0 255 rot 255 0 0 braun 205 155 135 grün 0 255 0 orange 255 128 0 blau 0 0 255 grau 128 128 128
Die Farbe orange heißt in Basic also RGB(255,128,0).
Wenn man ein Rechteck zeichnen möchte, reicht dazu ein einziger Line-Befehl, indem man statt Anfangs- und Endpunkt einer Linie den oberen linken und den unteren rechten Eckpunkt eines Rechteckes angibt, und hinter die Farbe dann noch ein «,B» setzt (B, weil Rechteck auf englisch box heißt) :
Line (1000,1500)-(5000,3000),RGB(255,0,0),B
zeichnet statt einer Linie ein ganzes Rechteck aus roten Linien. Man kann auch noch ein F an das B anhängen, dann wird das Rechteck innen ausgemalt (gefüllt). Wenn man keine Farbe angeben will, muß man übrigens trotzdem beide Kommas hinschreiben: mit dem Befehl
Line (1000,1500)-(5000,3000),,BF
zeichnet man ein schwarzes, gefülltes Rechteck. Beachte die beiden Kommas hintereinander, zwischen denen sonst die Farbe stünde!
Kreise kann der Computer natürlich auch! Dazu gibt es den Circle-Befehl. Man muß natürlich dazu sagen, wohin der Kreis soll, und wie groß er werden soll. Dazu beschreibt man zuerst mit Koordinaten den Mittelpunkt des Kreises, und gibt dann die Größe des Kreises, also seinen Radius, in Twips an. Außerdem kann man noch die Farbe des Kreises bestimmen.
Circle (3000,4000),2000,RGB(0,190,0)
zeichnet einen dunkelgrünen Kreis mit dem Radius 2000 Twips um den Punkt mit den Koordinaten (3000,4000).
Einzelne Punkte kann man auch «zeichnen», und zwar mit dem Befehl PSet:
PSet (1000,500),RGB(255,128,0)
zeichnet einen orangen Punkt an der Koordinate (1000,500). Die Farbe kann man, wie bei den anderen Befehlen auch, weglassen.
Zum Schluß noch ein wichtiger Befehl: Mit Cls löscht man alles im Formular, was man vorher mit PSet, Line, Print oder Circle gezeichnet oder geschrieben hat. Wenn irgendwelche Objekte auf dem Formular sind, werden die aber dabei nicht gelöscht. Der Name Cls kommt von engl. clear screen: lösche den Bildschirm.
Konstanten sind einfach Namen für Zahlen oder Zeichenketten. Wenn man seine eigenen Programme später liest, sind sie viel einfacher zu verstehen, wenn darin zum Beispiel überall, wo die Kreiszahl p (pi = 3,14159...) vorkommt, wirklich PI im Code steht und nicht jedesmal 3.14159. Deshalb schreibt man einmal an den Anfang der Prozedur:
const PI = 3.14159
und wenn man dann z.B. irgendwo geschrieben hat:
Print 2 * PI
setzt der Computer die Zahl für PI ein, und druckt dann
6,28318
im Formular aus. Es hat sich unter Programmierern eingebürgert, Konstanten immer in Großbuchstaben zu schreiben, um sie von den Variablen zu unterscheiden.
Variablen sind viel wichtiger als Konstanten, vielleicht sogar das Wichtigste beim Programmieren überhaupt. Eigentlich sind Variablen und Konstanten fast das gleiche, bis auf den einen wesentlichen Unterschied: der Wert einer Variablen, also die Zahl oder Zeichenkette, für die sie (wie eine Konstante) steht, kann im Programm immer wieder geändert werden. Wenn es zum Beispiel in einem Spiel eine Variable Punktzahl gibt, dann kann man irgendwo im Programm schreiben:
Punktzahl = 1000
und für alle Befehle, die danach kommen, steht Punktzahl eben für 1000 - bis vielleicht ein Befehl «Punktzahl = 1001» kommt. Man nennt Punktzahl den Namen der Variablen, und 1000 ist in diesem Beispiel ihr Wert. Den Befehl «Punktzahl = 1000» nennt man eine Zuweisung: der Variablen Punktzahl wird der Wert 1000 zugewiesen.
Variablen können nicht nur Zahlen enthalten, sondern auch Zeichenketten oder Datums- und Uhrzeitangaben. Wenn Spielername, Geburtstag und Weckzeit Variablen sind, dann kann man schreiben:
Spielername="Marcus"
(Wichtig sind hier die Anführungszeichen, denn sonst denkt der Computer, «Marcus» solle selbst eine Variable sein!)
Geburtstag = #29.10.1970# Weckzeit = #7:30#
(Wie bei Zeichenketten die Anführungszeichen, so muß man hier die «Gartenzäune» benutzen!) Ein Datum und eine Uhrzeit passen sogar zusammen in eine Variable:
Zahnarzttermin = #13.2.1994 11:30#
Wenn jetzt danach im Programm die Befehle
Print Spielername; " muß am "; Zahnarzttermin; Print " zum Zahnarzt!"
stehen, erhält man im Formular:
Marcus muß am 13.02.1994 11:30:00 zum Zahnarzt!
Wichtig: Wenn man eine Variable in seinem Programm verwenden will, muß man sie vorher «anmelden» (deklarieren ist das vornehme Wort dafür), und zwar im «Deklarationsteil» des Codes. Man bekommt diesen Programmteil ins Editorfenster, indem man darin oben links neben dem Feld, in dem das Objekt steht, auf das Icon klickt und aus der erscheinenden Liste «(allgemein)» auswählt. In den beiden Feldern erscheint nun «(allgemein)» und «(Deklarationen)». An dieser Stelle sollte im Code auch schon die Zeile «Option Explicit» stehen. Hier muß man jetzt die Variablen aufschreiben, die man in seinem Programm verwenden will, und zwar mit dem Befehl Dim. Will man zum Beispiel die Variable «Punktzahl» benutzen, dann schreibt man:
Dim Punktzahl
Der Befehl Dim sagt dem Computer: richte eine Variable mit dem Namen ein, der auf Dim folgt. Achtung: Die Variable hat damit noch keinen Wert, und man kann ihr erst innerhalb einer Prozedur einen Wert zuweisen.
Noch etwas zu den Namen von Variablen: Variablennamen in Basic dürfen nur aus bis zu 40 Buchstaben, Zahlen und dem Unterstrich «_» (Auf der Tastatur über dem Bindestrich «-») bestehen. Beginnen müssen sie aber mit einem Buchstaben! Außerdem darf man keine Basic-Befehlswörter als Variablennamen verwenden, denn sonst verwechselt der Computer alles... Wenn das aus Versehen passiert, erkennt man es aber leicht daran, daß der Name im Editorfenster blau gefärbt wird, sobald man mit dem Cursor in eine andere Zeile geht. Dann muß man sich einen anderen Variablennamen ausdenken.
Beispiele für mögliche Variablennamen:
Äpfel; Level42; PunktZahl; Punktzahl_die_der_Spieler_erreicht_hat; Hui_Buh
Beispiele für unmögliche Variablennamen:
4gewinnt (beginnt mit einer Zahl) Name (ist ein Befehlswort) Hui Buh (besteht aus zwei Wörtern)
Höchste_Punktzahl_die_je_ein_Spieler_erreicht_hat
(mehr als 40 Zeichen lang) Stan&Ollie (enthält Sonderzeichen &)
Eigenschaften von Objekten haben viel mit Variablen gemeinsam: so haben zum Beispiel auch sie einen Namen (z.B. Form.Caption) und einen Wert (z.B. "Mein dolles Programm V2.0b"). Den meisten von ihnen kann man auch im Programm jederzeit einen anderen Wert zuweisen:
Form.Caption = "Jetzt steht hier was anderes"
bewirkt, daß in der Titelzeile des Formulars plötzlich etwas anderes steht! Außerdem kann man überall, wo Variablennamen stehen können, auch Eigenschaftsnamen einsetzen:
Line (1000,1000)-(5000,5000),Form.BackColor,BF
bedeutet, daß ein Teil des Formulars mit der Hintergrundfarbe ausgefüllt, also praktisch «gelöscht» werden soll.
Wenn Basic-Programmierer von Funktionen reden, dann meinen sie damit spezielle Befehle, die man an Stellen im Programm einsetzt, wo sonst eigentlich eine Zahl oder eine Zeichenkette stehen müßte. Ein Beispiel, das schon weiter oben im Skript erwähnt wurde, ist die RGB-Funktion, die man da einsetzt, wo normalerweise eine Farbnummer stehen müßte. Statt im Programm zu schreiben:
PSet (500,1000), 8887245
um einen hellbraunen Punkt zu zeichnen, kann man eben auch schreiben:
PSet (500,1000), RGB(205,155,135)
was genau dasselbe bedeutet! Die RGB-Funktion rechnet also nur die Rot-, Grün- und Blauanteile der Farbe in eine lange Farbnummer um.
Print RGB(205,155,135)
ergibt deshalb nichts anderes als 8887245 in der Form.
Gleich noch ein anderes Beispiel für eine Funktion: Mit
Print Weekday(#29.10.1970#)
(was 5 in die Form schreibt) bringt man den Computer dazu, die Nummer des Wochentags des Datums, das in Klammern steht, auszugeben. (Dabei steht 1 für Sonntag, 2 für Montag, 3 für Dienstag usw.). Das Datum wird also in eine Wochentagsnummer "umgerechnet". (engl. weekday: Wochentag)
Die Angaben, die hinter der Funktion in Klammern stehen, nennt man übrigens Argumente oder Parameter der Funktion. Das "Ergebnis" der Funktion hängt natürlich von diesen Parametern ab: Wenn ich ein anderes Datum hinschreibe, kriege ich auch einen anderen Wochentag (jedenfalls meistens). Wichtig ist, daß man die richtigen Arten von Parametern angibt: wenn die Funktion ein Datum will, muß ich ihr auch ein Datum geben, sonst gibt's eine Fehlermeldung (und die Funktion wäre ja auch nicht sinnvoll!).
Mit diesen beiden Befehlen kann man sogenannte Dialogfelder
auf den Bildschirm bringen - das sind kleine Fenster, die den
Programmbenutzer auf etwas hinweisen oder ihn etwas fragen sollen.
Der Benutzer ist dann "gezwungen", darauf zu reagieren,
denn solange er das nicht tut, kann er das Programm nicht weiter
benutzen.
Mit dem MsgBox-Befehl (engl. message box: Nachrichtenkasten) erzeugt man ein Dialogfeld, in dem einfach ein Text steht, und in dem außerdem ein oder mehrere Icons zu sehen sind, von denen der Benutzer eins anklicken muß, um weitermachen zu können. Am einfachsten ist der Befehl, wenn man nur einen Hinweistext und ein «OK»-Icon haben will:
MsgBox "Keine Panik!"
ergibt sowas ähnliches wie auf der Abbildung. Genau die Abbildung erhält man mit dem Befehl:
MsgBox "Keine Panik!",0,"Cool..."
Was die Null hinter dem Text bedeutet, wird gleich erklärt, aber zunächst einmal: Hinter der Null kann man noch einen Titel für das Fenster der Dialogbox bestimmen, in diesem Beispiel also «Cool...». Wenn man diesen Teil wegläßt, erscheint der Name des Projektes in der Titelzeile.
Nun aber zu der mysteriösen Null: Die ist tatsächlich fast eine Art Geheimcode, denn mit der Zahl, die man hier hinschreibt, sagt man dem Computer, welche Icons unten in der Box erscheinen sollen. Einen Teil dieses "Geheimcodes" will ich hier lüften:
0 Nur "OK" anzeigen (Das wird auch gemacht, wenn die Zahl ganz fehlt). 1 "OK" und "Abbrechen" anzeigen. 2 "Abbrechen", "Wiederholen" und "Ignorieren" anzeigen. 3 "Ja", "Nein" und "Abbrechen" anzeigen. 4 "Ja", und "Nein" anzeigen. 5 "Wiederholen" und "Abbrechen" anzeigen.
Der Befehl
MsgBox "... bis daß der Tod Euch scheidet?",3
läßt dem Benutzer die Wahl zwischen «Ja», «Nein» und «Abbrechen». Dieser Befehl wird so allerdings nie im Programm vorkommen, denn mit diesem Befehl kann das Programm ja nie erfahren, wie der Benutzer sich denn jetzt entschieden hat! Für solche Fälle gibt es darum eine ungeheuer praktische Variante des MsgBox-Befehls: der MsgBox-Befehl als Funktion! Man kann zum Beispiel eine Variable mit dem Namen «Entscheidung» deklarieren und dann schreiben:
Entscheidung = MsgBox("... der Tod Euch scheidet?",3)
Wenn diese Zeile ausgeführt wird, wird eine Dialogbox mit dem Text und den drei Icons auf den Bildschirm gebracht, und je nachdem, welches Icon der Benutzer dann anklickt, erhält die Variable «Entscheidung» einen anderen Wert:
Wert Angeklicktes Icon 1 OK 2, 3 Abbrechen 4 Wiederholen 5 Ignorieren 6 Ja 7 Nein
Das Programm kann dann mit dem If-Befehl (s. u.) je nach dem Wert der Variablen unterschiedlich weitermachen.
Nur als Funktion gibt es den sehr ähnlichen InputBox-Befehl
(engl. input: Eingabe). Den benutzt man, wenn man vom Benutzer
seines Programms mehr als eine Entscheidung will, nämlich
daß er zum Beispiel seinen Namen oder sein Alter eingibt.
Beispiel:
Vorname = InputBox("Was ist Dein Vorname?")
ergibt eine Dialogbox wie in der Abbildung (häßlich, aber praktisch). Was der Benutzer eingibt, steht dann in der Variablen «Vorname». Wählt er das Feld «Abbrechen», dann bleibt die Variable leer. Wie beim MsgBox-Befehl gibt es noch die Möglichkeit, einen Titel für das Fenster anzugeben. Außerdem kann man eine Vorgabe machen, was anfangs im Eingabefeld stehen soll.
Urlaub = InputBox("Lieblingsferien?","Was ich mag","Camps")
gibt unter der Überschrift «Was ich mag» die Frage «Lieblingsferien?» aus und gibt im Eingabefeld die Antwort «Camps» vor. Das Ergebnis der Befragung findet der Computer dann in der Variable Urlaub. Probier's!
Rechnen kann ein Computer natürlich! Überall in einem Basic-Programm, wo eine Zahl stehen kann, kann stattdessen auch eine komplizierte Rechenaufgabe stehen, bei der eine Zahl herauskommt (der Programmierer sagt: ein Rechenausdruck). Der Computer kennt auch die Regel "Punkt vor Strich" und Klammern. Außerdem kann man überall, wo Zahlen hingehören, auch Variablen, Konstanten, Funktionen oder auch Objekt-Eigenschaften hinschreiben, für die der Computer dann beim Ausrechnen ihren Wert einsetzt.
Rechenzeichen in Basic (in der Reihenfolge, in der sie ausgerechnet werden):
() Klammern ^ hoch * mal / geteilt durch + plus - minus
Ein paar Funktionen:
SqrSqr(Zahl) WurzelWurzel (engl. square root) FixFix(Zahl) schneidet die Zahl hinter dem Komma ab.Runden Fix(3.5) ist 3, Fix(-3.5) ist -3.
Mit Zeichenketten kann man natürlich nicht rechnen, aber man kann sie zusammensetzen, und zwar mit &:
Dim Anfang, Gesamt Anfang = "Camps" Gesamt = Anfang & " ist Wahnsinn!" Print Gesamt
ergibt im Formular: Camps ist Wahnsinn!
Oft kommt es vor, daß der Computer je nach dem Wert einer Variablen verschiedene Dinge tun soll. Zum Beispiel kann in einer Variablen stehen, welches Icon der Benutzer in einer Dialogbox angeklickt hat (siehe den Abschnitt über Dialogboxen). Für solche Fälle gibt es die Befehle If...Then...Else...End If (engl. if: wenn, then: dann, else: sonst). Mit einem Beispiel sind sie am leichtesten zu erklären:
Entscheidung = MsgBox("Geht's Dir gut?" ,4) If Entscheidung = 6 Then ' JA gewählt MsgBox "Das ist ja wunderbar!" Else ' NEIN gewählt MsgBox "Na dann gute Besserung!" End If
Je nachdem, ob die Bedingung «Entscheidung = 6» (der Benutzer hat «ja» gewählt) richtig oder falsch ist, werden verschiedene Befehle ausgeführt. Die Befehle zwischen Then und Else werden ausgeführt, wenn die Bedingung wahr ist, und die Befehle zwischen Else und End If, wenn die Bedingung falsch ist. In jedem Fall wird hinter End If weitergemacht. Den Else-Teil kann man übrigens auch weglassen, wenn man keinen braucht. Außerdem gibt es auch noch eine Kurzform: Wenn nur ein Befehl ausgeführt werden soll, falls die Bedingung stimmt, kann man auch etwas schreiben wie:
If Spielerleben=1 Then Print "Nur noch 1 Leben!"
In diesem Fall braucht man kein End If.
Natürlich gibt es auch kompliziertere Bedingungen:
If Zahl/7=Fix(Zahl/7) Then Print Zahl;" ist durch sieben teilbar!" End If
Es gibt in Basic folgende Möglichkeiten, zwei Ausdrücke zu vergleichen:
< Kleiner als <= Kleiner gleich > Größer als >= Größer gleich = Gleich <> Ungleich
Diese Vergleiche kann man auch mit Zeichenketten benutzen. Dabei ist die «kleinere» Zeichenkette nicht etwa die, die kürzer ist, sondern die, die im Alphabet weiter vorne kommt. "Apfelkern" ist also «kleiner» als "Birne"!
Für verwegene Logiker gibt es auch noch And (und), Or (oder) und Not (nicht). Damit kann man mehrere Bedingungen verknüpfen oder ins Gegenteil verkehren:
Not Leben <= 3 ist dasselbe wie Leben > 3.
Alter >= 10 And Alter <= 18 ist nur dann wahr, wenn «Alter» zwischen 10 und 18 liegt.
Alter < 10 Or Alter > 18 stimmt dann, wenn «Alter» nicht zwischen 10 und 18 liegt.
Bei komplizierten Bedingungen mit And, Or und Not kann einem schon manchmal ziemlich der Kopf rauchen!
Manchmal werden die Programme, die man schreibt, ganz schön kompliziert. So kompliziert, daß man, wenn man sich das Programm nach ein paar Wochen noch einmal anschaut und es vielleicht verändern will, selbst nicht mehr weiß, was man da eigentlich meinte und wie alles zusammenhängt. Das ist ganz normal! Und deshalb sollte man sich zu allem, was man im einem komplizierten Programm tut, Notizen machen, was es bedeutet. Damit man solche Notizen gleich im Programmtext unterbringen kann, gibt es die Möglichkeit, darin Kommentare einzufügen: Alles, was in einer Programmzeile hinter dem Zeichen ' (Anführungsstrich) steht, wird vom Computer, wenn er das Programm ausführt, einfach «übersehen». Beispiel:
Line (0,0)-(2000,2000) 'Linie von links oben nach rechts 'unten im Formular
Statt ' kann man auch Rem (engl. remark = Bemerkung) benutzen, allerdings nur für ganze Kommentarzeilen:
Line (2000,0)-(0,2000) Rem Linie von links unten nach rechts oben
Es ist guter Programmierstil, viele sinnvolle Kommentare in seine Programme zu bauen, damit man selbst und andere Programmierer sie besser verstehen.
Beenden kann man ein Programm, indem man auf das «Beenden»-Icon oben im Visual- Basic-Titelfenster klickt. Manchmal will man das Programm aber auch mit einem Befehl beenden können, zum Beispiel wenn das Spiel zu Ende ist oder ein schwerer Fehler aufgetreten ist. Dazu gibt es den Befehl End, der das Programm sofort beendet. Visual Basic geht dann in den Entwurfsmodus zurück.
Unter einer Schleife (auf englisch loop) verstehen Programmierer ein Programmstück, das mehrmals hintereinander ausgeführt wird. Beispiele wirst Du im Kurs viele kennenlernen, denn Schleifen braucht man beim Programmieren sehr oft. Hier werde ich deshalb nur erklären, wie die Do...Loop-Schleife richtig benutzt wird:
Diese Schleife ist dazu da, um eine Reihe von Befehlen, den sogenannten Schleifenkörper, solange immer wieder auszuführen, bis eine bestimmte Bedingung, die sogenannte Abbruchbedingung , erfüllt ist. Oder solange, bis eine bestimmte Bedingung nicht mehr erfüllt ist. Die beiden folgenden Programmfetzen machen beide genau dasselbe: Sie bringen eine Dialogbox solange immer wieder auf den Bildschirm, bis der Benutzer darin «Ja» anklickt. Dann geben sie einen Witz aus:
Do JaNein = MsgBox("Soll ich einen Witz erzählen?",4) ' Dialogbox mit Auswahl JA oder NEIN Loop Until JaNein = 6 ' 6 entspricht JA MsgBox "Backen ohne Mehl!" ' Das ist der Witz!!! ' (c) Helge Schneider
(engl. until: bis) Die andere Version:
Do JaNein = MsgBox("Soll ich einen Witz erzählen?",4) Loop While JaNein <> 6 MsgBox "Backen ohne Mehl!"
(engl. while: solange). Die Bedingung «JaNein = 6» bzw. «JaNein <> 6» wird jedesmal nach einer Ausführung des Schleifenkörpers überprüft, und je nachdem, ob die Bedingung wahr oder falsch ist, wird der Schleifenkörper noch mal ausgeführt oder die Schleife verlassen und die Befehle danach ausgeführt.
Wenn die Bedingung schon vor dem ersten Durchlauf der Schleife überprüft werden soll, kann man das While bzw. Until auch gleich hinter das Do setzen:
Do Until Äpfel > 6 (...) ' Hier steht der Schleifenkör>Übertragung unterbrochen
PRE> Do While Äpfel <= 6 (...) ' Hier steht der Schleifenkörper Loop
Man macht sein Programm übersichtlicher, indem man den Schleifenkörper wie hier um ein paar Leerzeichen einrückt. Unbedingt empfohlen!!!
Man kann eine Schleife auch mitten im Schleifenkörper verlassen, nämlich mit dem Befehl Exit Do Do. Dann wird direkt der nächste Befehl, der nach der Schleife kommt, ausgeführt. Meistens verwendet man Exit Do zusammen mit If...Then. Man kann, wenn eine Schleife nur mit Exit Do verlassen werden soll, die While- oder Until-Bedingung sogar weglassen:
Do (...) If Äpfel > 6 Then Exit Do (...) Loop
Als Programmierer muß man unbedingt aufpassen, daß die Schleife auf jeden Fall irgendwann verlassen wird! Die sogenannten «Endlosschleifen» gehören zu den häufigsten Programmierfehlern. Oft hilft nur noch ein Abbruch des Programms mit den Tasten Strg und Untbr.
(engl. go to: gehe zu...) Mit GoTo kann man das Programm dazu bringen, an irgendeiner anderen Stelle in der Prozedur weiterzumachen statt mit dem nächsten Befehl. Man nennt diesen Befehl deshalb auch einen Sprungbefehl. Dazu muß man vor den Befehl, zu dem das Programm «springen» soll, eine sogenannte Sprungmarke schreiben - das ist einfach ein Wort mit einem Doppelpunkt dahinter. Dieses Wort, ohne den Doppelpunkt, kommt dann auch hinter den GoTo-Befehl. Damit bestimmt man also, wohin gesprungen werden soll. Die Sprungmarke muß in der gleichen Prozedur wie der GoTo-Befehl stehen, und sie darf kein Basic-Befehlswort oder im Programm vorkommender Variablen- oder Konstantenname sein! Außerdem muß die Sprungmarke immer als erstes in der Zeile stehen.
(...) Hierweiter: ' Das ist die Sprungmarke (...) GoTo Hierweiter ' Jetzt wird oben weitergemacht ' Wenn hier was steht, wird es nie ausgeführt!
Wenn man viele GoTo-Befehle benutzt, wird ein Programm schnell unübersichtlich («Spaghetti-Code»). Deshalb sollte man diesen Befehl vermeiden. Computerwissenschaftler haben sogar bewiesen, daß man alle Programme auch ohne GoTo schreiben und stattdessen Konstruktionen mit If...Then...Else und Do...Loop benutzen kann, die meist übersichtlicher sind!
(engl. random: zufällig) Manchmal soll in einem Programm auch mal der Zufall "im Spiel" sein - vor allem bei Spielen. Dann spielt in Basic immer die RND-Funktion mit: sie liefert nämlich ein Zahl zwischen 0 (einschließlich) und 1 (ausschließlich) - aber welche, das ist reiner Zufall!
Um einen Zufallswert zwischen 0 und einer anderen Zahl, z.B. zwischen 0 und 256 zu bekommen, kann man die Zufallszahl einfach mit der Obergrenze malnehmen: RND*256 ergibt eine Zufallszahl zwischen 0 (einschließlich) und 256 (ausschließlich). Mit dem Befehl
PSet (RND*1000,RND*1000), RGB(RND*256,RND*256,RND*256)
wird ein zufälliger Punkt im oberen linken Teil des Formulars mit einer zufälligen Farbe gefärbt. Wenn man das den Computer ein paar hundert mal machen läßt, sieht das Formular bald aus wie voller Konfetti!
Vorsicht: Normalerweise kommen jedesmal, wenn man ein Programm startet, die gleichen Zufallszahlen! Der Computer hebt die Zufallszahlen nämlich sozusagen aus einem immer gleich sortierten Kartenstapel ab. Um das zu verhindern, muß man am Anfang des Programms «die Karten mischen». Und dafür gibt es den Befehl Randomize. Wenn man in seinem Programm Zufallszahlen benutzen will, sollte man diesen Befehl an besten immer gleich in der Form_Load-Prozedur aufrufen.
Diese Eigenschaft gibt es bei allen Objekten. Sie bestimmt den Namen, unter dem das Objekt im Basic-Code angesprochen wird. Diese Eigenschaft kann nur im Entwurfsmodus, nicht im Programm selber geändert werden. Die Voreinstellung für diese Eigenschaft ist zum Beispiel beim ersten Formular «Form1». Wenn man sich irgendwo im Code auf dieses Formular beziehen will, z. B. wenn man eine seiner Eigenschaften ändern will, muß man diesen Namen benutzen.
(engl. caption: Titel) Diese Eigenschaft gibt es bei Formularen, Befehlsschaltflächen, Bezeichnungsfeldern und vielen anderen Steuerelementen. Bei Formularen gibt sie den Text an, der in der Titelleiste des Formulars angezeigt wird. Wenn das Formular auf Symbolgröße verkleinert wird, dann wird der Text unterhalb des Symbols angezeigt. Bei Steuerelementen gibt die Caption-Eigenschaft den Text an, der in einem Steuerelement oder in der Nähe des Steuerelements angezeigt wird. Diese Eigenschaft kann sowohl im Entwurfsmodus als auch im Programm selber (zur «Laufzeit») geändert werden. Beispiel:
Form1.Caption="ExZell V5.0 Vollzugsanstaltsverwaltung"
(engl. visible: sichtbar) Diese Eigenschaft gibt es bei Formularen und allen Steuerelementen außer dem Zeitgeber (der ist immer «unsichtbar»). Sie bestimmt, ob ein Objekt sichtbar oder ausgeblendet ist, und kann sowohl im Entwurfsmodus als auch zur Laufzeit geändert werden. Diese Eigenschaft kann nur die «Werte» True (engl. true: wahr, das Objekt ist also sichtbar) oder False (engl. false: falsch, das Objekt ist also nicht sichtbar) annehmen. Beispiel:
Befehl1.Visible = False
Die Befehlsschaltfläche mit dem Namen «Befehl1» wird vom Bildschirm gelöscht, also «unsichtbar» gemacht.
(engl. enable: ermöglichen) Diese Eigenschaft gibt es für Formulare und alle Steuerelemente. Sie bestimmt, ob die Form oder das Steuerelement auf vom Benutzer erzeugte Ereignisse reagieren kann. Mit dieser Eigenschaft können Formulare und Steuerelemente also zur Laufzeit entweder verfügbar gemacht oder gesperrt werden. Wenn Steuerelemente gesperrt sind, werden sie grau statt schwarz dargestellt und sind nicht mehr anwählbar. Wie die Visible-Eigenschaft kann auch Enable nur die Werte True oder False annehmen:
True Das Objekt kann auf Ereignisse reagieren. False Das Objekt kann nicht auf Ereignisse reagieren.
Man kann also auf diese Weise, eleganter als mit Visible, Steuerelemente sperren, die gerade nicht verwendet werden sollen. Man kann damit auch zum Beispiel ein Textfeld sperren, das nur zur Textanzeige gebraucht wird.
Wenn man bei einem Zeitgeber Enabled auf False setzt, dann wird er angehalten und löst keine Ereignisse mehr aus, bis man ihn wieder weiterlaufen läßt.
(engl. background color: Hintergrundfarbe). BackColor bestimmt die Hintergrundfarbe für ein Objekt und kann sowohl im Entwurfsmodus als auch zur Laufzeit geändert werden. Beispiel:
Form1.BackColor = RGB(0,255,0)
ergibt einen grünen Hintergrund im Formular «Form1». Vorsicht: Wenn man diese Eigenschaft bei einem Formular zur Laufzeit ändert, wird damit gleichzeitig alles, was man vorher mit Grafikbefehlen oder Print hineingezeichnet und -geschrieben hat, gelöscht!
Wenn man die BackColor-Eigenschaft im Eigenschaftenfenster ändert, kann man eine von vielen vorgegebenen Farben aussuchen. Wenn die nicht ausreichen, kann man im Farbpalettenfenster eigene Farben «mischen», und die werden dann auch angezeigt. Siehe auch den Abschnitt über Grafikbefehle.
(engl. foreground color: Vordergrundfarbe) In Formularen und manchen Steuerelementen kann man mit dieser Eigenschaft die Farbe einstellen, mit der Buchstaben und Zeichen gedruckt werden. Wenn man diese Eigenschaft zur Laufzeit ändert, erscheinen nur diejenigen Buchstaben, die danach geschrieben werden, in der neuen Farbe. Man kann hier nur Farben angeben, die von Windows nicht mit einem Punktraster aus verschiedenen Farben zusammengemischt werden müssen.
(engl. top: oberes Ende, left: linke Seite) Diese Eigenschaften gibt es bei Formularen und bei fast allen Steuerelementen. Sie bestimmen die Koordinaten der linken oberen Ecke des Objekts, und zwar bei Formularen relativ zum Bildschirm, und bei den anderen Steuerelementen relativ zur linken oberen Ecke der «Innenfläche» des Formulars, in dem sie stehen. Die beiden Eigenschaften können einerseits im Entwurfsmodus geändert werden: entweder dadurch, daß man das Objekt einfach mit der Maus woanders hin zieht, oder indem man sie direkt im Eigenschaftenfenster verändert. Andererseits kann man sie zur Laufzeit ändern und damit das Objekt verschieben (- außer beim Zeitgeber).
(engl. width: Breite, height: Höhe) Diese Eigenschaften bestimmen die Breite und die Höhe eines Objekts. Auch sie können sowohl im Entwurfsmodus als auch zur Laufzeit geändert werden. Die Größe des Objekts ändert sich dann sofort.
Bei einem Formular gehören zur Höhe und Breite auch die Fensterränder oben, unten und an den Seiten dazu. Bei Steuerelementen wird raffinierterweise vom Mittelpunkt des Steuerelementrahmens aus gemessen, damit Steuerelemente mit verschiedenen Rahmenbreiten hübsch ausgerichtet werden können.
Screen.Width und Screen.Height sind die Breite und Höhe des gesamten Bildschirms. Diese Werte können nur zur Laufzeit gelesen und nie verändert werden.
Die Befehlsschaltfläche (button) ist die häufigste und einfachste Art von Icon: sie ist in der Regel ein graues Kästchen, auf dem ein Text wie «OK» oder «Abbrechen» steht, und das man einfach anklickt.
Besondere Eigenschaften: Wenn man die Cancel-Eigenschaft auf True setzt, wird dieser Button auch dadurch angewählt, daß man die Esc-Taste drückt. Die Default-Eigenschaft bewirkt, wenn True, daß der Button einen schwarzen Rahmen erhält, der bedeutet, daß der Button auch mit der Eingabe-Taste angewählt werden kann. Mit den Font...-Eigenschaften... kann man, wenn es unbedingt sein muß, andere Schriftarten und -stile für den Text im Kästchen wählen.
Ereignisse: Man braucht eigentlich nur das Click-Ereignis (Button wurde angewählt).
Der Zeitgeber ist so richtig raffiniert: er ist gar kein richtiges Steuerelement und auf dem Formular unsichtbar, wenn das Programm läuft. Alles was er tut, ist in regelmäßigen Abständen ein eigenes Ereignis, das Timer-Ereignis, hervorzurufen. Man sollte nicht zu viele Zeitgeber verwenden, denn unter Windows gibt es immer nur höchstens 16 Zeitgeber gleichzeitig.
Besondere Eigenschaften: Die Interval-Eigenschaft bestimmt den Zeitabstand zwischen zwei Timer-Ereignissen in Millisekunden. Die Enabled-Eigenschaft muß auf True gesetzt werden, damit der Zeitgeber läuft.
Ereignisse: Es gibt nur das Timer-Ereignis (s. o.)
Diese beiden Steuerelemente sind dazu da, die Benutzeroberfläche eines Programms mit Linien, Kreisen oder Rechtecken zu verschönern. Ereignisse auslösen können sie nicht!
Besondere Eigenschaften der Linie: Die BorderWidth-Eigenschaft bestimmt die Dicke der Linie. Mit der BorderStyle-Eigenschaft kann man aus der Linie zum Beispiel eine gestrichelte Linie machen - allerdings sieht man davon nur etwas, wenn die Linie nicht dicker als 1 ist. X1, Y1, X2 und Y2 bestimmen die Koordinaten des Anfangs-(1) und des End-(2)Punkts der Linie. Durch Ändern dieser Eigenschaften vom Programm aus kann man die Linie «bewegen». Die BorderColor-Eigenschaft schließlich bestimmt die Farbe der Linie.
Besondere Eigenschaften der Figur: Die Shape-Eigenschaft bestimmt, was für eine Figur die Figur eigentlich sein soll: ob ein Rechteck, ein Quadrat, ein Oval, ein Kreis, ein Rechteck mit abgerundeten Ecken oder ein ebensolches Quadrat. Die drei Border...-Eigenschaften bestimmen das Aussehen der Umrandung und sind die gleichen wie bei der Linie. Ob die Figur mit einer Farbe ausgefüllt ist, bestimmt die Backstyle-Eigenschaft, welche Farbe dies gegebenenfalls ist, die BackColor-Eigenschaft. Vor diesen evtl. farbigen Hintergrund kann man dann auch noch eines von sechs neckischen Füllmustern legen (FillStyle-Eigenschaft), natürlich in jeder beliebigen Farbe (FillColor).
Im Textfeld soll der Benutzer Texte eingeben, die dann im Programm benutzt werden können, zum Beispiel seinen Namen für die Highscore-Liste eines Spiels. Auf dem Bildschirm sieht man ein Kästchen, in dem, wenn man darauf klickt, ein Cursor erscheint. Das Bezeichnungsfeld wird benutzt, um Texte darzustellen, die der Benutzer nicht ändern können soll.
Besondere Eigenschaften des Textfelds: Ein Textfeld hat 37 (!) Eigenschaften, und ich werde deshalb nur die wichtigsten erklären: die Text-Eigenschaft enthält den Text, der im Feld erscheint oder den der Benutzer eingegeben hat. Mit der MaxLength-Eigenschaft kann man, wenn man will, eine Höchstlänge der Eingabe in Zeichen festlegen. Wenn MaxLength=0 ist, gibt es keine Beschränkung (außer durch den Speicher des Computers!). Mit den Font...-Eigenschaften kann man andere Schriftarten und -stile benutzen, mit der Alignment-Eigenschaft die Ausrichtung des Textes bestimmen (linksbündig, rechtsbündig, zentriert).
Besondere Eigenschaften des Bezeichnungsfelds: Viele Eigenschaften stimmen mit denen des Textfeldes überein, so gibt es die gleichen Font...-Eigenschaften und die Alignment-Eigenschaft. Der Text steht bei Bezeichnungsfeldern allerdings in der Caption-Eigenschaft.
Ereignisse: Für Textfelder ist vor allem das LostFocus-Ereignis wichtig, das jedesmal eintritt, wenn der Benutzer vom Textfeld zu einem anderen Steuerelement wechselt. Dies ist der beste Zeitpunkt, um auf eine Änderung des Textes durch den Benutzer zu reagieren.
Ein Bildfeld zeigt eine Grafik, die als .bmp- oder .ico-Datei gespeichert wurde, an. Dabei wird nur der Teil der Grafik gezeigt, der in die Größe des Bildfeldes paßt. Wenn man eine Click-Ereignisprozedur für das Bildfeld schreibt, kann man es auch als eine Art schöneren Button verwenden.
Besondere Eigenschaften des Bildfeldes: das Bildfeld hat sogar 46 Eigenschaften, also noch mehr als das Textfeld: die Picture-Eigenschaft bestimmt, welches Bild dargestellt wird. Wenn man diese Eigenschaft im Entwurfsmodus verändern will, wird man aufgefordert, eine Bilddatei auf der Diskette auszusuchen. Vorsicht: Das Bild darf aus höchstens 256 verschiedenen Farben bestehen, sonst kann Visual Basic die .bmp-Datei nicht einlesen. Zur Laufzeit kann man diese Eigenschaft verändern, indem man ihr die Picture-Eigenschaft eines anderen Bildfeldes zuweist, das zum Beispiel unsichtbar sein kann. Indem man die Autosize-Eigenschaft auf True setzt, kann man festlegen, daß sich die Größe des Bildfeldes bei jeder Änderung des Bildes auf dessen Größe einstellen soll. Außerdem finden sich viele Eigenschaften des Bezeichnungsfeldes und der Figur hier wieder.
"Paintbrush" ist ein Malprogramm, mit dem man Bilder malen kann, die dann auch in Visual Basic benutzt werden können. Es befindet sich im Programm-Manager in der Zubehör-Gruppe.
Zeichenutensilien:
Speichern und laden kann man seine Bilder mit den Menüpunkten «Öffnen», «Speichern» und «Speichern unter...» des Datei-Menüs. Markierte Bildausschnitte kann man mit dem Menüpunkt «Bearbeiten/Kopieren nach...» extra abspeichern. Wichtig: Wenn man die mit Paintbrush gemalten Bilder mit Visual Basic benutzen will, muß man sie als 256-Farben-Bilder abspeichern. Man kann das im Dialogfeld "Speichern unter..." einstellen. Mit «Bearbeiten/Einfügen aus...» schließlich kann man abgespeicherte Bilder ins Bild einfügen.
Markierte Bildausschnitte kann man durch einfaches Ziehen mit der Maus verschieben, durch gleichzeitiges Drücken von «Strg» kopieren oder zusammen mit der «Shift»-Taste wie einen Stempel über das Bild «schleifen». Probier's aus!
Malhilfen: Im Linienbreitenfenster links unten im Paintbrush-Formular kann man durch Anklicken die Pinselbreite verändern. Im Menü «Optionen/Pinselformen» kann man auch eine Form des Pinsels aussuchen. In der Farbpalette unter der Malfläche kann an mit der linken Maustaste eine Vordergrundfarbe und mit der rechten Maustaste eine Hintergrundfarbe bestimmen. Diese beiden Farben werden links von der Farbpalette dargestellt. Wenn die angebotenen Farben einem nicht gefallen, kann man sie ändern: Menüpunkt «Optionen/Farben bearbeiten». Die Bildgröße kann man mit dem Menüpunkt «Optionen/Bildattribute» festlegen. Sonst ist das Bild so groß wie der ganze Bildschirm und es wird nur ein Ausschnitt in der Malfläche dargestellt. Diesen Ausschnitt kann man mit den beiden Bildlaufleisten rechts und unten an der Malfäche verschieben.
Ansicht: Mit den Menüpunkten «Vergrößern» und «Verkleinern» aus dem Ansicht-Menü kann man zwischen drei Vergrößerungsstufen umschalten: Bei der kleinsten wird das ganze Bild verkleinert im Fenster dargestellt, die mittlere ist die normale, und bei der größten wird nur ein kleiner Ausschnitt des Bildes dargestellt, den man punktgenau bearbeiten kann. Diesen Ausschnitt kann man mit der Maus auswählen.
Wenn man ein Bild, einen Text, ein Programm oder ähnliches auf Diskette oder Festplatte speichert, wird dafür eine Datei angelegt, die die Daten enthält. Alle Informationen, die auf einer Diskette oder Festplatte stehen, wie Bilder, Texte oder Programme, sind in solchen Dateien organisiert. Jede Datei hat einen Namen aus bis zu acht Buchstaben und einem Namensanhängsel aus noch einmal drei Buchstaben, die aussagen, um was für eine Art Datei es sich handelt. Zum Beispiel kann eine Datei porsche.bmp heißen: dabei bedeutet bmp (die Namenserweiterung), daß es sich um ein Bild handelt, und porsche ist der Name des Bildes.
Wenn man dieses Bild in Paintbrush laden will, reicht es aber nicht, nur den Dateinamen porsche.bmp anzugeben - man muß dem Computer auch noch sagen, wo er diese Datei findet, zum Beispiel auf welchem Laufwerk.
Jedes Laufwerk, das an den PC angeschlossen ist, ob es nun ein Diskettenlaufwerk, eine Festplatte oder ein CD-ROM-Spieler ist, hat eine Bezeichnung, die nur aus einem Buchstaben und einem Doppelpunkt dahinter besteht. A: ist das erste Diskettenlaufwerk, B: ist das zweite (wenn man eins hat). C: ist die Festplatte, und D: bis Z: können weitere Festplatten, Wechselplatten oder CD-ROMs (und was es sonst noch alles gibt) sein. Auf jeder Diskette oder Festplatte gibt es ein Verzeichnis, in dem die Namen der Dateien stehen, die darauf gespeichert sind. Nun sind auf großen Festplatten oft mehrere tausend Dateien. Damit man hier den Überblick behält, kann man in Verzeichnissen neben Dateien auch noch Unterverzeichnisse anlegen, in denen auch wieder Dateien oder wieder Unterverzeichnisse stehen können. Die Unterverzeichnisse haben Namen aus bis zu acht Buchstaben. So kann es zum Beispiel auf einer Festplatte die Unterverzeichnisse bilder, texte und programme geben, und im Unterverzeichnis bilder gibt es dann zum Beispiel wieder die Unterverzeichnisse autos (mit der Porsche-Datei), menschen und abstrakt. Wenn man eine Datei auf einem MS-DOS-Rechner also eindeutig identifizieren will, muß man Laufwerk, Unterverzeichnis und Dateinamen wissen. Zusammen nennt man das alles den Pfad der Datei. Die einzelnen "Teile" des Pfads werden in MS-DOS mit dem Zeichen «\» getrennt. Ein typischer Pfad: c:\bilder\autos\porsche.bmp. Groß- und Kleinschreibung spielt bei Pfaden und Dateinamen keine Rolle.
Unter Windows ist alles einfacher: wenn man diese Datei in Paintbrush laden will, erscheint das Dateiauswahlfenster, das in allen Windows-Programmen ähnlich oder gleich ist. Hier kann man jetzt unten rechts das Laufwerk aussuchen, danach oben rechts das (Unter-)verzeichnis, und zum Schluß links die Datei, die dann im Feld ganz oben links erscheint. Dann kann man «OK» anwählen, um die Datei zu laden.
E-Mail:
Marcus.Hermann@urz.uni-heidelberg.de
Letzte Änderung: 14.1.96