|
Home - Programmieren - Visual Basic - Visual Basic - Grundlagen
Hinweis: Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich. Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren. [Druckansicht] [Als E-Mail senden] [Kommentar verfassen] Syntax Die Syntax in Visual Basic sieht etwas weniger kompliziert und verschachtelt aus, als bei von C abgeleiteten Sprachen. Klammern werden in VB nur sehr selten verwendet, z.B. um Bedingungen zu verschachteln. Ausserdem ist es wichtig, dass man jeden Befehl mit einem Zeilenumbruch abschliesst und nicht etwa mit einem ";". Ausserdem ist es wichtig, alles getrennt zu schreiben; z=x+y würde so nicht funktionieren. Visual Basic korrigiert den Ausdruck jedoch sofort nach anwählen einer anderen Programmzeile in: z = x + y Syntaxfehler können in Visual Basic also so gut wie unmöglich auftauchen, da sie automatisch korrigiert werden. Ereignisse Sehr wichtig ist es zu wissen, dass Visual Basic Ereignisorientiert ist. D.h. alle Befehle, die ein Programm ausführt sind durch ein Ereignis verursacht. Jedes Steuerelement hat seine eigenen Ereignisse. Hier ein paar grundlegende Ereignisse im Überblick
Nachdem ein Formular geladen wurde, passiert zuerst mal nichts. Visual Basic geht in die Warteschleife über. Nun muss eine Prozedur aufgerufen werden. Dies passiert in einem VB meistens, wenn eine Schaltfläche angeklickt wurde. Das kann aber auch ein LostFocus Ereignis sein... Kein Formular – kein Programm? Visual Basic Programme müssen nicht zwingend ein Formular besitzen. Man kann auch einfach eine Prozedur namens Main programmieren, welche beim Programmstart ausgeführt wird. Kommentare Kommentare können dazu benutzt werden, den Programmcode auszukommentieren, d.h. näher zu beschreiben. Man kann Kommentare jedoch auch dazu einsetzten, einen bestimmten Teil eines Programms nicht zu kompilieren. Der Programmcode bleibt dabei in der Quellcodedatei erhalten. Kommentare werden in VB mit dem unscheinbaren Zeichen ’ gemacht. Mit // oder /* */ kann man in VB keine Kommentare machen. Objekte Ein Objekt ist in den meisten Fällen ein Steuerelement. Dazu kommt noch das Objekt "Me", was soviel bedeutet wie: "Dieses Formular". Methoden Eine Methode ist ein Befehl, der sich auf das aufgeführte Objekt bezieht. Eine Methode wird folgender maßen aufgeführt: Me.Cls Diese Methode leert die Innenfläche des Formulars. Methoden werden durch einen "." Getrennt vom Objekt aufgeführt Visual Basic an sich kennt keine Befehle, korrekt sind diese nur Methoden vom Objekt VBA. Falls man eine Funktion z.B. gleich wie einen VB-Befehl benannt hat, kann man den VB-Befehl folgender maßen aufrufen:
EigenschaftenEine Eigenschaft ist wie der Name schon sagt, eine Eigenschaft eines Objekts. Die Syntax entspricht der Syntax einer Methode, mit dem Unterschied, dass jeder Eigenschaft ein Wert zugewiesen wird. lblLabel1.caption = "Das ist ein Bezeichnungsfeld". Die Caption Eigenschaft eines Labels erhält den Wert "Das ist ein Bezeichnungsfeld". Variabeln Deklaration von Variabeln: Bei jedem Programm sollte man "Option Explicit" in die erste Zeile schreiben. Durch diesen Befehl müssen alle Variabeln in einem Programm deklariert werden. Es gibt drei Möglichkeiten um eine Variable zu deklarieren: Dim [Variabelnname] Als [Datentyp]
Arrays Eine herkömmliche Variable kann nur einen Wert speichern. Um mehrere Werte zu speichern müsste man also mehrere Variabeln deklarieren. Was tut man aber, wenn man nicht weiss, wie viele Werte der Benutzer eingibt (z.B. in einem Taschenrechner)?. Dafür gibt es sogenannte Arrays oder zu deutsch, Feldvariabeln. Deklaration Ein Array wird mit den selben Befehlen deklariert, wie eine "normale" Variable. Es ist jedoch wichtig, einen Wertbereich anzugeben. Dieser Wert wird in Klammern nach dem Variabelnamen aufgeführt.
Obiges Beispiel deklariert eine Variable namens
meinArray das 200 Werte entgegen nehmen kann. Das Schlüsselwort to
kann man
sich auch sparen. Folgende Deklaration hat die selbe Funktion:
Wenn nur die Grösse angegeben wurde, geht VB
davon aus, dass man die Felder 0 bis 199 deklarieren will. Es gilt
jedoch als "sauberer Programmierstil", wenn man die Null auch angibt.Werte zuweisen Beim Zuweisen eines Wertes ist es wichtig, dass man den Index angibt. Ansonsten hat dies eine Fehlermeldung zur Folge.
Für den Index können natürlich auch Variabeln
verwendet werden. Bei diesem Beispiel wird das Array mithilfe einer
Schleife
mit Werten abgefüllt.
Mehrdimensionale ArraysArrays können auch mehrere Dimensionen haben. Das sollte man sich am besten wie ein Schachbrett vorstellen, wobei jedes Häuschen ein Behälter ist und das ganze Schachbrett für das Array steht. Mehrdimensionale Arrays werden so deklariert:
Das Array hat nun 64 Felder. Die Wertzuweisung
erfolgt nun, indem man die "Koordinaten" angibt.
Die Array-FunktionWenn man ein Array von Hand abfüllen will, muss jedes Feld mit einem Wert aufgeführt werden. Um Tipparbeit zu sparen, kann man sich der Array-Funktion bedienen.
Der Index wird hier automatisch vergeben.Dynamische Feldvariabeln Eine dynamische Feldvariable kann ihre Größe während der Laufzeit ändern. Angenommen, man deklariert ein Array mit 200 Behältern, so verschwendet man Platz, wenn man nicht alle Behälter ausnützt. Wenn man aber mehr als 200 Werte zuweisen will, wird es einen Laufzeitfehler geben. Eine dynamische Feldvariabel wird so deklariert:
In der Prozedur muss man dem Array jedoch die
Anzahl der Behälter angeben. Das tut man mit dem ReDim Befehl.
In der Praxis verwendet man jedoch keine
konkreten Werte, sondern weißt die Anzahl Behälter mit
Variabeln zu, die durch
verschiedene Bedingungen ihren Wert erhalten.Grenzen eines Arrays Die Unter- und Obergrenze eines Arrays stellt man mit folgenden Befehlen fest:
Statische VariabelnWichtig ist es, zu wissen, dass eine Variable in der Laufzeit ihren Wert verlieren kann. Das ist genau dann, wenn du Prozedur verlassen wird. Die Variable verliert ihren Weg. Wird die Prozedur wieder aufgerufen, bekommt die Variable wieder den Wert 0. Um das zu verhindern, muss man den "Static" Befehl zur Variabelndeklaration verwenden.
BerechnungenAllgemeines So kann eine Berechnung in VB aussehen:
Das
Resultat einer Berechnung wird immer links geschrieben!
Dem
Ausdruck links vom Gleichheitszeichen wird der Wert des Ausdrucks
rechts vom
Gleichheitszeichen zugewiesen.
In
der Mathematik ist folgende Operation unmöglich:
In Visual Basic ist sie jedoch erlaubt, da = der
Zuweisungsoperator ist (jedoch auch der Vergleichsoperator, kein == wie
in C,
C++ oder PHP).Rechenoperationen
Zeichenketten Allgemeines Eine Zuweisung einer Zeichenkette muss immer mit Anführungszeichen erfolgen!
Verschiedene Textteile könne mit & verkettet
werden:
In Zeichenketten können natürlich auch Variabeln
vorkommen, in diesem Falle die Variable strText. Text muss immer mit ""
abgegrenzt werden. VbCrLf ist eine VB-Konstante, die für einen
Zeilenumbruch
steht. Das _ am Ende einer Zeile bedeutet, dass der Befehl auf der
nächsten
Zeile fortgesetzt wird, da man in VB kein ; an das Ende jedes Befehls
stellt,
wie bei C, C++ oder PHP.Msg- und InputBoxes Allgemeines Syntax zum aufrufen einer MsgBox:
Die MsgBox (MessageBox – Mitteilungsbox) dient
nur zur Ausgabe einer (Fehler-)Meldung. Man kann jedoch mehrere
Schaltflächen
verwenden und abfragen, welche Schaltfläche gerade gedrückt
worden ist. Hier
ein Beispiel dazu:
Die Variable "Antwort" bekommt in diesem Fall
von Windows Rückmeldung, welche der beiden Tasten gedrückt
wurde. So lassen
sich Abfragen generieren, wie z.B. in den Office Programmen; "Sind sie
sicher,
dass sie das Programm beenden wollen?Syntax zum aufrufen einer InputBox:
Mit der InputBox kann man den Benutzer zu einer
Eingabe auffordern. Die InputBox hat neben den Buttons auch ein
Textfeld, wo
der Benutzer Werte eingeben kann. Hier ein kleines Beispiel, um einer
Textvariabeln einen Wert zuzuweisen:
Die Variable text wird deklariert. Mit dem 2.
Befehl wird ihr der Wert der Input-Box zugewiesen.Entscheidungen Allgemeines Der Computer kann keine eigenen Entscheidungen treffen, er kann nur Auswerten ob eine Bedingung zutrifft oder nicht! (Ja/Nein) Die IF Schleife Die Syntax für eine IF Schleife sieht folgender maßen aus:
So sähe ein pratkisches Beispiel aus:
Falls das Vermögen null ist, wird ein Kredit
aufgenommen. Der Ausdruck kann mit folgenden Vergleichsoperatoren
mit
einem Wert verglichen werden:
Ein
Vergleich "Ist Gleich" kann bei Visual Basic mit dem Gleichheitszeichen
(=) durchgeführt werden, man braucht
nicht ==zu schreiben, wie in C, C++ oder PHP.Man kann verschiedene Ausdrücke mit den logischen Operatoren "OR" oder "AND" verknüpfen.
In diesem Beispiel wird nur ein Kredit
aufgenommen, wenn man kein Vermögen mehr hat und das
Portemonnaie leer
ist!
Bei obigem Beispiel wird ein Kredit aufgenommen,
wenn man kein Vermögen mehr hat, oder wenn das
Portemonnaie leer ist!Punkt vor Strich! Was in der Mathematik eine Punktoperation ist, ist in Visual Basic der AND Operator! Dieser wird zuerst ausgewertet! Mathematik:
Visual Basic:
Man könnte das auch mit Klammern verdeutlichen:
So wird der Ausdruck ausgewertet.Wenn man Strings miteinander Vergleichen will, muss man den Vergleichswert in "" setzen, falls es sich nicht um eine Variable handelt. Falls man nur ein Teil des Strings vergleichen will, so hat VB die Instr-Funktion bereit. Syntax:
Falls die Variable einen Teil des
Vergleichswerts enthält, so wird die Anweisung durchgeführt.
Mit dem > 0
Vergleich wird ermittelt, an welcher Stelle der Variable der
Vergleichswert
beginnt. Falls der Wert 0 ist, beginnt der Vergleichswert gar nie – der
Vergleichswert ist nicht in der Variable enthalten. In diesem Fall
könnte man
den Vergleich > 0 aber auch weglassen, was man bei anderen
Entscheidungen
auch machen könnte, so wäre es aber etwas
unüberischtlich und hätte nur bei
diesem Beispiel einen Vorteil.Mehrere Befehle ausführen Wenn mehrere Befehle ausgeführt werden sollen, so muss man mitteilen, wann der Befehlsclock fertig sein soll. Dies tut man mit dem End If Befehl. die Syntax:
Es werden nun alle Befehle zwischen Then und End
If durchlaufen.Der Else Befehl Bisher wurden nur Aktionen ausgeführt, falls eine Bedingung zutrifft. Was passiert aber, wenn die Bedingung nicht zutrifft? – Mit dem Else Befehl kann der Sonst-Fall angegeben werden! Hier die Syntax:
Die Befehle zwischen Else und End if werden nur
dann durchgeführt, wenn die Bedingung nicht zutrifft!Entscheidungen könne beliebig verschachtelt werden. Dies kann z.B. so aussehen:
Wenn die Bedingung 1 zutrifft, so wird Bedingung
2 geprüft. Wenn Bedingung 2 zutrifft, wird Befehl 1
ausgeführt, ansonsten
Befehl 2. Das ganze analog, wenn die Bedingung 1 nicht zutrifft (beim
Else-Fall).Das Verschachteln von Bedingungen ist schneller ausgeführt als das Verknüpfen von Bedingungen mit OR oder AND Operatoren! Zudem ist es auch übersichtlicher. Der ElseIf Befehl Wenn man eine verschachtelte Bedingung hat, aber keine Befehle für den Else Fall vorgesehen hat, ist die ElseIf Schleife angebracht. Mit der ElseIf Schleife kann eine zweite Bedingung geprüft werden:
Für den ElseIf Fall muss natürlich auch eine
Bedingung angegeben werden! Man kann auch mehrere ElseIf Abfragen auf
gleicher
Ebene hintereinander ausführen, dafür ist der "Select Case"
Befehl aber
sauberer (siehe weiter unten).Der GoTo Befehl Mit dem GoTo Befehl kann man jederzeit an eine beliebige Stelle einer Prozedur hüpfen. Das ganze sieht dann etwa so aus:
Die Befehle 1-3 werden ausgeführt. Der GoTo
Befehl teilt dem Programm mit, dass es nach oben hüpfen soll.
Diese Schleife
wird unendlich mal durchlaufen.Der GoTo Befehl gilt als "unsauberer" Programmierstil! Heutzutage verwendet man statt dem GoTo Befehl Funkionen und Subroutinen, die jederzeit aufgerufen werden können. Der Select Case Befehl Mit dem "Select Case" Befehl kann eine Reihe von Fällen geprüft und die jeweiligen Befehle ausgeführt werden. Hier die Syntax:
Hier ein praktisches Beispiel dazu:
Zum Vergleich ist stets ein Is vor den
Vergleichsoperator und den Vergleichswert zu setzen. Bei Wertereichen
ist das
nicht notwerndig.Optionsfelder und Kontrollkästchen Entscheidungen lassen sich besonders gut mit zwei Steuerelementen verbinden - mit dem Kontrollkästchen und dem Optionsfeld. Der Unterschied zwischen diesen beiden Steuerelementen ist folgender: In einem Formular/Rahmen kann immer nur eines von mehreren Optionsfeldern aktiv sein, jedoch können mehrere oder kein Kontrollkästchen aktiviert sein. Die wichtigste Eigenschaft dieser Steuerelemente ist "value". Wenn ein Optionsfeld aktiviert ist hat es den Wert "true", ein aktiviertes Kontrollkästchen hat jedoch den Wert "1". Es ist jeweils die exakte binäre Logik, der Programmierer muss diesen Unterschied jedoch kennen! Programmierschleifen Allgemeines Eine Schleife ist eine Zusammenfassung von Befehlen, die eine bestimmet Anzahl nacheinander ausgeführt werden. Visual Basic kennt folgende Schleifen:
Eine kopfgesteuerte Schleife wird nicht durchlaufen, wenn die Bedingung nicht zutrifft – sie enhält die Durchlaufbedingung am Anfang! Die "For-Next" Schleife ist kopfgesteuert! Unlogischerweise wird folgende Schleife einmal durchlaufen:
Eine fussgesteuerte Schleife wird mindestens
einmal durchlaufen. Wenn am Ende die Abbruchbedingung zutrifft, so wird
sie nicht mehr durchlaufen,
ansonsten wird sie wieder durchlaufen.Die "For-Next" Schleife Hier muss ein Startwert, ein Endwert und manchmal auch ein Schrittwert eingegeben werden. Syntax:
Hier ein praktisches Beispiel:
Die Schleife wird für Werte von n = 1 bis 10 durchgeführt. Da
keine Schrittgrösse angegeben wurde, ist diese 1. Falls X den
Startwert 0 hat, so ist der Endwert 10 – Die Variable wird 10 mal
durchlaufen. Falls man den Schrittwert "Step 0.5" angeben würde,
hätte X einen Endwert von 20!Achtung: Das Zählen in 0.1 Schritten ist sehr gefährlich, da der VB-Compiler bei float Zahlen eine gewisse Ungenauigkeit hat! Diese stört zwar nicht gross bei Berechnungen, für Schleifen sollte man aber immer Ganzzahlen oder den Currency-Datentyp verwenden! Die "Do-Loop" Schleife Bei der Do-Loop Schleife gibt es keinen Schleifenzähler. Die Anzahl der Durchläufe werden in der Abbruchbedingung angegeben. Syntax:
Die Do-Loop Schleife wird solange durchlaufen, bis die Abbruchbedingung
eintrifft. Bei while wird die Schleife solange durchlaufen, wie die
Bedingung wahr ist. Bei until wird die Schleife solange durchlaufen,
wie die Bedingung falsch ist.
Befehl 1 wird solange durchgeführt, bis n nicht mehr < 10 ist.
Falls keine Abbruchbedingung steht, wird die Schleife unendlich oft
durchlaufen. Man kann die Schleife jedoch auch in der Mitte verlassen.
Die Do Loop Schleife kann auch mit einer "Until-Bedingung” gesteuert
werden!
"While" und "until" könne auch nach dem "loop" Befehl
aufgeführt werden – so macht man aus einer kopfgesteuerten- eine
fussgesteuerte Schleife!Der Unterschied zwischen while und until ist folgender: Die while-Schleife wird solange durchlaufen, wie die Bedingung wahr ist. Die until-Schleife wird solange durchlaufen, wie die Bedingung falsch ist!
Schleifen verlassenFalls keine Abbruchbedingung angegeben wurde, läuft die Schleife unendlich durch. Man kann aber eine Schleife auch im inner mit einer Abbruchbedingung versehen. Dazu stehen folgende Befehle zur Verfügung:
Diese Befehle warden häufig mit einer "If-Abfrage” im innern einer
Schleife aufgeführt:
Die Schleife wird verlassen, wenn n grösser als 10 ist.Listen- und Kombinationsfelder Allgemeines: Beide Steuerelemente haben die Eigenschaft, dass sie mehrere Texteinträge zur Verfügung stellen. Die Hauptunterschiede zwischen diesen beiden Steuerelementen sind folgende:
Einträge hinzufügenDer Index wird in Klammern nach der Eigenschaft aufgeführt. Neue Einträge bring man mit der "AddItem" Methode in die Liste:
Das Abfüllen kann auch mit einer Schleife vereinfacht werden. In
diesem Beispiel werden Werte von 1 bis 100 in die Liste eingefügt.
Neue Einträge werden jeweils an das Ende der Liste gesetzt.
Texteinträge kann man auch mit der "Sorted" Eigenschaft der Liste
sortieren lassen.
Man kann aber auch die Position in der Liste selber wählen:
Der Wert "Text” wird an Stelle 100 der Liste gespeichert.Einträge entfernen Einträge können mit der "RemoveItem" Methode entfernt werden:
Hier wird der Eintrag an Stelle 24 der Liste entfernt. Man kann auch
sämtliche Einträge auf einmal löschen, dazu gibt es die
"Clear" Methode.
Auswahl von EinträgenDie Zuweisung des selektierten Listeneintrages wird folgendermassen an eine Variable weitergegeben:
Das Aufführen der Liste vor dem Index ist hier nicht zu vergessen!Um zu erfahren, welche Einträge bei einer Mehrfachauswahl ausgewählt wurden, steht die "Selected" Eigenschaft zur Verfügung. Mit folgender Schleife wird im Debugfenster angezeigt, welche Einträge ausgewählt sind:
Mehrfachauswahl von ListenDamit man mehrere Einträge aus einer Liste auswählen kann, muss die Eigenschaft "MultiSelect" den Wert 1 haben. Wenn diese Eigenschaft den Wert 2 hat, so kann man mehrere Einträge mit gedrückter Mausttaste anwählen. Um zu erfahren, welche Einträge ausgewählt sind, genügt die "Selected" Eigenschaft nicht mehr, da sie nur den Wert des zuletzt ausgewählten Eintrages zurückgibt. Hierzu muss man eine kleine Schleife programmieren. Die selektierten Einträge werden hier ins Debug-Fenster geschrieben.
Werte mit Steuerelementen eingebenAllgemeines Das Einstellen von Werten mit Steuerelementen hat einige Vorteile. So kann man bei einen Schiebebalken nur eine bestimmte Anzahl von Werten bestimmen. Eine Eingabeprüfung erübrigt sich also. Oft ist es auch benutzerfreundlicher, als wenn der Benutzer in ein Textfeld eintragen muss. Der Benutzer weiß zudem, was Maximal- und Minimalwert sind. VB hat 3 gute Steuerelemente auf Lager:
Mit einer Bildlaufleiste kann man einen Wert in einem bestimmten Bereich einstellen. Den aktuellen Wert kann man mit der "Value" Eigenschaft abfragen.
Zu beachten:
Prozeduren Allgemeines In VB gibt es keinen Hauptteil, wie z.B. in C/C++. Alle Befehle befinden sich in VB in einer Prozedur oder einer Funktion. Syntax Die Syntax von Prozeduren ist:
DefinitionEine Prozedur kann man bequem unter "Extras > Prozedur hinzufügen" definieren. Man kann jedoch einfach eine Prozedur ins Programmcodefenster eintragen. Prozeduraufruf Jede Prozedur hat ihren eigenen (eindeutigen) Namen. Um eine Prozedur aufzurufen, braucht man nur den Namen dieser Prozedur als Befehl hinzuschreiben. Man kann das auch mit dem Call Befehl tun, den man vor den Prozedurnamen stellt. Call Prozedurname Argumente Das hier ist eine kleine Prozedur, um die Caption-Eigenschaft eines Steuerelementes zu ändern:
Wenn man aber andere Steuerelemente auch
verändern will, so muss man Argumente einfügen. Argumente
sind Werte, die beim
Aufruf einer Prozedur übergeben werden.
Um die Prozedur auszuführen, braucht man jedoch
noch einen Wert für das Argument Label. Dieses Argument bekommt
seinen Wert
erst bei der Ausführung. Der Prozeduraufruf muss so aussehen:
Hier noch ein etwas komplexeres Beispiel:Der Prozedur "Ausrechnen" werden 3 Argumente übergeben. X, Y und Ausgabe.
Nun kann die Prozedur Ausrechnen Z aus X und Y
berechnen und gibt sie an ein Textfeld aus. Dieses Textfeld wurde im
Argument "Ausgabe" übergeben.
Optionale ArgumenteArgumente können auch Optional sein. Dafür muss man nur das Schlüsselwort "Optional" vor jedes Argument stellen. Da es aber im inneren der Prozedur Probleme geben könnte, wenn ein Argument keinen Wert erhalten hat, sollte man besser einen Default-Wert setzen, falls ein optionales Argument keinen Wert hat. Dafür ist die "IsMissing" Funktion zuständig:
Prozeduren mit einer variablen Anzahl von
ArgumentenOft ist es nützlich, wenn die Anzahl der Argumente dynamisch ist. Dies ist z.B. bei einer Funktion nützlich, welche die Summe von x-Beliebig vielen Zahlen berechnet.
Nun kann man die Summe beliebig vieler Zahlen
berechnen.
Wert oder Referenz?Einer Prozedur kann man ein Argument als Wert oder als Referenz übergeben. Wenn man nichts angibt, wird der Wert als Referenz übergeben. Wenn eine Variable als Referenz übergeben wird, so wird der Prozedur nur die Speicherstelle mitgeteilt, wo sich die Variabel befindet. Falls sich diese Variabel verändert, sieht die Prozedur den neuen Wert. Wenn man das Argument jedoch als Wert übergibt, so wird die Variabel "kopiert". Änderungen werden so nicht aktualisiert. Um zu kontrollieren, ob ein Argument als Wert oder Referenz übergeben wird, muss man ein Schlüsselwort voranstellen. ByVal vorangestellt bewirkt, dass das Argument als Wert übergeben wird. ByRef bewirkt, dass ein Argument als Referenz übergeben wird.
Der Gültigkeitsbereich von ProzedurenAn welchen Stellen des Programms können Prozeduren eigentlich aufgerufen werden? Wenn man nichts angibt, von überall aus. Wenn man aber eine Prozedur aus einem anderen Formular her aufrufen will, muss man den Formularnahmen vor den Prozedurnamen stellen.
Um eine private Prozedur zu programmieren, muss
man den "Private" Befehl voranstellen. Bei einer Globalen Prozedur ist
es der "Public" Befehl.
Eingebaute FunktionenAllgemeines Visual Basic bietet eine große Funktionsbibliothek. Enthalten sind: Stringfunktionen, Umwandlugsfunktionen, Datumsfunktionen und natürlich Mathematische Funktionen. Die Funktionen können in der Visual Basic Hilfe nachgeschlagen werden, oder man schaut in der MSDN-Library nachschauen. Mathematische Funktionen Der Rückgabewert von Mathematischen Funktionen hat immer den Datentyp Double. Daher sollte man auch diesen Datentyp für die Variabeln verwenden. Um kompliziertere Berechnungen durchzuführen, sollte man sich die Mathematik-Toolbox BNALib von www.tereatech.com herunterladen. Der Decimal-Datentyp bietet bis zu 25 Nachkommastellen. Er eignet sich also am besten für genaue Resultate. Um mit diesem Datentyp zu arbeiten, kann man aber keine Decimal-Variable deklarieren, man muss die Funktion CDec benutzen.
Mit VB6 wurde auch eine Rundungsfunktion
eingeführt. Diese heisst "Round".
DatumsfunktionenDatum/Uhrzeit werden in VB im Datentyp "date" abgespeichert. Dieser Geht vom 01.01.100 bis zum 31.12.9999. Das sollte für die VB-Ära wohl reichen. Um zu überprüfen, ob ein Ausdruck ein gültiges Datum ist, kann man die "IsDate" Funktion anwenden.
Um herauszufinden, welcher Wochentag auf ein
Datum zutrifft, oder in welcher Woche ein Datum ist, kann man die
DatePart
Funktion verwenden. Dieser Funktion müssen zwei Argumente
übergeben werden. Das
erste Argument bestimmt, was herausgelesen werden soll (Anzahl Tage,
Wochen, usw.).
Das zweite Argument ist das Datum.
Hier wird herausgelesen, an welcher Woche das
Datum sein wird (hier Woche 1).Manchmal will man auch herausfinden, wie viele Tage es noch dauert, bis man Geburtstag hat. Dieser Funktion muss man sogar 3 Argumente übergeben. Das erste Argument bestimmt, was herausgelesen werden soll (Anzahl Tage, Wochen, usw.). Das zweite Argument ist der Anfang der Periode , das dritte Argument das Ende der Periode.
Die Funktion berechner die Anzahl Tage, die "Jetzt" vom 01.01.2005
trennen.Zeichenkettenfunktionen Um eine bestimmte Anzahl von Zeichen aus einem String rauszukopieren, hat man mehrere Funktionen zur Verfügung. Beispielstring:
Wenn man das Wort "Auto" heraustrennen will,
nimmt man am besten die "Left" Funktion. Diese Funktion nimmt 2
Argumente
entgegen. Den Mustertext und die Anzahl der Zeichen, die herauskopiert
werden
sollen.
Hier wird das Wort "Auto" herauskopiert. Analog
zu diesem Beispiel, die Funktion Right. Diese hat den einzigen
Unterschied,
dass die Anzahl der Zeichen am Ende des Strings rauskopiert werden.
Die Variable strTeil hätte nun den Wert: "rrad”.Um Zeichen aus der Mitte der Zeichenkette zu kopieren, eignet sich die "Mid" Funktion am besten. Das erste Argument bleibt gleich, wie bei den vorherigen Beispielen. Das Zweite Argument steht für die Stelle, wo der String beginnt. Als drittes Argument gibt man die Anzahl der Zeichen an, die ausgelesen werden sollen.
Die Variable strTeil hat nun den Wert "Moto"
bekommen.Das ganze bringt natürlich wenig, wenn man den String nicht kennt. Wenn man den String nach einem bestimmten Wort absuchen will, muss man die "Instr" Funktion verwenden. Die Funktion nimmt als erstes Argument den abzusuchenden String entgegen, das zweite Argument ist ein String, nachdem man suchen will. Es wird die Position des Anfangs dieses Strings zurückgegeben.
Die Variable intTeil bekommt hier den Wert als
Zahl, wo "Motorrad" beginnt. Hier hätte intTeil den Wert 7.Wenn man ein bestimmtes Wort aus einem String heraustrennen will, aber nicht weiss, wo das Wort im String beginnt, muss man die Funktionen "Mid" und "Instr" verschachteln.
Die Variable bekommt hier den Wert "Motorrad"
zugewiesen.Das Null-Zeichen Angenommen, man kopiert einen String mit einer API Funktionen irgendwoher heraus, hat dieser ein Nullzeichen am Schluss. Mit so einem String kann man in VB nicht arbeiten. Um das Nullzeichen herauszutrennen, hat VB eine Konstante namens vbNullChar bereit. So trennt man das Nullzeichen heraus:
Dateierweiterung verändern
Die "Left" Funktion mit der "Instr" Funktion
verknüpft, liest den Dateinamen bis zum Punkt aus. Die neue
Dateiendung wird
hinten angesetzt.Abfragefunktionen Mit Abfragefunktionen kann man Variablen schnell und einfach testen. Um zu überprüfen, ob eine Variable überhaupt einen Wert hat, gibt es die IsEmpty Funktion.
Um zu überprüfen, ob eine Variable einen
numerischen Wert hat, kann man die Funktion IsNumeric verwenden.
UmwandlungsfunktionenUm eine Variable zu einem anderen Datentyp umzuwandeln, kann man die "C[Datentypkürzel]" Funktion verwenden.
Zm mit Hexadezimalen Werten zu arbeiten, muss
man nur ein & vor den Hexawert stellen.
ZufallszahlUm eine Zufallszahl zu erstellen, braucht man die Rnd-Funktion. Hier wird eine Zufallszahl von 1 bis 100 erstellt.
Der integer Variable wird eine Zufallszahl
zugewiesen. (Rnd * 100) bewirkt, dass 100 verschiedene Werte ausgegeben
werden
können. Warum aber + 1? Ganz einfach, weil wir eine Zufallszahl
zwischen 1 und
100 und nicht zwischen 0 und 99 haben wollen. Int muss vorangestellt
werden,
wenn wir eine Ganzzahl haben wollen.Benutzeroberflächen Steuerelementfelder Wenn man ein Steuerelement mit Copy-Paste kopiert, erhält man eine Meldung; "Wollen sie ein Steuerelementfeld erstellen?". In einem Steuerelementfeld haben alle Steuerelemente den gleichen Namen und die gleichen Eigenschaften (d.h. sie sind natürlich auch vom selben Typ). Da diese Steuerelemente aber den selben Namen haben, werden sie durch ihren "Index" unterschieden. Angenommen, man kopiert ein Steuerelement "txtEingabe" 9 mal, sind 10 Steuerelemente mit dem gleichen Namen auf dem Formular vorhanden. Wenn man jedem Steuerelement nun etwas zuweisen will, tut man das mithilfe des Index.
Hier wäre eine For-Schleife angebracht:
Wenn man sich nicht sicher ist, wo der Index der
Steuerelemente liegt, kann man mit den Eigenschaften "LBound" und
"UBound" die
Grenzwerte feststellen.
Auch bei Ereignissen muss der Index angegeben
werden:
Mehrere Formulare benutzenKleinere Programme kann man bequem auf ein Formular bringen. Es wäre sogar kontraproduktiv, wenn man ein kleines Programm auf mehreren Formularen verteilen würde. Bei grösseren Projekten sind mehrere Formulare alleine schon wegen des Platzbedarfs erforderlich. Ein neues Formular wird über "Projekt > Formular hinzufügen" hinzugefügt. Es gibt bereits ein paar Formularmuster zur Auswahl, z.B. ein Info-Formular. Falls man eigene Formulare öfters benutzt, sollte man sie im Ordner "\Template\Forms" abspeichern. Wenn man das Projekt nun ausführt, wird aber nur das erste Formular angezeigt. Um ein weiteres Formular aufzurufen, gibt es die "Show" Methode.
Um das Formular verschwinden zu lassen, gibt es
die "Hide" Methode, die das Formular nicht schliesst, sondern nur
Unsichtbar
macht. Wenn das Formular aber ganz geschlossen werden soll, brauch man
den
Befehl "Unload Me".
Modal – nicht modal
Auf Steuerelemente von anderen Formularen
zugreifenDer Zugriff auf Steuerelemente von anderen Formularen ist kein Problem. Man braucht nur den Namen des Formulars vor das Steuerelement zu stellen.
Der Zugriff auf Variabeln aus einem anderen
Formular, funktioniert nur, wenn es sich um öffentliche Variabeln
handelt.
Wenn man ein anderes Formular anspricht, wird es
geladen, aber nicht angezeigt.Der With-Befehl Oft muss man einem Objekt viele Werte für Eigenschaften zuweisen. Damit man nicht jedes Mal das Objekt aufführen muss, gibt es den "with" Befehl.
Es können nicht nur Eigenschaften, sondern auch
Methoden aufgeführt werden.MDI-Benutzeroberflächen Fast alle professionellen Programme sind eine MDI-Oberfläche. In einer solchen Oberfläche, gibt es ein übergeordnetes Formular, das keine Steuerelemente besitzen kann, bis auf Menü-, Status- und Symbolleiste. Alle anderen Formulare werden dann innerhalb des Hauptformulares angezeigt. Software wie "Microsoft Word" und die anderen Office Komponenten funktionieren alle nach diesem MDI-Prinzip. In diesem Hauptfenster werden sogenannte "Kindfenster" angezeigt. Diese kann man im inneren des Formulares bewegen. Wenn so ein Kindfenster maximiert wird, bleibt das Hauptfenster trotzdem noch zu sehen. Ein MDI Formular wird über "Projekt > MDI-Formular hinzufügen" eingefügt. Nun kann man ein weiteres leeres Formular hinzufügen. Damit es als Kindfenster angezeigt wird, muss die Eigenschaft MDIChild True sein. Wichtig beim Hauptfenster ist auch die "AutoShowChildren", welche die Kindfenster automatisch anzeigt. Menüleisten Ein MDI-Fenster kann keine Steuerelemente wie Buttons, Textfelder, Labels usw. enthalten. Um mit dem Programm arbeiten zu können, ist eine Menüleiste ideal. Visual Basic stellt einen Menüleisten-Editor zur Verfügung, mit diesem kann man solche Menüleisten erstellen, welche aus den Office Programmen bekannt sind. Den Menü-Editor startet man über "Extras à Menüeditor" oder über das Symbol in der Symbolleiste. Die wichtigsten Eigenschaften im Überblick:
Eine Menüleiste kann nur auf ein "Click" - Ereignis reagieren. Das Präfix für Menüeinträge lautet "mnu". Die einzelnen Schichten der Menüleiste können per Pfeiltasten verschoben werden. Die erste Schicht stellt jeweils ein Untermenü dar (Datei | Bearbeiten | Ansicht | ...). Alle tieferen Ebenen werden in diesem Untermenü angezeigt. Man kann Menüs beliebig weit verschachteln, man sollte aber nur in jedem Untermenü noch ein Untermenü machen und nicht mehr. Ein Trennstrich kann man ganz einfach machen, indem man einem Menüeintrag die Caption-Eigenschaft "-" gibt. Dialogfenster Oft sieht man bei Windows-Programmen dieselben Dialogfenster, womit man z.B. eine Datei speichern oder öffnen kann. Solche Dialogfenster müssen nicht programmiert werden, sie werden von VB zur Verfügung gestellt. Um diese Dialogfenster zu verwenden, muss man das Steuerelement "Microsoft Common Dialog Control 6.0" von "Projekt > Komponenten" hinzufügen. Das Steuerelement wird während der Programmausführung unsichtbar bleiben. Das Präfix lautet "dlg". Hier ein Beispiel, wie eine Datei geladen werden kann: code>Mit dieser Prozedur kann man den Dateinamen herauslesen. Angenommen, man will ein Bild auf einem neuen Formular betrachten, kann man z.B. so vorgehen:
Der Befehl "Set F = New frmBild” dupliziert das
Formular frmBild. Nun wird auf dem Steuerelement imgBild das Bild
geladen.Symbolleiste Eine Symbolleiste ist ein ideales Steuerelement für Programmbefehle, die oft verwendet werden (Datei öffnen, Datei speichern...). Für die Symbolleiste werden Bilder verwendet. Diese Bilder können nicht direkt geladen werden, sie müssen aus einer Bildliste stammen, da die Bilder ansonsten nicht mit dem Programm mitgeliefert werden.
Eine Statusleiste ist nicht zwingend notwendig, sie rundet aber die Oberfläche ab. Um eine Statusleiste einzufügen, muss die Steuerelementsammlung Microsoft Common Controls 6.0 in der Toolbox liegen. Nun ordnet man die Statusleiste (StatusBar) irgendwo auf dem MDI-Fenster an (Präfix: "sta"). Nun können beliebig viele Felder eingefügt werden. Die einzelnen "Panels" werden über ihren "Key" angesprochen.
Man muss nicht alle Panels, die man braucht,
selber programmieren. Es gibt einige vorgefertigten Panels, die man im
"Benutzerdefiniert"-Fenster auswählen kann (Style-Eigenschaft).Der Zeitgeber Der Zeitgeber ist ein unscheinbares Steuerelement in der Werkzeugsammlung. Er hat nur ein Ereignis – "Timer". Alle paar Millisekunden (interval-Eigenschaft) wird dieses Ereignis aufgerufen. Um die Uhrzeit anzeigen zu lassen, muss der Timer auf dem Formular angeordnet sein (er wird während der Laufzeit unsichtbar bleiben). Hier der Befehl, um die Uhrzeit auf einem label anzeigen zu können.
Je kleiner das Interval list, desto genauer
läuft die Uhr. Man kann zwar einen Intervall von 1 ms eingeben,
der eingebaute PC-Timer
hat jedoch nur einen Intervall von 53 ms. Das sollte aber an
Genauigkeit
reichen.Fehler auffangen In Visual Basic gibt es drei Arten von Fehlern: 1. Syntaxfehler Diese Fehler sind in VB absolut harmlos. Die Benutzerumgebung korrigiert diese automatisch, man kann gar keinen Fehlerhaften Code kompilieren à Syntaxfehler können nicht zum Benutzer gehen. 2. Laufzeitfehler Solche Fehler können in der Entwicklungsphase nicht auftreten. Sobald man das Programm startet, können diese auftreten (Deswegen: Testen). Der häufigste Laufzeitfehler ist wohl "Überlauf". Ein Überlauf entsteht dann, wenn man eine zu große Zahl an eine zu kleine Variable zuweisen will. Diese Probleme kann man mit Eingabeprüfungen auffangen. "Typen Unverträglich" kommt auch häufig vor. Dieser Laufzeitfehler entsteht, wenn man z.B. einen Buchstaben an eine Integer-Variable zuweisen will. Das Problem an den Laufzeitfehlern: Das Programm stürzt sofort ab! 3. Logische Fehler Ein Programm kann jahrelang korrekt laufen, bis eines Tages eine Verkettung von Situationen das Programm zu fehlerhaften Ausgaben bringt. Hier muss man ausgiebig testen und überprüfen. Laufzeitfehler abfangen Laufzeitfehler bringen das Programm zum Absturz und beenden es, ohne das der Benutzer seine Daten abspeichern kann. In VB gibt es jedoch sog. "Fehlerbehandlungsroutinen", welche das Programm nicht zum Absturz bringen. Der "On-Error" Befehl Es gibt drei Arten vom "On-Error" Befehlen: 1. On Error Goto [Sprungmarke] 2. On Error Resume Next 3. On Error Goto 0 Die am meisten verwendete Variante des "On Error" Befehls ist "On Error Goto [Sprungmarke]". So kann eine Prozedur aussehen, in der ein Fehler abgefangen werden soll:
Err.Number Angenommen, der Benutzer gibt bei obigem Beispiel eine zu große Zahl ein. Nun kommt immer die gleiche Fehlermeldung, es sei ein Fehler aufgetreten. Der Benutzer weiss jedoch nicht, was er anders machen soll. Um Laufzeitfehler gezielt abfangen zu können, muss man beachten, welcher Laufzeitfehler aufgetreten ist. Dazu gibt es die die VB Konstante Err.Number. Am besten programmiert man eine "Select-Case" Schleife die prüft, welcher Fehler aufgetreten ist. Hier muss man die Nummern der Laufzeitfehler kennen.
Diese Fehler treten am häufigsten auf. Hier die Erweiterung des obigen Programmes:
Nun wird der Benutzer gezielt auf seine
Falscheingabe hingewiesen.Fehlersuche Um logischen Fehlern vorzubeugen, muss man oft Sachen überprüft werden, wie z.B. Werte von Variabeln. Dazu eignet sich am besten das Debug-Fenster, unten zu finden. Um den Wert von Variable intZahl auszugeben, kann man so vorgehen:
Und schon sieht man unten im Debug Fenster die
Zahl. Debug-Anweisungen werden nicht kompiliert, sie müssen also
weder
auskommentiert, noch gelöscht werden, bevor man eine .exe erstellt.Mit F8 kann das Programm im Einzelschrittmodus getestet werden. Bei jedem Druck auf F8 wird der nächste Befehl ausgeführt. Dateizugriff Warum auf Dateien zugreifen? Um Werte in einem Programm abspeichern zu können, verwendet man Variabeln. Wenn man aber Werte dauerhaft abspeichern will, reichen Variabeln nicht mehr aus. Sobald die Prozedur verlassen wird, verliert die Variabel ihren Wert (wenn sie nicht global ist). Ansonsten verliert sie ihren Wert spätestens dann, wenn das Programm beendet wird. Damit man Werte dauerhaft speichern kann (wie z.B. Optionen, wie ein Benutzer die Software für sich persönlich konfiguriert), muss man die Werte in Dateien abspeichern, wo man sie danach wieder herauslesen kann. Wie funktioniert der Zugriff? Der Dateizugriff läuft immer nach dem gleichen Schema ab:
Um mit Dateien arbeiten zu können, muss zuerst eine Verbindung zwischen VB und der Datei hergestellt werden. Hier muss man die Zugriffsnummer und den Zugriffsmodus angeben.
Hier wird die Datei "C:\textfile.txt” für den
Modus "Input” mit der Verbindungskennung 1 geöffnet. Diese Kennung
ist
notwendig, da sonst das Betriebssystem nicht weiß, wo sich die
Verbindung zur
Datei im Speicher befindet. Um Daten in eine Datei schreiben zu
können, muss "Output" oder "Append" verwendet werden. Mit "Append"
werden die Daten
angehängt.Wenn man eine Datei für "Output" öffnen will und diese nicht existiert, kommt kein Laufzeitfehler! Die Datei wird erstellt. Das ist sehr praktisch, kann aber auch zu Problemen führen, wenn man mit den falschen Files arbeitet und es nicht merkt. Eine Übersicht über die Zugriffsmodi;
Man sollte die Zugriffsnummer nie manuell programmieren! Falls diese Zugriffsnummer schon besetzt ist, wird das Programm abstürzen. Die Funktion "FreeFile" sucht eine freie Verbindungskennung aus und gibt die Kennung wieder frei, wenn die Verbindung nicht mehr verwendet wird.
Dateien werden jeweils mit dem "Close"-Befehl
geschlossen.Einlesen und Abspeichern von Daten Das Öffnen und Schließen der Datei ist nur ein Formalismus, der aber trotzdem nicht fehlen darf. Interessant wird es erst, wenn Werte eingelesen und abgespeichert werden können. Die wichtigsten Befehle:
Beispiele Sequentiell abspeichern
Sequentiell einlesenHier ist zu beachten, dass man den "Umweg" über eine Variable nehmen muss
Portionenweises Einlesen von TextOft will man nicht den gesamten Inhalt einer Datei einlesen, sondern nur ein paar Bits. Mit der "Input" Funktion kann man eine bestimmte Anzahl von "Bits" einlesen, mit der "Line Input" Funktion jeweils ganze Zeilen. Die Input Funktion Der Input Funktion müssen zwei Werte übergeben werden. Die Zugriffsnummer und die Anzahl der zu lesenden Zeichen. Um die Größe der geöffneten Datei zu erfahren, kann man mit der Funktion "Lof" die Anzahl der Bytes herauslesen. Eine Übersicht der Funktionen, die mit der Länge von Dateien zu tun haben:
Zahlen speichert man grundsätzlich mit dem "Write" Befehl, da dieser zwischen Datentypen unterscheiden kann. Bei Zahlen muss man jedoch den Umweg über eine Zahlenvariable nehmen, da aus einem Textfeld nur ein String kopiert werden kann. Wenn man eine Datei mit "Print" beschrieben hat, wird nach jedem Element ein Zeilenumbruch gemacht. Um diese Datei Zeile für Zeile auszulesen, nimmt man den "Line Input" Befehl.
Die Datei wird Zeilenweise eingelesen, solange der Zeiger noch nicht am
Ende angekommen ist (while Schleife). Umgang mit Zahlen Get und Put Binäre Dateien liest man mit dem "Get” Befehl aus und beschreibt sie mit dem "Put” Befehl. Zur Erläuterung der Befehle ein Beispiel. Es werden drei Zahlen in eine Datei geschrieben:
Das Programm initialisiert drei Variablen von verschiedenen
Zahlendatentypen. Danach wird die Datei wie immer geöffnet. Der
"Put" Befehl speichert dann die Werte in die Datei. Am Schluß
wird die Datei wie immer geschlossen.Das Herauslesen mit "Get" funktioniert exakt gleich, nur dass man den Befehl "Get" statt "Put" schreibt. Umgang mit Dateien In Visual Basic kann man nicht nur Informationen aus Dateien rausholen oder in Dateien speichern, sondern auch Dateien und Ordner erstellen, löschen und verschieben. Die wichtigsten Befehle im Überblick:
Um noch mehr Befehle verwenden zu können, muss man API Funktionen aus SHELL32.DLL benutzen. Dialogfelder VB stellt vieles zur Verfügung, darunter sind auch Dialogfelder. Um mit den Dialogfeldern arbeiten zu können, muss man unter "Projekt >> Komponenten" das Steuerelement "Microsoft Windows Common Dialog Control 6.0" miteinbeziehen. Das Steuerelement kann nun an einem beliebigen Ort in dem Formular eingeordnet werden (Präfix: cdl). Die wichtigsten Methoden des Steuerelementes im Überblick:
Wenn man das Steuerelement mit der rechten Maustaste anklickt und unter Eigenschaften geht, kann man viele Einstellungen verändern. Das ganze ist natürlich auch während der Laufzeit möglich. Ein Beispiel für ein Dialogfeld, um Dateien zu öffnen.
Erklärungen:
Um die Datei zu öffnen, muss man je nach Datentyp andere Befehle
verwenden. Das Dialogfeld sieht in diesem Beispiel so aus:![]() Grafiken Allgemeines VB bietet nur einige wenige Methoden für Grafiken. Es besteht allerdings auch die Möglichkeit, Grafiken mit DirectX oder OpenGL darzustellen. Letzteres zu erlernen lohnt sich nur für Grafikprofis. Mit den wenigen Steuerelementen kann man auch nur auf dem Formular, dem Bildfeld und auf dem Drucker zeichnen. Wenn man Grafiken auf andere Steuerelemente ausgeben will, muss man API Funktionen aufrufen. Die Grafikmethoden im Überblick
Ausgabe Die Ausgabe findet entweder auf dem Formular, im Bildfeld oder auf den Drucker statt. Als Koordinaten kann man alles von (0, 0) bis (Breite, Höhe) angeben. Was passiert aber, wenn man das Steuerelement in der Größe verändert? Man muss den Programmcode ändern. Um das zu vermeiden, sollte man ein eigenes Koordinatensystem für jedes Steuerelement machen. Das kann man ganz einfach mit der Scale Methode machen. Hier die Syntax für die Einteilung eines Bildfeldes in 100x100 Punkte: picBildfeld.Scale (0, 0) – (100, 100)
Statt den absoluten Koordinaten kann man auch relative Koordinaten und
den relativen Unterschied (Step X, Step Y) statt (X, Y) angeben. Die aktuelle Position findet man den Eigenschaften "CurrentX" und "CurrentY" heraus. Ausgaben formatieren
Farben In Windows, somit auch in VB, werden Farben mit dem RGB (Red, Green, Blue) Wert dargestellt. Jede Grundfarbe kann hier einen Wert zwischen 0 und 255 annehmen, d.h. es gibt dreimal 255 Möglichkeiten >> man kann 255^2 Farben darstellen. Farben werden in VB als long gespeichert. Um mit Hex Farbwerten arbeiten zu können, muss man vor die Hex-Zahl &H voranstellen, damit sie als Hex Wert erkannt wird. Um eine Farbe direkt an ein Steuerelement zuzuweisen, kann man die RGB Funktion benutzen.
Wenn einem 16 Farben genügen, kann man den QBColor-Befehl nutzen.
Für diese 16 Farben gibt es auch Konstanten, z.B. vbRed für
Rot, vbBlack für schwarz usw.Bilder anzeigen Fast jedes Steuerelement hat eine "Picture" Eigenschaft. Ein Bild kann man also auf den meisten Steuerelementen so anzeigen lassen:
Um Bilder abspeichern zu können, kann man den "SavePicture”
Befehl benutzen. Nun ist es bereits möglich, ein einfaches
Zeichenprogramm zu programmieren. Man muss nur die PSet Methode mit dem
MouseMove Ereignis verknüpfen.Das Abspeichern von Bildern (bzw. Bildfeldern) ist auch nicht besonders schwer.
Allerding funktioniert der obere Befehl nich mehr, wenn man ein Bild an
einer bestimmten Position anzeigen lassen
will, da er die Bilder links
oben platziert. Dazu stellt VB die PaintPicture Methode zur
Verfügung. Das komische an dieser Methode ist, dass sie keine
Bilder laden kann, sondern, dass man die Picture Eigenschaft von
anderen
Objekten übernehmen muss. Die Argumente in den Eckklammern sind
optional.
Argumente im Überblick
Ausgabe auf dem Drucker Das Drucken in VB wird über das Printer Objekt gesteuert. Mit dem Printer Objekt kann man nicht nur ausdrucken, sondern auch erfahren wie viele und welche Drucker installiert sind. Wichtig: Alles was mit Druckern zu tun hat, wird über die Printers Klasse angesprochen, Ausdrucke erfolgen durch das Printer Objekt der Klasse Printers. Dazu ein Beispiel:
Hier wird eine Liste mit allen verfügbaren und installierten
Druckernamen gefüllt.Die Ausgabe von Text auf den Drucker ist nicht sehr sensationell, dafür einfach. Folgende Anweisung gibt einen String auf den Drucker aus. Mit der darauf folgenden Anweisung wird dem Drucker mitgeteilt, dass der Drucker hier nun aufhören soll.
Die Z-AchseDie Z-Achse dient (leider) nicht dazu, 3 dimensionale Grafiken auszugeben, sie gibt nur an, ob sich ein Objekt im Vordergrund oder im Hintergrund befindet. Hier gibt es nur zwei Zustände: 1 und 0.
Beim Wert 1 wird das Objekt im Vordergrund bzw. Wert 0 im Hintergrund
untergebracht.Bildschirmauflösung feststellen Die Bildschirmauflösung bekommt man in VB, wenn man die Widht Eigenschaft des Screen Objektes durch die TwipsPerPixelX Eigenschafts des gleichen Objektes dividiert. Das kann z.B. so aussehen:
Zur Verdeutlichung das Ergebnis bei einer 1024x768 Auflösung.![]() Auto Redraw? Die Auto Redraw Eigenschaft einer Ausgabefläche gibt an, ob der Inhalt in den Arbeitsspeicher geladen werden soll (true) oder nicht (false). Bei false wird das Bildfeld geleert, wenn man es mit einem anderen Objekt überdeckt. API-Funktionen Allgemeines In Visual Basic hat man recht viele Funktionen zur Verfügung. Was macht man aber, wenn man z.B. erfahren möchte, wie viel Arbeitsspeicher ein PC hat? Dazu gibt es keine VB Funktionen. Um solche Informationen herauslesen zu können, muss man fest eingebaute Windows Funktionen (sog. API Funktionen) aufrufen. Ein Vorteil von VB gegenüber C/C++ ist, dass man relativ wenige API Funktionen benötigt, da man viele Module einfach verwenden kann (z.B. Standarddialogfelder, welche man in C/C++ durch API Befehle aufrufen muss). API Funktionen werden jeweils in .dll Dateien gespeichert. Es gibt auch "gefährliche" API Funktionen, mit denen man z.B. Laufwerke formatieren, die Registry verwenden oder andere systemnahe Dinge verändern kann >> man sollte nur die Funktionen aufrufen, die man kennt. Um zu erfahren, was die einzelnen API Funktionen tun, muss man sich spezielle Bücher besorgen oder in einem API-Viewer nachschauen. Der Aufruf von API Funktionen Um API Funktionen verwenden zu können, muss man dies dem Compiler mit einem "Declare" Befehl angeben. Dieser Declare Befehl teilt VB vier wichtige Dinge mit:
Die Syntax für eine Funktion erfordert zusätzlich den
Datentyp des Rückgabewertes:
Der Aliasname ist nichts weiteres als der wahre Name einer Funktion.
Man weisst einen Aliasnamen zu, wenn der Originalname zu lang und
schlecht merkbar ist oder wenn man einen Namenskonflikt vermeiden
möchte.Der API Viewer Damit man sich die Informationen für API Deklarationen nicht zusammensuchen muss, sollte man einen sog. API Viewer benutzen. So ein Programm stellt alle nötigen Informationen zur Verfügung. Zu empfehlen ist ganz besonders der "API-Guide" von http://www.allapi.net. Auf die Registry zugreifen Bevor man mit Programmen auf die Registry zugreift, sollte man unbedingt ein Registry Backup machen! Die Registry dient nicht dazu, große Datenmengen aufzunehmen. Mithilfe dieser Datenbank kann man Einstellungen und Konfigurationen abspeichern, welche wenig Platz benötigen. Visual Basic hat bereits zwei Registry Befehle, diese speichern die Schlüssel jeweils immer in dem gleichen Unterordner. Um weitergehende Einstellungen an Windows oder an Programmen vorzunehmen, muss man auf die entsprechende .dll zugreifen. Eine Übersicht über die wichtigsten Registry Funktionen:
Nachdem ein Formular geladen wurde, passiert zuerst mal nichts. Visual Basic geht in die Warteschleife über. Nun muss eine Prozedur aufgerufen werden. Dies passiert in einem VB meistens, wenn eine Schaltfläche angeklickt wurde. Das kann aber auch ein LostFocus Ereignis sein... Kein Formular – kein Programm? Visual Basic Programme müssen nicht zwingend ein Formular besitzen. Man kann auch einfach eine Prozedur namens Main programmieren, welche beim Programmstart ausgeführt wird. Kommentare Kommentare können dazu benutzt werden, den Programmcode auszukommentieren, d.h. näher zu beschreiben. Man kann Kommentare jedoch auch dazu einsetzten, einen bestimmten Teil eines Programms nicht zu kompilieren. Der Programmcode bleibt dabei in der Quellcodedatei erhalten. Kommentare werden in VB mit dem unscheinbaren Zeichen ’ gemacht. Mit // oder /* */ kann man in VB keine Kommentare machen. Objekte Ein Objekt ist in den meisten Fällen ein Steuerelement. Dazu kommt noch das Objekt „Me“, was soviel bedeutet wie: „Dieses Formular“. Methoden Eine Methode ist ein Befehl, der sich auf das aufgeführte Objekt bezieht. Eine Methode wird folgender maßen aufgeführt: Me.Cls Diese Methode leert die Innenfläche des Formulars. Methoden werden durch einen „.“ Getrennt vom Objekt aufgeführt Visual Basic an sich kennt keine Befehle, korrekt sind diese nur Methoden vom Objekt VBA. Falls man eine Funktion z.B. gleich wie einen VB-Befehl benannt hat, kann man den VB-Befehl folgender maßen aufrufen:
EigenschaftenEine Eigenschaft ist wie der Name schon sagt, eine Eigenschaft eines Objekts. Die Syntax entspricht der Syntax einer Methode, mit dem Unterschied, dass jeder Eigenschaft ein Wert zugewiesen wird. lblLabel1.caption = „Das ist ein Bezeichnungsfeld“. Die Caption Eigenschaft eines Labels erhält den Wert „Das ist ein Bezeichnungsfeld“. Variabeln Deklaration von Variabeln: Bei jedem Programm sollte man „Option Explicit“ in die erste Zeile schreiben. Durch diesen Befehl müssen alle Variabeln in einem Programm deklariert werden. Es gibt drei Möglichkeiten um eine Variable zu deklarieren: Dim [Variabelnname] Als [Datentyp]
Arrays Eine herkömmliche Variable kann nur einen Wert speichern. Um mehrere Werte zu speichern müsste man also mehrere Variabeln deklarieren. Was tut man aber, wenn man nicht weiss, wie viele Werte der Benutzer eingibt (z.B. in einem Taschenrechner)?. Dafür gibt es sogenannte Arrays oder zu deutsch, Feldvariabeln. Deklaration Ein Array wird mit den selben Befehlen deklariert, wie eine „normale“ Variable. Es ist jedoch wichtig, einen Wertbereich anzugeben. Dieser Wert wird in Klammern nach dem Variabelnamen aufgeführt.
Obiges Beispiel deklariert eine Variable namens
meinArray das 200 Werte entgegen nehmen kann. Das Schlüsselwort to kann man
sich auch sparen. Folgende Deklaration hat die selbe Funktion:
Wenn nur die Grösse angegeben wurde, geht VB
davon aus, dass man die Felder 0 bis 199 deklarieren will. Es gilt jedoch als
„sauberer Programmierstil“, wenn man die Null auch angibt.Werte zuweisen Beim Zuweisen eines Wertes ist es wichtig, dass man den Index angibt. Ansonsten hat dies eine Fehlermeldung zur Folge.
Für den Index können natürlich auch Variabeln
verwendet werden. Bei diesem Beispiel wird das Array mithilfe einer Schleife
mit Werten abgefüllt.
Mehrdimensionale ArraysArrays können auch mehrere Dimensionen haben. Das sollte man sich am besten wie ein Schachbrett vorstellen, wobei jedes Häuschen ein Behälter ist und das ganze Schachbrett für das Array steht. Mehrdimensionale Arrays werden so deklariert:
Das Array hat nun 64 Felder. Die Wertzuweisung
erfolgt nun, indem man die „Koordinaten“ angibt.
Die Array-FunktionWenn man ein Array von Hand abfüllen will, muss jedes Feld mit einem Wert aufgeführt werden. Um Tipparbeit zu sparen, kann man sich der Array-Funktion bedienen.
Der Index wird hier automatisch vergeben.Dynamische Feldvariabeln Eine dynamische Feldvariable kann ihre Größe während der Laufzeit ändern. Angenommen, man deklariert ein Array mit 200 Behältern, so verschwendet man Platz, wenn man nicht alle Behälter ausnützt. Wenn man aber mehr als 200 Werte zuweisen will, wird es einen Laufzeitfehler geben. Eine dynamische Feldvariabel wird so deklariert:
In der Prozedur muss man dem Array jedoch die
Anzahl der Behälter angeben. Das tut man mit dem ReDim Befehl.
In der Praxis verwendet man jedoch keine
konkreten Werte, sondern weißt die Anzahl Behälter mit Variabeln zu, die durch
verschiedene Bedingungen ihren Wert erhalten.Grenzen eines Arrays Die Unter- und Obergrenze eines Arrays stellt man mit folgenden Befehlen fest:
Statische VariabelnWichtig ist es, zu wissen, dass eine Variable in der Laufzeit ihren Wert verlieren kann. Das ist genau dann, wenn du Prozedur verlassen wird. Die Variable verliert ihren Weg. Wird die Prozedur wieder aufgerufen, bekommt die Variable wieder den Wert 0. Um das zu verhindern, muss man den „Static“ Befehl zur Variabelndeklaration verwenden.
BerechnungenAllgemeines So kann eine Berechnung in VB aussehen:
Das
Resultat einer Berechnung wird immer links geschrieben!
Dem
Ausdruck links vom Gleichheitszeichen wird der Wert des Ausdrucks rechts vom
Gleichheitszeichen zugewiesen.
In
der Mathematik ist folgende Operation unmöglich:
In Visual Basic ist sie jedoch erlaubt, da = der
Zuweisungsoperator ist (jedoch auch der Vergleichsoperator, kein == wie in C,
C++ oder PHP).Rechenoperationen
Zeichenketten Allgemeines Eine Zuweisung einer Zeichenkette muss immer mit Anführungszeichen erfolgen!
Verschiedene Textteile könne mit & verkettet
werden:
In Zeichenketten können natürlich auch Variabeln
vorkommen, in diesem Falle die Variable strText. Text muss immer mit „“
abgegrenzt werden. VbCrLf ist eine VB-Konstante, die für einen Zeilenumbruch
steht. Das _ am Ende einer Zeile bedeutet, dass der Befehl auf der nächsten
Zeile fortgesetzt wird, da man in VB kein ; an das Ende jedes Befehls stellt,
wie bei C, C++ oder PHP.Msg- und InputBoxes Allgemeines Syntax zum aufrufen einer MsgBox:
Die MsgBox (MessageBox – Mitteilungsbox) dient
nur zur Ausgabe einer (Fehler-)Meldung. Man kann jedoch mehrere Schaltflächen
verwenden und abfragen, welche Schaltfläche gerade gedrückt worden ist. Hier
ein Beispiel dazu:
Die Variable „Antwort“ bekommt in diesem Fall
von Windows Rückmeldung, welche der beiden Tasten gedrückt wurde. So lassen
sich Abfragen generieren, wie z.B. in den Office Programmen; „Sind sie sicher,
dass sie das Programm beenden wollen?Syntax zum aufrufen einer InputBox:
Mit der InputBox kann man den Benutzer zu einer
Eingabe auffordern. Die InputBox hat neben den Buttons auch ein Textfeld, wo
der Benutzer Werte eingeben kann. Hier ein kleines Beispiel, um einer
Textvariabeln einen Wert zuzuweisen:
Die Variable text wird deklariert. Mit dem 2.
Befehl wird ihr der Wert der Input-Box zugewiesen.Entscheidungen Allgemeines Der Computer kann keine eigenen Entscheidungen treffen, er kann nur Auswerten ob eine Bedingung zutrifft oder nicht! (Ja/Nein) Die IF Schleife Die Syntax für eine IF Schleife sieht folgender maßen aus:
So sähe ein pratkisches Beispiel aus:
Falls das Vermögen null ist, wird ein Kredit
aufgenommen. Der Ausdruck kann mit folgenden Vergleichsoperatoren mit
einem Wert verglichen werden:
Ein
Vergleich „Ist Gleich“ kann bei Visual Basic mit dem Gleichheitszeichen (=) durchgeführt werden, man braucht
nicht ==zu schreiben, wie in C, C++ oder PHP.Man kann verschiedene Ausdrücke mit den logischen Operatoren „OR“ oder „AND“ verknüpfen.
In diesem Beispiel wird nur ein Kredit
aufgenommen, wenn man kein Vermögen mehr hat und das Portemonnaie leer
ist!
Bei obigem Beispiel wird ein Kredit aufgenommen,
wenn man kein Vermögen mehr hat, oder wenn das Portemonnaie leer ist!Punkt vor Strich! Was in der Mathematik eine Punktoperation ist, ist in Visual Basic der AND Operator! Dieser wird zuerst ausgewertet! Mathematik:
Visual Basic:
Man könnte das auch mit Klammern verdeutlichen:
So wird der Ausdruck ausgewertet.Wenn man Strings miteinander Vergleichen will, muss man den Vergleichswert in „“ setzen, falls es sich nicht um eine Variable handelt. Falls man nur ein Teil des Strings vergleichen will, so hat VB die Instr-Funktion bereit. Syntax:
Falls die Variable einen Teil des
Vergleichswerts enthält, so wird die Anweisung durchgeführt. Mit dem > 0
Vergleich wird ermittelt, an welcher Stelle der Variable der Vergleichswert
beginnt. Falls der Wert 0 ist, beginnt der Vergleichswert gar nie – der
Vergleichswert ist nicht in der Variable enthalten. In diesem Fall könnte man
den Vergleich > 0 aber auch weglassen, was man bei anderen Entscheidungen
auch machen könnte, so wäre es aber etwas unüberischtlich und hätte nur bei
diesem Beispiel einen Vorteil.Mehrere Befehle ausführen Wenn mehrere Befehle ausgeführt werden sollen, so muss man mitteilen, wann der Befehlsclock fertig sein soll. Dies tut man mit dem End If Befehl. die Syntax:
Es werden nun alle Befehle zwischen Then und End
If durchlaufen.Der Else Befehl Bisher wurden nur Aktionen ausgeführt, falls eine Bedingung zutrifft. Was passiert aber, wenn die Bedingung nicht zutrifft? – Mit dem Else Befehl kann der Sonst-Fall angegeben werden! Hier die Syntax:
Die Befehle zwischen Else und End if werden nur
dann durchgeführt, wenn die Bedingung nicht zutrifft!Entscheidungen könne beliebig verschachtelt werden. Dies kann z.B. so aussehen:
Wenn die Bedingung 1 zutrifft, so wird Bedingung
2 geprüft. Wenn Bedingung 2 zutrifft, wird Befehl 1 ausgeführt, ansonsten
Befehl 2. Das ganze analog, wenn die Bedingung 1 nicht zutrifft (beim
Else-Fall).Das Verschachteln von Bedingungen ist schneller ausgeführt als das Verknüpfen von Bedingungen mit OR oder AND Operatoren! Zudem ist es auch übersichtlicher. Der ElseIf Befehl Wenn man eine verschachtelte Bedingung hat, aber keine Befehle für den Else Fall vorgesehen hat, ist die ElseIf Schleife angebracht. Mit der ElseIf Schleife kann eine zweite Bedingung geprüft werden:
Für den ElseIf Fall muss natürlich auch eine
Bedingung angegeben werden! Man kann auch mehrere ElseIf Abfragen auf gleicher
Ebene hintereinander ausführen, dafür ist der „Select Case“ Befehl aber
sauberer (siehe weiter unten).Der GoTo Befehl Mit dem GoTo Befehl kann man jederzeit an eine beliebige Stelle einer Prozedur hüpfen. Das ganze sieht dann etwa so aus:
Die Befehle 1-3 werden ausgeführt. Der GoTo
Befehl teilt dem Programm mit, dass es nach oben hüpfen soll. Diese Schleife
wird unendlich mal durchlaufen.Der GoTo Befehl gilt als „unsauberer“ Programmierstil! Heutzutage verwendet man statt dem GoTo Befehl Funkionen und Subroutinen, die jederzeit aufgerufen werden können. Der Select Case Befehl Mit dem „Select Case“ Befehl kann eine Reihe von Fällen geprüft und die jeweiligen Befehle ausgeführt werden. Hier die Syntax:
Hier ein praktisches Beispiel dazu:
Zum Vergleich ist stets ein Is vor den
Vergleichsoperator und den Vergleichswert zu setzen. Bei Wertereichen ist das
nicht notwerndig.Optionsfelder und Kontrollkästchen Entscheidungen lassen sich besonders gut mit zwei Steuerelementen verbinden - mit dem Kontrollkästchen und dem Optionsfeld. Der Unterschied zwischen diesen beiden Steuerelementen ist folgender: In einem Formular/Rahmen kann immer nur eines von mehreren Optionsfeldern aktiv sein, jedoch können mehrere oder kein Kontrollkästchen aktiviert sein. Die wichtigste Eigenschaft dieser Steuerelemente ist „value“. Wenn ein Optionsfeld aktiviert ist hat es den Wert „true“, ein aktiviertes Kontrollkästchen hat jedoch den Wert „1“. Es ist jeweils die exakte binäre Logik, der Programmierer muss diesen Unterschied jedoch kennen! Programmierschleifen Allgemeines Eine Schleife ist eine Zusammenfassung von Befehlen, die eine bestimmet Anzahl nacheinander ausgeführt werden. Visual Basic kennt folgende Schleifen:
Eine kopfgesteuerte Schleife wird nicht durchlaufen, wenn die Bedingung nicht zutrifft – sie enhält die Durchlaufbedingung am Anfang! Die „For-Next“ Schleife ist kopfgesteuert! Unlogischerweise wird folgende Schleife einmal durchlaufen:
Eine fussgesteuerte Schleife wird mindestens einmal durchlaufen. Wenn am Ende die Abbruchbedingung zutrifft, so wird sie nicht mehr durchlaufen,
ansonsten wird sie wieder durchlaufen.Die „For-Next“ Schleife Hier muss ein Startwert, ein Endwert und manchmal auch ein Schrittwert eingegeben werden. Syntax:
Hier ein praktisches Beispiel:
Die Schleife wird für Werte von n = 1 bis 10 durchgeführt. Da keine Schrittgrösse angegeben wurde, ist diese 1. Falls X den Startwert 0 hat, so ist der Endwert 10 – Die Variable wird 10 mal durchlaufen. Falls man den Schrittwert „Step 0.5“ angeben würde, hätte X einen Endwert von 20!Achtung: Das Zählen in 0.1 Schritten ist sehr gefährlich, da der VB-Compiler bei float Zahlen eine gewisse Ungenauigkeit hat! Diese stört zwar nicht gross bei Berechnungen, für Schleifen sollte man aber immer Ganzzahlen oder den Currency-Datentyp verwenden! Die „Do-Loop“ Schleife Bei der Do-Loop Schleife gibt es keinen Schleifenzähler. Die Anzahl der Durchläufe werden in der Abbruchbedingung angegeben. Syntax:
Die Do-Loop Schleife wird solange durchlaufen, bis die Abbruchbedingung eintrifft. Bei while wird die Schleife solange durchlaufen, wie die Bedingung wahr ist. Bei until wird die Schleife solange durchlaufen, wie die Bedingung falsch ist.
Befehl 1 wird solange durchgeführt, bis n nicht mehr < 10 ist. Falls keine Abbruchbedingung steht, wird die Schleife unendlich oft durchlaufen. Man kann die Schleife jedoch auch in der Mitte verlassen.
Die Do Loop Schleife kann auch mit einer “Until-Bedingung” gesteuert werden!
„While“ und „until“ könne auch nach dem „loop“ Befehl aufgeführt werden – so macht man aus einer kopfgesteuerten- eine fussgesteuerte Schleife!Der Unterschied zwischen while und until ist folgender: Die while-Schleife wird solange durchlaufen, wie die Bedingung wahr ist. Die until-Schleife wird solange durchlaufen, wie die Bedingung falsch ist!
Schleifen verlassenFalls keine Abbruchbedingung angegeben wurde, läuft die Schleife unendlich durch. Man kann aber eine Schleife auch im inner mit einer Abbruchbedingung versehen. Dazu stehen folgende Befehle zur Verfügung:
Diese Befehle warden häufig mit einer “If-Abfrage” im innern einer Schleife aufgeführt:
Die Schleife wird verlassen, wenn n grösser als 10 ist.Listen- und Kombinationsfelder Allgemeines: Beide Steuerelemente haben die Eigenschaft, dass sie mehrere Texteinträge zur Verfügung stellen. Die Hauptunterschiede zwischen diesen beiden Steuerelementen sind folgende:
Einträge hinzufügenDer Index wird in Klammern nach der Eigenschaft aufgeführt. Neue Einträge bring man mit der „AddItem“ Methode in die Liste:
Das Abfüllen kann auch mit einer Schleife vereinfacht werden. In diesem Beispiel werden Werte von 1 bis 100 in die Liste eingefügt. Neue Einträge werden jeweils an das Ende der Liste gesetzt. Texteinträge kann man auch mit der „Sorted“ Eigenschaft der Liste sortieren lassen.
Man kann aber auch die Position in der Liste selber wählen:
Der Wert “Text” wird an Stelle 100 der Liste gespeichert.Einträge entfernen Einträge können mit der „RemoveItem“ Methode entfernt werden:
Hier wird der Eintrag an Stelle 24 der Liste entfernt. Man kann auch sämtliche Einträge auf einmal löschen, dazu gibt es die „Clear“ Methode.
Auswahl von EinträgenDie Zuweisung des selektierten Listeneintrages wird folgendermassen an eine Variable weitergegeben:
Das Aufführen der Liste vor dem Index ist hier nicht zu vergessen!Um zu erfahren, welche Einträge bei einer Mehrfachauswahl ausgewählt wurden, steht die „Selected“ Eigenschaft zur Verfügung. Mit folgender Schleife wird im Debugfenster angezeigt, welche Einträge ausgewählt sind:
Mehrfachauswahl von ListenDamit man mehrere Einträge aus einer Liste auswählen kann, muss die Eigenschaft „MultiSelect“ den Wert 1 haben. Wenn diese Eigenschaft den Wert 2 hat, so kann man mehrere Einträge mit gedrückter Mausttaste anwählen. Um zu erfahren, welche Einträge ausgewählt sind, genügt die „Selected“ Eigenschaft nicht mehr, da sie nur den Wert des zuletzt ausgewählten Eintrages zurückgibt. Hierzu muss man eine kleine Schleife programmieren. Die selektierten Einträge werden hier ins Debug-Fenster geschrieben.
Werte mit Steuerelementen eingebenAllgemeines Das Einstellen von Werten mit Steuerelementen hat einige Vorteile. So kann man bei einen Schiebebalken nur eine bestimmte Anzahl von Werten bestimmen. Eine Eingabeprüfung erübrigt sich also. Oft ist es auch benutzerfreundlicher, als wenn der Benutzer in ein Textfeld eintragen muss. Der Benutzer weiß zudem, was Maximal- und Minimalwert sind. VB hat 3 gute Steuerelemente auf Lager:
Mit einer Bildlaufleiste kann man einen Wert in einem bestimmten Bereich einstellen. Den aktuellen Wert kann man mit der „Value“ Eigenschaft abfragen.
Zu beachten:
Prozeduren Allgemeines In VB gibt es keinen Hauptteil, wie z.B. in C/C++. Alle Befehle befinden sich in VB in einer Prozedur oder einer Funktion. Syntax Die Syntax von Prozeduren ist:
DefinitionEine Prozedur kann man bequem unter „Extras > Prozedur hinzufügen“ definieren. Man kann jedoch einfach eine Prozedur ins Programmcodefenster eintragen. Prozeduraufruf Jede Prozedur hat ihren eigenen (eindeutigen) Namen. Um eine Prozedur aufzurufen, braucht man nur den Namen dieser Prozedur als Befehl hinzuschreiben. Man kann das auch mit dem Call Befehl tun, den man vor den Prozedurnamen stellt. Call Prozedurname Argumente Das hier ist eine kleine Prozedur, um die Caption-Eigenschaft eines Steuerelementes zu ändern:
Wenn man aber andere Steuerelemente auch
verändern will, so muss man Argumente einfügen. Argumente sind Werte, die beim
Aufruf einer Prozedur übergeben werden.
Um die Prozedur auszuführen, braucht man jedoch
noch einen Wert für das Argument Label. Dieses Argument bekommt seinen Wert
erst bei der Ausführung. Der Prozeduraufruf muss so aussehen:
Hier noch ein etwas komplexeres Beispiel:Der Prozedur „Ausrechnen“ werden 3 Argumente übergeben. X, Y und Ausgabe.
Nun kann die Prozedur Ausrechnen Z aus X und Y
berechnen und gibt sie an ein Textfeld aus. Dieses Textfeld wurde im Argument
„Ausgabe“ übergeben.
Optionale ArgumenteArgumente können auch Optional sein. Dafür muss man nur das Schlüsselwort „Optional“ vor jedes Argument stellen. Da es aber im inneren der Prozedur Probleme geben könnte, wenn ein Argument keinen Wert erhalten hat, sollte man besser einen Default-Wert setzen, falls ein optionales Argument keinen Wert hat. Dafür ist die „IsMissing“ Funktion zuständig:
Prozeduren mit einer variablen Anzahl von ArgumentenOft ist es nützlich, wenn die Anzahl der Argumente dynamisch ist. Dies ist z.B. bei einer Funktion nützlich, welche die Summe von x-Beliebig vielen Zahlen berechnet.
Nun kann man die Summe beliebig vieler Zahlen
berechnen.
Wert oder Referenz?Einer Prozedur kann man ein Argument als Wert oder als Referenz übergeben. Wenn man nichts angibt, wird der Wert als Referenz übergeben. Wenn eine Variable als Referenz übergeben wird, so wird der Prozedur nur die Speicherstelle mitgeteilt, wo sich die Variabel befindet. Falls sich diese Variabel verändert, sieht die Prozedur den neuen Wert. Wenn man das Argument jedoch als Wert übergibt, so wird die Variabel „kopiert“. Änderungen werden so nicht aktualisiert. Um zu kontrollieren, ob ein Argument als Wert oder Referenz übergeben wird, muss man ein Schlüsselwort voranstellen. ByVal vorangestellt bewirkt, dass das Argument als Wert übergeben wird. ByRef bewirkt, dass ein Argument als Referenz übergeben wird.
Der Gültigkeitsbereich von ProzedurenAn welchen Stellen des Programms können Prozeduren eigentlich aufgerufen werden? Wenn man nichts angibt, von überall aus. Wenn man aber eine Prozedur aus einem anderen Formular her aufrufen will, muss man den Formularnahmen vor den Prozedurnamen stellen.
Um eine private Prozedur zu programmieren, muss
man den „Private“ Befehl voranstellen. Bei einer Globalen Prozedur ist es der
„Public“ Befehl.
Eingebaute FunktionenAllgemeines Visual Basic bietet eine große Funktionsbibliothek. Enthalten sind: Stringfunktionen, Umwandlugsfunktionen, Datumsfunktionen und natürlich Mathematische Funktionen. Die Funktionen können in der Visual Basic Hilfe nachgeschlagen werden, oder man schaut in der MSDN-Library nachschauen. Mathematische Funktionen Der Rückgabewert von Mathematischen Funktionen hat immer den Datentyp Double. Daher sollte man auch diesen Datentyp für die Variabeln verwenden. Um kompliziertere Berechnungen durchzuführen, sollte man sich die Mathematik-Toolbox BNALib von www.tereatech.com herunterladen. Der Decimal-Datentyp bietet bis zu 25 Nachkommastellen. Er eignet sich also am besten für genaue Resultate. Um mit diesem Datentyp zu arbeiten, kann man aber keine Decimal-Variable deklarieren, man muss die Funktion CDec benutzen.
Mit VB6 wurde auch eine Rundungsfunktion
eingeführt. Diese heisst „Round“.
DatumsfunktionenDatum/Uhrzeit werden in VB im Datentyp „date“ abgespeichert. Dieser Geht vom 01.01.100 bis zum 31.12.9999. Das sollte für die VB-Ära wohl reichen. Um zu überprüfen, ob ein Ausdruck ein gültiges Datum ist, kann man die „IsDate“ Funktion anwenden.
Um herauszufinden, welcher Wochentag auf ein
Datum zutrifft, oder in welcher Woche ein Datum ist, kann man die DatePart
Funktion verwenden. Dieser Funktion müssen zwei Argumente übergeben werden. Das
erste Argument bestimmt, was herausgelesen werden soll (Anzahl Tage, Wochen, usw.).
Das zweite Argument ist das Datum.
Hier wird herausgelesen, an welcher Woche das
Datum sein wird (hier Woche 1).Manchmal will man auch herausfinden, wie viele Tage es noch dauert, bis man Geburtstag hat. Dieser Funktion muss man sogar 3 Argumente übergeben. Das erste Argument bestimmt, was herausgelesen werden soll (Anzahl Tage, Wochen, usw.). Das zweite Argument ist der Anfang der Periode , das dritte Argument das Ende der Periode.
Die Funktion berechner die Anzahl Tage, die
„Jetzt“ vom 01.01.2005 trennen.Zeichenkettenfunktionen Um eine bestimmte Anzahl von Zeichen aus einem String rauszukopieren, hat man mehrere Funktionen zur Verfügung. Beispielstring:
Wenn man das Wort „Auto“ heraustrennen will,
nimmt man am besten die „Left“ Funktion. Diese Funktion nimmt 2 Argumente
entgegen. Den Mustertext und die Anzahl der Zeichen, die herauskopiert werden
sollen.
Hier wird das Wort „Auto“ herauskopiert. Analog
zu diesem Beispiel, die Funktion Right. Diese hat den einzigen Unterschied,
dass die Anzahl der Zeichen am Ende des Strings rauskopiert werden.
Die Variable strTeil hätte nun den Wert: “rrad”.Um Zeichen aus der Mitte der Zeichenkette zu kopieren, eignet sich die „Mid“ Funktion am besten. Das erste Argument bleibt gleich, wie bei den vorherigen Beispielen. Das Zweite Argument steht für die Stelle, wo der String beginnt. Als drittes Argument gibt man die Anzahl der Zeichen an, die ausgelesen werden sollen.
Die Variable strTeil hat nun den Wert „Moto“
bekommen.Das ganze bringt natürlich wenig, wenn man den String nicht kennt. Wenn man den String nach einem bestimmten Wort absuchen will, muss man die „Instr“ Funktion verwenden. Die Funktion nimmt als erstes Argument den abzusuchenden String entgegen, das zweite Argument ist ein String, nachdem man suchen will. Es wird die Position des Anfangs dieses Strings zurückgegeben.
Die Variable intTeil bekommt hier den Wert als
Zahl, wo „Motorrad“ beginnt. Hier hätte intTeil den Wert 7.Wenn man ein bestimmtes Wort aus einem String heraustrennen will, aber nicht weiss, wo das Wort im String beginnt, muss man die Funktionen „Mid“ und „Instr“ verschachteln.
Die Variable bekommt hier den Wert „Motorrad“
zugewiesen.Das Null-Zeichen Angenommen, man kopiert einen String mit einer API Funktionen irgendwoher heraus, hat dieser ein Nullzeichen am Schluss. Mit so einem String kann man in VB nicht arbeiten. Um das Nullzeichen herauszutrennen, hat VB eine Konstante namens vbNullChar bereit. So trennt man das Nullzeichen heraus:
Dateierweiterung verändern
Die „Left“ Funktion mit der „Instr“ Funktion
verknüpft, liest den Dateinamen bis zum Punkt aus. Die neue Dateiendung wird
hinten angesetzt.Abfragefunktionen Mit Abfragefunktionen kann man Variablen schnell und einfach testen. Um zu überprüfen, ob eine Variable überhaupt einen Wert hat, gibt es die IsEmpty Funktion.
Um zu überprüfen, ob eine Variable einen
numerischen Wert hat, kann man die Funktion IsNumeric verwenden.
UmwandlungsfunktionenUm eine Variable zu einem anderen Datentyp umzuwandeln, kann man die „C[Datentypkürzel]“ Funktion verwenden.
Zm mit Hexadezimalen Werten zu arbeiten, muss
man nur ein & vor den Hexawert stellen.
ZufallszahlUm eine Zufallszahl zu erstellen, braucht man die Rnd-Funktion. Hier wird eine Zufallszahl von 1 bis 100 erstellt.
Der integer Variable wird eine Zufallszahl
zugewiesen. (Rnd * 100) bewirkt, dass 100 verschiedene Werte ausgegeben werden
können. Warum aber + 1? Ganz einfach, weil wir eine Zufallszahl zwischen 1 und
100 und nicht zwischen 0 und 99 haben wollen. Int muss vorangestellt werden,
wenn wir eine Ganzzahl haben wollen.Benutzeroberflächen Steuerelementfelder Wenn man ein Steuerelement mit Copy-Paste kopiert, erhält man eine Meldung; „Wollen sie ein Steuerelementfeld erstellen?“. In einem Steuerelementfeld haben alle Steuerelemente den gleichen Namen und die gleichen Eigenschaften (d.h. sie sind natürlich auch vom selben Typ). Da diese Steuerelemente aber den selben Namen haben, werden sie durch ihren „Index“ unterschieden. Angenommen, man kopiert ein Steuerelement „txtEingabe“ 9 mal, sind 10 Steuerelemente mit dem gleichen Namen auf dem Formular vorhanden. Wenn man jedem Steuerelement nun etwas zuweisen will, tut man das mithilfe des Index.
Hier wäre eine For-Schleife angebracht:
Wenn man sich nicht sicher ist, wo der Index der
Steuerelemente liegt, kann man mit den Eigenschaften „LBound“ und „UBound“ die
Grenzwerte feststellen.
Auch bei Ereignissen muss der Index angegeben
werden:
Mehrere Formulare benutzenKleinere Programme kann man bequem auf ein Formular bringen. Es wäre sogar kontraproduktiv, wenn man ein kleines Programm auf mehreren Formularen verteilen würde. Bei grösseren Projekten sind mehrere Formulare alleine schon wegen des Platzbedarfs erforderlich. Ein neues Formular wird über „Projekt > Formular hinzufügen“ hinzugefügt. Es gibt bereits ein paar Formularmuster zur Auswahl, z.B. ein Info-Formular. Falls man eigene Formulare öfters benutzt, sollte man sie im Ordner „\Template\Forms“ abspeichern. Wenn man das Projekt nun ausführt, wird aber nur das erste Formular angezeigt. Um ein weiteres Formular aufzurufen, gibt es die „Show“ Methode.
Um das Formular verschwinden zu lassen, gibt es
die „Hide“ Methode, die das Formular nicht schliesst, sondern nur Unsichtbar
macht. Wenn das Formular aber ganz geschlossen werden soll, brauch man den
Befehl „Unload Me“.
Modal – nicht modal
Auf Steuerelemente von anderen Formularen
zugreifenDer Zugriff auf Steuerelemente von anderen Formularen ist kein Problem. Man braucht nur den Namen des Formulars vor das Steuerelement zu stellen.
Der Zugriff auf Variabeln aus einem anderen
Formular, funktioniert nur, wenn es sich um öffentliche Variabeln handelt.
Wenn man ein anderes Formular anspricht, wird es
geladen, aber nicht angezeigt.Der With-Befehl Oft muss man einem Objekt viele Werte für Eigenschaften zuweisen. Damit man nicht jedes Mal das Objekt aufführen muss, gibt es den „with“ Befehl.
Es können nicht nur Eigenschaften, sondern auch
Methoden aufgeführt werden.MDI-Benutzeroberflächen Fast alle professionellen Programme sind eine MDI-Oberfläche. In einer solchen Oberfläche, gibt es ein übergeordnetes Formular, das keine Steuerelemente besitzen kann, bis auf Menü-, Status- und Symbolleiste. Alle anderen Formulare werden dann innerhalb des Hauptformulares angezeigt. Software wie „Microsoft Word“ und die anderen Office Komponenten funktionieren alle nach diesem MDI-Prinzip. In diesem Hauptfenster werden sogenannte „Kindfenster“ angezeigt. Diese kann man im inneren des Formulares bewegen. Wenn so ein Kindfenster maximiert wird, bleibt das Hauptfenster trotzdem noch zu sehen. Ein MDI Formular wird über „Projekt > MDI-Formular hinzufügen“ eingefügt. Nun kann man ein weiteres leeres Formular hinzufügen. Damit es als Kindfenster angezeigt wird, muss die Eigenschaft MDIChild True sein. Wichtig beim Hauptfenster ist auch die „AutoShowChildren“, welche die Kindfenster automatisch anzeigt. Menüleisten Ein MDI-Fenster kann keine Steuerelemente wie Buttons, Textfelder, Labels usw. enthalten. Um mit dem Programm arbeiten zu können, ist eine Menüleiste ideal. Visual Basic stellt einen Menüleisten-Editor zur Verfügung, mit diesem kann man solche Menüleisten erstellen, welche aus den Office Programmen bekannt sind. Den Menü-Editor startet man über „Extras à Menüeditor“ oder über das Symbol in der Symbolleiste. Die wichtigsten Eigenschaften im Überblick:
Eine Menüleiste kann nur auf ein „Click“ - Ereignis reagieren. Das Präfix für Menüeinträge lautet „mnu“. Die einzelnen Schichten der Menüleiste können per Pfeiltasten verschoben werden. Die erste Schicht stellt jeweils ein Untermenü dar (Datei | Bearbeiten | Ansicht | ...). Alle tieferen Ebenen werden in diesem Untermenü angezeigt. Man kann Menüs beliebig weit verschachteln, man sollte aber nur in jedem Untermenü noch ein Untermenü machen und nicht mehr. Ein Trennstrich kann man ganz einfach machen, indem man einem Menüeintrag die Caption-Eigenschaft „-“ gibt. Dialogfenster Oft sieht man bei Windows-Programmen dieselben Dialogfenster, womit man z.B. eine Datei speichern oder öffnen kann. Solche Dialogfenster müssen nicht programmiert werden, sie werden von VB zur Verfügung gestellt. Um diese Dialogfenster zu verwenden, muss man das Steuerelement „Microsoft Common Dialog Control 6.0“ von „Projekt > Komponenten“ hinzufügen. Das Steuerelement wird während der Programmausführung unsichtbar bleiben. Das Präfix lautet „dlg“. Hier ein Beispiel, wie eine Datei geladen werden kann: code> mnuBildLaden_Click Dim Dateiname as string dlgDateiOpen.ShowOpen Dateiname = dlgDateiOpen.filename End SubMit dieser Prozedur kann man den Dateinamen herauslesen. Angenommen, man will ein Bild auf einem neuen Formular betrachten, kann man z.B. so vorgehen:
Der Befehl “Set F = New frmBild” dupliziert das
Formular frmBild. Nun wird auf dem Steuerelement imgBild das Bild geladen.Symbolleiste Eine Symbolleiste ist ein ideales Steuerelement für Programmbefehle, die oft verwendet werden (Datei öffnen, Datei speichern...). Für die Symbolleiste werden Bilder verwendet. Diese Bilder können nicht direkt geladen werden, sie müssen aus einer Bildliste stammen, da die Bilder ansonsten nicht mit dem Programm mitgeliefert werden.
Eine Statusleiste ist nicht zwingend notwendig, sie rundet aber die Oberfläche ab. Um eine Statusleiste einzufügen, muss die Steuerelementsammlung Microsoft Common Controls 6.0 in der Toolbox liegen. Nun ordnet man die Statusleiste (StatusBar) irgendwo auf dem MDI-Fenster an (Präfix: „sta“). Nun können beliebig viele Felder eingefügt werden. Die einzelnen „Panels“ werden über ihren „Key“ angesprochen.
Man muss nicht alle Panels, die man braucht,
selber programmieren. Es gibt einige vorgefertigten Panels, die man im
„Benutzerdefiniert“-Fenster auswählen kann (Style-Eigenschaft).Der Zeitgeber Der Zeitgeber ist ein unscheinbares Steuerelement in der Werkzeugsammlung. Er hat nur ein Ereignis – „Timer“. Alle paar Millisekunden (interval-Eigenschaft) wird dieses Ereignis aufgerufen. Um die Uhrzeit anzeigen zu lassen, muss der Timer auf dem Formular angeordnet sein (er wird während der Laufzeit unsichtbar bleiben). Hier der Befehl, um die Uhrzeit auf einem label anzeigen zu können.
Je kleiner das Interval list, desto genauer
läuft die Uhr. Man kann zwar einen Intervall von 1 ms eingeben, der eingebaute PC-Timer
hat jedoch nur einen Intervall von 53 ms. Das sollte aber an Genauigkeit
reichen.Fehler auffangen In Visual Basic gibt es drei Arten von Fehlern: 1. Syntaxfehler Diese Fehler sind in VB absolut harmlos. Die Benutzerumgebung korrigiert diese automatisch, man kann gar keinen Fehlerhaften Code kompilieren à Syntaxfehler können nicht zum Benutzer gehen. 2. Laufzeitfehler Solche Fehler können in der Entwicklungsphase nicht auftreten. Sobald man das Programm startet, können diese auftreten (Deswegen: Testen). Der häufigste Laufzeitfehler ist wohl „Überlauf“. Ein Überlauf entsteht dann, wenn man eine zu große Zahl an eine zu kleine Variable zuweisen will. Diese Probleme kann man mit Eingabeprüfungen auffangen. „Typen Unverträglich“ kommt auch häufig vor. Dieser Laufzeitfehler entsteht, wenn man z.B. einen Buchstaben an eine Integer-Variable zuweisen will. Das Problem an den Laufzeitfehlern: Das Programm stürzt sofort ab! 3. Logische Fehler Ein Programm kann jahrelang korrekt laufen, bis eines Tages eine Verkettung von Situationen das Programm zu fehlerhaften Ausgaben bringt. Hier muss man ausgiebig testen und überprüfen. Laufzeitfehler abfangen Laufzeitfehler bringen das Programm zum Absturz und beenden es, ohne das der Benutzer seine Daten abspeichern kann. In VB gibt es jedoch sog. „Fehlerbehandlungsroutinen“, welche das Programm nicht zum Absturz bringen. Der „On-Error“ Befehl Es gibt drei Arten vom „On-Error“ Befehlen: 1. On Error Goto [Sprungmarke] 2. On Error Resume Next 3. On Error Goto 0 Die am meisten verwendete Variante des „On Error“ Befehls ist „On Error Goto [Sprungmarke]“. So kann eine Prozedur aussehen, in der ein Fehler abgefangen werden soll:
Err.Number Angenommen, der Benutzer gibt bei obigem Beispiel eine zu große Zahl ein. Nun kommt immer die gleiche Fehlermeldung, es sei ein Fehler aufgetreten. Der Benutzer weiss jedoch nicht, was er anders machen soll. Um Laufzeitfehler gezielt abfangen zu können, muss man beachten, welcher Laufzeitfehler aufgetreten ist. Dazu gibt es die die VB Konstante Err.Number. Am besten programmiert man eine „Select-Case“ Schleife die prüft, welcher Fehler aufgetreten ist. Hier muss man die Nummern der Laufzeitfehler kennen.
Diese Fehler treten am häufigsten auf. Hier die Erweiterung des obigen Programmes:
Nun wird der Benutzer gezielt auf seine
Falscheingabe hingewiesen.Fehlersuche Um logischen Fehlern vorzubeugen, muss man oft Sachen überprüft werden, wie z.B. Werte von Variabeln. Dazu eignet sich am besten das Debug-Fenster, unten zu finden. Um den Wert von Variable intZahl auszugeben, kann man so vorgehen:
Und schon sieht man unten im Debug Fenster die
Zahl. Debug-Anweisungen werden nicht kompiliert, sie müssen also weder
auskommentiert, noch gelöscht werden, bevor man eine .exe erstellt.Mit F8 kann das Programm im Einzelschrittmodus getestet werden. Bei jedem Druck auf F8 wird der nächste Befehl ausgeführt. Dateizugriff Warum auf Dateien zugreifen? Um Werte in einem Programm abspeichern zu können, verwendet man Variabeln. Wenn man aber Werte dauerhaft abspeichern will, reichen Variabeln nicht mehr aus. Sobald die Prozedur verlassen wird, verliert die Variabel ihren Wert (wenn sie nicht global ist). Ansonsten verliert sie ihren Wert spätestens dann, wenn das Programm beendet wird. Damit man Werte dauerhaft speichern kann (wie z.B. Optionen, wie ein Benutzer die Software für sich persönlich konfiguriert), muss man die Werte in Dateien abspeichern, wo man sie danach wieder herauslesen kann. Wie funktioniert der Zugriff? Der Dateizugriff läuft immer nach dem gleichen Schema ab:
Um mit Dateien arbeiten zu können, muss zuerst eine Verbindung zwischen VB und der Datei hergestellt werden. Hier muss man die Zugriffsnummer und den Zugriffsmodus angeben.
Hier wird die Datei “C:\textfile.txt” für den
Modus “Input” mit der Verbindungskennung 1 geöffnet. Diese Kennung ist
notwendig, da sonst das Betriebssystem nicht weiß, wo sich die Verbindung zur
Datei im Speicher befindet. Um Daten in eine Datei schreiben zu können, muss
„Output“ oder „Append“ verwendet werden. Mit „Append“ werden die Daten
angehängt.Wenn man eine Datei für „Output“ öffnen will und diese nicht existiert, kommt kein Laufzeitfehler! Die Datei wird erstellt. Das ist sehr praktisch, kann aber auch zu Problemen führen, wenn man mit den falschen Files arbeitet und es nicht merkt. Eine Übersicht über die Zugriffsmodi;
Man sollte die Zugriffsnummer nie manuell programmieren! Falls diese Zugriffsnummer schon besetzt ist, wird das Programm abstürzen. Die Funktion „FreeFile“ sucht eine freie Verbindungskennung aus und gibt die Kennung wieder frei, wenn die Verbindung nicht mehr verwendet wird.
Dateien werden jeweils mit dem „Close“-Befehl
geschlossen.Einlesen und Abspeichern von Daten Das Öffnen und Schließen der Datei ist nur ein Formalismus, der aber trotzdem nicht fehlen darf. Interessant wird es erst, wenn Werte eingelesen und abgespeichert werden können. Die wichtigsten Befehle:
Beispiele Sequentiell abspeichern
Sequentiell einlesenHier ist zu beachten, dass man den „Umweg“ über eine Variable nehmen muss
Portionenweises Einlesen von TextOft will man nicht den gesamten Inhalt einer Datei einlesen, sondern nur ein paar Bits. Mit der „Input“ Funktion kann man eine bestimmte Anzahl von „Bits“ einlesen, mit der „Line Input“ Funktion jeweils ganze Zeilen. Die Input Funktion Der Input Funktion müssen zwei Werte übergeben werden. Die Zugriffsnummer und die Anzahl der zu lesenden Zeichen. Um die Größe der geöffneten Datei zu erfahren, kann man mit der Funktion „Lof“ die Anzahl der Bytes herauslesen. Eine Übersicht der Funktionen, die mit der Länge von Dateien zu tun haben:
Zahlen speichert man grundsätzlich mit dem „Write“ Befehl, da dieser zwischen Datentypen unterscheiden kann. Bei Zahlen muss man jedoch den Umweg über eine Zahlenvariable nehmen, da aus einem Textfeld nur ein String kopiert werden kann. Wenn man eine Datei mit „Print“ beschrieben hat, wird nach jedem Element ein Zeilenumbruch gemacht. Um diese Datei Zeile für Zeile auszulesen, nimmt man den „Line Input“ Befehl.
Die Datei wird Zeilenweise eingelesen, solange der Zeiger noch nicht am Ende angekommen ist (while Schleife). Umgang mit Zahlen Get und Put Binäre Dateien liest man mit dem “Get” Befehl aus und beschreibt sie mit dem “Put” Befehl. Zur Erläuterung der Befehle ein Beispiel. Es werden drei Zahlen in eine Datei geschrieben:
Das Programm initialisiert drei Variabeln von verschiedenen Zahlendatentypen. Danach wird die Datei wie immer geöffnet. Der „Put“ Befehl speichert dann die Werte in die Datei. Am Schluss wird die Datei wie immer geschlossen.Das Herauslesen mit Get funktioniert exakt gleich, nur dass man den Befehl Get an die Stelle von Put schreibt. Umgang mit Dateien In Visual Basic kann man nicht nur Informationen aus Daten rausholen oder in Dateien speichern, sondern auch Dateien und Ordner erstellen, löschen und verschieben. Die wichtigsten Befehle im Überblick:
Um noch mehr Befehle verwenden zu können, muss man API Funktionen aus SHELL32.DLL benutzen. Dialogfelder VB stellt vieles zur Verfügung, darunter sind auch Dialogfelder. Um mit den Dialogfeldern arbeiten zu können, muss man unter „Projekt >> Komponenten“ das Steuerelement „Microsoft Windows Common Dialog Control 6.0“ miteinbeziehen. Das Steuerelement kann nun an einem beliebigen Ort auf dem Formular angeordnet werden (Präfix: cdl). Die wichtigsten Methoden des Steuerelementes im Überblick:
Wenn man das Steuerelement mit der rechten Maustaste anklickt, und unter Eigenschaften geht, kann man viele Einstellungen verändern. Das ganze ist natürlich auch während der Laufzeit möglich. Ein Beispiel für ein Dialogfeld, um Dateien zu öffnen.
Erklärungen:
Um die Datei zu öffnen, muss man je nach Datentyp andere Befehle verwenden. Das Dialogfeld sieht in diesem Beispiel so aus:![]() Grafiken Allgemeines VB bietet nur ein paar wenige Methoden für Grafiken. Es besteht aber auch die Möglichkeit, Grafiken mit DirectX oder OpenGL darzustellen. Letzteres zu erlernen lohnt sich nur für Grafikprofis. Mit den wenigen Steuerelementen kann man auch nur auf dem Formular, dem Bildfeld und auf den Drucker zeichnen. Wenn man Grafiken auf andere Steuerelemente ausgeben will, muss man API Funktionen aufrufen. Die Grafikmethoden im Überblick
Ausgabe Die Ausgabe findet entweder auf dem Formular, im Bildfeld oder auf den Drucker statt. Als Koordinaten kann man alles von (0, 0) bis (Breite, Höhe) angeben. Was passiert aber, wenn man das Steuerelement in der Grösse verändert? Man muss den Programmcode ändern. Um das zu vermeiden, sollte man ein eigenes Koordinatensystem für jedes Steuerelement machen. Das kann man ganz einfach mit der Scale Methode machen. Hier die Syntax für die Einteilung eines Bildfeldes in 100x100 Punkte: picBildfeld.Scale (0, 0) – (100, 100)
Statt den Absoluten Koordinaten kann man auch relative Koordinaten und den relativen Unterschied (Step X, Step Y) statt (X, Y) angeben.
Die aktuelle Position findet man den Eigenschaften „CurrentX“ und „CurrentY“ heraus. Ausgaben formatieren
Farben In Windows, somit auch in VB, werden Farben mit dem RGB (Red, Green, Blue) Wert dargestellt. Jede Grundfarbe kann hier einen Wert zwischen 0 und 255 annehmen, d.h. es gibt dreimal 255 Möglichkeiten >> man kann 255^2 Farben darstellen. Farben werden in VB als long gespeichert. Um mit Hexa-Farbwerten arbeiten zu können, muss man vor die Hex-Zahl &H voranstellen, damit sie als Hex-Wert erkannt wird. Um eine Farbe direkt an ein Steuerelement zuzuweisen, kann man die RGB Funktion benutzen.
Wenn einem 16 Farben genügen, kann man den QBColor-Befehl nutzen.
Für diese 16 Farben gibt es auch Konstanten, z.B. vbRed für Rot, vbBlack für schwarz usw.Bilder anzeigen Fast jedes Steuerelement hat eine „Picture“ Eigenschaft. Ein Bild kann man also auf den meisten Steuerelementen so anzeigen lassen:
Um Bilder abspeichern zu können, kann man den “SavePicture” benutzen. Nun ist es bereits möglich, ein einfaches Zeichenprogramm zu programmieren. Man muss nur die PSet Methode mit dem MouseMove Ereignis verknüpfen.Das Abspeichern von Bildern (bzw. Bildfeldern) ist auch nicht besonders schwer.
Wenn man aber ein Bild an einer bestimmten Position anzeigen lassen will, funktioniert der obere Befehl nicht mehr, da er die Bilder links oben platziert. Dazu stellt VB die PaintPicture Methode zur Verfügung. Das komische an dieser Methode ist, dass sie keine Bilder laden kann, sondern dass man die Picture Eigenschaft von anderen Objekten übernehmen muss. Die Argumente in den Eckklammern sind optional.
Argumente im Überblick
Ausgabe auf Drucker Das Drucken in VB wird über das Printer-Objekt gesteuert. Mit dem Printer Objekt kann man nicht nur ausdrucken, man kann auch erfahren wie viele und welche Drucker man installiert hat. Wichtig: Alles was mit Druckern zu tun hat, wird über die Printers Klasse angesprochen, Ausdrucke erfolgen durch das Printer Objekt der Klasse Printers. Dazu ein Beispiel:
Hier wird eine Liste mit allen verfügbaren und installierten Druckernamen gefüllt.Die Ausgabe von Text auf den Drucker ist nicht sehr sensationell, dafür einfach. Folgende Anweisung gibt einen String auf den Drucker aus. Mit der darauf folgenden Anweisung wird dem Drucker mitgeteilt, dass der Drucker hier nun aufhören soll.
Die Z-AchseDie Z-Achse dient (leider) nicht dazu, 3 dimensionale Grafiken auszugeben, sie gibt nur an, ob sich ein Objekt im Vordergrund oder im Hintergrund befindet. Hier gibt es nur zwei Zustände – 1 und 0.
Beim Wert 1 wird das Objekt in den Vordergrund gebracht, beim Wert 0 in den Hintergrund.Bildschirmauflösung feststellen Die Bildschirmauflösung bekommt man in VB, wenn man die Widht Eigenschaft des Screen Objektes durch die TwipsPerPixelX Eigenschafts des gleichen Objektes dividiert. Das kann z.B. so aussehen:
Zur Verdeutlichung das Ergebnis bei einer 1024x768 Auflösung.![]() Auto Redraw? Die Auto Redraw Eigenschaft einer Ausgabefläche gibt an, ob der Inhalt in den Arbeitsspeicher geladen werden soll (true) oder nicht (false). Bei false wird das Bildfeld geleert, wenn man es mit einem anderen Objekt überdeckt. API-Funktionen Allgemeines In Visual Basic hat man recht viele Funktionen zur Verfügung. Was macht man aber, wenn man z.B. erfahren will, wie viel Arbeitsspeicher ein PC hat? Dazu gibt es keine VB Funktionen. Um solche Informationen herauslesen zu können, muss man fest eingebaute Windows Funktionen (sog. API Funktionen) aufrufen. Ein Vorteil von VB gegenüber C/C++ ist, dass man relativ wenige API Funktionen benötigt, da man viele Module einfach verwenden kann (z.B. Standarddialogfelder, welche man in C/C++ durch API Befehle aufrufen muss). API Funktionen werden jeweils in .dll Dateien gespeichert. Es gibt auch „gefährliche“ API Funktionen, mit denen man z.B. Laufwerke formatieren, die Registry verwenden oder andere Systemnahe Dinge verändern kann >> Man sollte nur die Funktionen aufrufen, die man kennt. Um zu erfahren, was die einzelnen API Funktionen tun, muss man sich spezielle Bücher besorgen oder in einem API-Viewer nachschauen. Der Aufruf von API Funktionen Um API Funktionen verwenden zu können, muss man das dem Compiler mit einem „Declare“ Befehl angeben. Dieser Declare Befehl teilt VB vier wichtige Dinge mit:
Die Syntax für eine Funktion erfordert zusätzlich den Datentyp des Rückgabewertes:
Der Aliasname ist nichts weiteres als der wahre Name einer Funktion. Man weisst einen Aliasnamen zu, wenn der Originalname zu lang und schlecht merkbar ist oder wenn man einen Namenskonflikt vermeiden möchte.Der API Viewer Damit man sich die Informationen für API Deklarationen nicht zusammensuchen muss, sollte man einen sog. API Viewer benutzen. So ein Programm stellt alle nötigen Informationen zur Verfügung. Zu empfehlen ist ganz besonders der „API-Guide“ von http://www.allapi.net. Auf die Registry zugreifen Bevor man mit Programmen auf die Registry zugreift, sollte man unbedingt ein Registry Backup machen! Die Registry dient nicht dazu, grosse Datenmengen aufzunehmen. Mithilfe dieser Datenbank kann man Einstellungen und Konfigurationen abspeichern, welche wenig Platz benötigen. Visual Basic hat bereits zwei Registry Befehle, diese speichern die Schlüssel jeweils immer in den gleichen Unterordner. Um weitgehende Einstellungen an Windows oder an Programmen vorzunehmen, muss man auf die entsprechende .dll zugreifen. Eine Übersicht über die wichtigsten Registry Funktionen:
Die Deklarationen können im API-Guide nachgeschaut werden. Der API Guide von http://www.allapi.net sollte für die Verwendung von API Funktionen ausreichen, weitere Beispiele und Erläuterungen werde ich unterlassen. Klassen Hier geht es um objektorientierte Programmierung. Ein Objekt ist bekanntlich alles, was Methoden und/oder Eigenschaften besitzt. Eine Methode ist eine Funktion, welche nur für das aktuelle Objekt gültig ist. Eigenschaften gehören jedem einzelnen Objekt, auch wenn es Objekte gibt, die sich Eigenschaften teilen (z.B. haben Command-Buttons und Labels beide die Caption-Eigenschaft...). Objekte können auch Ereignisse besitzen. Das macht vor allem bei Steuerelementen Sinn. Objekte können z.B. Steuerelemente sein, aber auch Objekte wie z.B. das „Debug“ oder das „Printers“ Objekt. Solche Objekte (hier geht es nicht um Steuerelemente) lassen sich mit Klassen nachbilden. Diese Objekte dienen wiederum dazu, die Wirklichkeit nachzustellen. Eine Klasse ist der Typ eines Objekts, ein Objekt ist ein Element einer Klasse. Klassen hinzufügen Eine Klasse kann durch den Menübefehl „Projekt >> Klassenmodul hinzufügen“ hinzugefügt werden. ![]() Diese Klasse ist am Anfang noch leer. Nun geht es darum, für die neue Klasse Eigenschaften, Methoden und Ereignisse zu definieren. Das Prinzip der Klassen ist relativ einfach zu verstehen, aber eher schwer zu erlernen und umzusetzen. Eigenschaften hinzufügen Damit man bei einem Objekt mit Eigenschaften arbeiten kann, müssen diese mit den Befehlen „Property Let“ (für Einlesen der Eigenschaft) und „Property Get“ (zum Auslesen der Eigenschaft) definiert werden. Eigenschaften müssen in einer Klasse intern in einer Variabel abgespeichert werden. Hier ein Beispiel dazu.
Erläuterung:
Erläuterung:
Das Hinzufügen von Methoden gestaltet sich nicht schwieriger als die Definition von Funktionen. Der Funktionsaufruf erfolgt nun genau gleich wie eine „herkömmliche“ Methode. Zur Veranschaulichung wieder ein Beispiel:
Auf den ersten zwei Zeilen erfolgt wie immer die Definition des neuen Objekts. Auf der Zeile 3 wird eine Variable deklariert, welche dann die Eingabe aus einer InputBox entgegennimmt. Auf Zeile 6 wird nun die Methode Bellen aufgerufen:
Um mit Klassen arbeiten zu können, sollte man also Prozeduren gut beherrschen!Ereignisse hinzufügen Die Definition eines Ereignisses ist relativ einfach. Man braucht nur das Schlüsselwort Event mit dem Ereignisnamen und der Parameterliste aufzuführen.
Dieses Ereignis tritt nicht einfach so aus heiterem Himmel ein, es muss in einer weiteren Ereignisprozedur aufgeführt werden, da ein imaginärer Hund nicht von selber einschlafen kann. Nehmen wir mal an, man kann auf eine Schaltfläche klicken und er Hund schläft ein.
Das Problem hier ist noch, dass man nicht direkt auf das Ereignis zugreifen kann, sondern dass man mit einer weiteren Methode zu der Klasse verzweigen muss.
Das eigentliche Ereignis tritt erst durch den „RaiseEvent“ Befehl ein. >> Der Umgang mit Ereignissen ist bei eigenen Klassenmodulen nicht immer empfehlenswert, da man nicht direkt auf natürliche Ereignisse reagieren kann, wie z.B. einen Mausklick. Man muss vielmehr auf eine Methode verzweigen, mit welcher man das Problem eben so gut direkt lösen könnte.Wer mit Klassen arbeiten will, muss viel üben und probieren. Die Programmierung mit Klassen unterscheidet sich bis auf wenige Befehle nicht von der normalen VB Programmierung. Damit man Ereignisse effektiv einsetzen kann, sollte man gleich eigene ActiveX Steuerelemente programmieren, da Klassen nicht auf natürliche Ereignisse reagieren können. Zugriff auf Datenbanken Wer mit Datenbanken arbeiten will, sollte sich als erstes mit Datenbankstrukturen (vor allem mit dem Relationalen Datenbanksystem) auseinandersetzen. Da der Datenbankzugriff in Visual Basic nur mit Steuerelementen nicht reicht um auf relationale Datenbanken zuzugreifen, sollte man auf SQL (Structured Query Language) zurückgreifen. Das SQL Datenbanksystem ist führend, da es schnell, stabil und unter anderem auch Freeware ist (mySQL,...). Es gibt jedoch auch kostenpflichtige Systeme, wie der SQL Server von Microsoft. Ausserdem muss man mit SQL nicht unbedingt auf eine SQL Datenbank zurückgreifen, man kann auch Abfragen an Access Datenbanken senden. Um eine Verbindung mit einer Access Datenbank realisieren zu können, kann man wie folgt vorgehen.
|
Autoren:04150
Artikel:00819 Glossar:04124 News:13569 Userbeiträge:16268 Queueeinträge:05150
Projektsteuerung statt Anwesenheitskontrolle
MONDroid - your monitoring Solution for Android with PRTG-Support Red-Hosting jetzt mit erweitertem Shop-Webhosting-Angebot [Mehr News]
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
|