| So, nun können wir mit dem eigentlichen Zeichnen anfangen. Erstellen Sie dazu bitte die Ereignisprozedur "LOS_CLICK" und geben Sie folgende Zeilen ein: Private Sub LOS_CLICK()
Bild.PSet (10, 10), 0
End Sub Starten Sie nun das Programm und klicken Sie auf "Los". Auf dem Bildfeld erscheint nun ein schwarzer Punkt. Damit haben Sie schon den ersten Grafikbefehl: <Objekt>.PSet (X,Y)[,Farbe] PSet ist eigentlich kein richtiger Befehl, vielmehr handelt es sich um eine Methode des Bildfeldes. PSet erwartet als Parameter mindestens ein Koordinatenpaar, das in Klammern steht. Bild.PSet (10,50) gibt also einen Punkten an der X-Koordinate 10 und Y-Koordinate 50 aus. Um die Farbe des Punktes zu beeinflussen gibt es zwei Möglichkeiten: 1. Sie können einfach die Vordergrundfarbe des Bildfeldes ändern. 2. Sie können eine Farbe als Parameter angeben . Die erste Möglichkeit ist klar und wird daher nicht weiter beschrieben. Wenn Sie jedoch eine Farbe als Parameter angeben, z.B. Bild.PSet (10,10),15, so werden Sie bald merken, daß die meisten Pixel Schwarz sind. Woher kommt das? Nun, unter DOS wurde fast immer mit einer einheitlichen Palette gearbeitet. Man brauchte nur die Nummer der Farbe anzugeben. Zum Beispiel 1 für Blau, 2 für Grün usw. Unter Windows gibt es jedoch eine Große Zahl an verschiedenen Grafikmodi und Grafikkarten. Die Auswahl reicht von Schwarz/Weiß bis zu 32 Bit TrueColor. Darum gibt es unter Windows ein anderes "Farbformat". Die Nummer setzt sich aus dem Rot-, Blau- und Grünanteil der Farbe zusammen. In diesem Kurs will ich Ihnen jedoch eine Umrechnungsformel ersparen. Wir werden nur mit den Funktionen von VisualBASIC arbeiten, um zu vernünftigen Farben zu kommen. QBColor(Farbe) QBColor liefert den Farbwert, der einer EGA-Farbe entspricht. QBColor(1) liefert zum Beispiel den Wert für ein dunkles Blau, QBColor(15) den Wert für ein helles Weiß. Diese Funktion wird oft benutzt, um Zeichenroutinen von QBasic, QuickBasic und VisualBASIC für DOS nach Windows zu übersetzen. | Farbnummer | Farbe | | 0 | Schwarz | | 1 | Dunkles Blau | | 2 | Dunkles Grün | | 3 | Dunkles Cyan | | 4 | Dunkles Rot | | 5 | Dunkles Lila | | 6 | Dunkles Gelb | | 7 | Dunkles Weiß / Grau | | 8 | Dunkles Grau | | 9 | Helles Blau | | 10 | Helles Grün | | 11 | Helles Cyan | | 12 | Helles Rot | | 13 | Helles Lila | | 14 | Helles Gelb | | 15 | Helles Weiß | RGB(Rot, Grün, Blau) RGB mischt eine Farbe aus den angegebenen Farbanteilen zusammen. Die Anteile werden jeweils mit 0-255 angegeben. 0 bedeutet, die Farbe wird nicht beim Mischen benutzt. 255 bedeutet, die Farbe wird beim Mischen benutzt. Sie wissen nicht, wie man Farben aus Rot, Grün und Blau mischt? Na dann, hier eine kurze Einführung: Rot + Grün = Gelb Rot + Blau = Lila Grün + Blau = Türkis (Cyan) Rot + Grün + Blau = Grau/Weiß Je nachdem, wie Groß der Anteil jeder Farbe ist erhalten Sie eine andere, neue Farbe. Wenn Sie sich damit nicht auskennen sollten Sie einfach einmal experimentieren. Nachdem Sie nun die beiden Funktionen zum Erstellen von Farbwerten kennengelernt haben, können Sie auch unseren Punkt z.B. Rot färben: Private Sub LOS_CLICK()
Bild.PSet (10, 10), QBColor(4)
End Sub Ein einzelner Punkt ist natürlich noch nicht besonders viel, aber diese Pixel sind die Grundlage für die komplexesten Grafiken. Allerdings werde ich hier nicht erklären, wie Sie zum Beispiel eine Ausgleichskurve oder sonstiges "selbst" zeichnen. Dazu wird es evtl. einen speziellen Kurs geben. Wir wollen uns nun die anderen Grafikbefehle ansehen, die VisualBASIC mitliefert: <Objekt>.Line (x1, y1)-(x2,y2) [,Farbe[,B[F]]] Wir setzen eine Linie auf das Bildfeld, indem wir die Line-Methode benutzen. Line erwartet normalerweise zwei Koordinatenpaare, die durch einen Bindestrich getrennt sind. Dahinter können Sie noch eine Farbe angeben. Als letzten Parameter können Sie B oder BF anhängen. B bedeutet, daß statt einer Linie von x1,y1 nach x2,y2 ein Rechteck zwischen den Koordinaten gezeichnet wird. Und BF bedeutet, daß eine gefüllte Box gezeichnet wird. Private Sub LOS_CLICK()
Bild.Line (10, 10)-(100, 80), QBColor(9), BF
Bild.Line (10, 10)-(100, 80), QBColor(0), B
Bild.Line (10, 10)-(100, 80), QBColor(14)
End Sub In dem oberen Beispiel wird erst eine gefüllte hellblaue Box zwischen den Koordinaten 10,10 und 100,80 gezeichnet. Anschließend wird zwischen den selben Koordinaten ein schwarzes Rechteck gezeichnet und zum Schluß wird eine gelbe Linie gezeichnet. Und nun kommen wir zu einem sehr einfachen und gleichzeitig doch sehr komplexen Objekt: Dem Kreis <Objekt>.Circle(x, y),Radius[,Farbe[,Start[,Ende [,Verhältnis]]]] Allein schon die Anzahl der möglichen Parameter zeigt, daß der Kreis sehr vielfältig zum Einsatz kommen kann. Fangen wir aber erst einmal einfach an. Die Circle-Methode verlangt mindestens ein Koordinatenpaar und den Radius des Kreises. Die Anweisung Bild.Circle (50,50),40 würde zum Beispiel einen Kreis mit dem Radius 40 um den Punkt 50/50 zeichnen. Als weiteren Parameter kann man die Farbe angeben. Hierbei gelten die gleichen Regeln wie bei der Linie und dem Punkt. Anschließend können Sie einen Startwinkel und einen Endwinkel angeben. Der Startwinkel gibt an, ab welchem Winkel der Kreis gezeichnet wird und Endwinkel gibt an, bis zu welchem Winkel der Kreis gezeichnet wird. Damit kann man zum Beispiel ein Kreisstück zeichnen lassen. Der Winkel wird dabei in Bogenmaß angegeben, variiert also zwischen 0 und 2pi. Auch hierzu eine Grafik: Die Anweisung Bild.Circle (50,50), 40, QBColor(1), 0, 3.1415/2 gibt in etwa den nebenstehenden Kreis aus. Der Startwinkel liegt bei 0 Grad und der Endwinkel bei 90 Grad, was ½ pi entspricht. Denken Sie daran, die Winkel müssen in Bogenmaß angegeben werden. Sie können von Grad eben in Bogenmaß mit der Formel Bogenmaß = Grad * 3.1415 / 180 umrechnen. Der letzte Parameter, den Sie an die Kreisanweisung anhängen können gibt das Verhältnis zwischen Höhe und Breite des Kreises an: Verhältnis = Höhe / Breite Soll der Kreis zum Beispiel doppelt so hoch wie breit sein, so tragen Sie hier 2/1 also 2 eintragen. Soll der Kreis hingegen doppelt so breit wie hoch sein, einfach 0.5 oder 1/2 eintragen. Der Kreis ist nun eine Elipse. <Objekt>.Cls Diese Methode bedarf wohl keiner großen Vorstellung mehr, oder etwa doch? CLS leert das Bildfeld. Ein Bild, das mit Hilfe der Picture-Eigenschaft angezeigt wurde bleibt aber erhalten! Eine andere Möglichkeit, das ganze Bild zu "leeren" ist, eine weiße gefüllte Box zu zeichnen: <Objekt>.Line (0,0)-(<Objekt>.ScaleWidth, <Objekt>.Scaleheight), _
QBColor(15),BF |