GDI-Aufruf

Deklaration und Aufruf | Beispiel 1: BitBlitter | Beipiel 2: FloodFill

Schnelle Grafikroutinen des GDI (Graphics Device Interface) von Windows sind ohne größeren Aufwand in VB aufrufbar. Diese Routinen befinden sich in Bibliotheksdateien (Kennung .dll), die zu Windows gehören. Bevor sie genutzt werden können, müssen sie in dem VB-Programm deklariert werden. Dabei leistet die Entwicklungsumgebung Unterstützung.

Deklaration und Aufruf

zum Anfang

Beispiel 1: BitBlitter

Zur Windows-Funktion " BitBlt " (BitBlitter - Verschiebung von Bildbereichen) wird die folgende Deklaration kopiert und eingefügt:
 

Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Das Schlüsselwort ByVal bedeutet, daß jeweils nur die Zahlenwerte, nicht die Variablenadressen übergeben werden. Es bedeuten die Konstanten in der Reihenfolge des Aufrufes: Windows-Handle des Zielbereiches, x- und y-Koordinate, Breite und Höhe des Zielbereiches, Windows-Handle des Quellbereiches, x- und y-Koordinate des Quellbereiches, Verknüpfungskonstante (Davon gibt es 255, nur wenige sind sinnvoll. VB kennt etwa 10. Am häufigsten dürfte "vbSrcCopy" verwendet werden, welche die einfache Kopie des Ursprungsbereiches auf den neuen bedeutet.
Windows-Handles sind Objektnummern, die von Windows selbst vergeben und verwaltet werden und hier nur mit ihrer Bezeichnung auftauchen. Alle Variablen sind vom Typ Long und müssen für den Aufruf entsprechend bereitgestellt werden. Als Koordinateneinheit setzt Windows immer Pixel voraus, die deshalb entsprechend bestimmt werden müssen. Bequemer ist es, Windows-Routinen gleich im Grafikmodus 3 ( = vbPixels) einzubinden.
Der Aufruf einer in Picture1 von x1, y1 nach x2, y2 zu verschiebenden Bildfläche der Breite dx und der Höhe dy lautet:

BitBlt Picture1.hdc, x2, x2, dx, dy, Picture1.hdc, x1, y1, vbSrcCopy
zum Anfang

Beipiel 2: FloodFill

Die farbige Füllung von Bildbereichen gelingt mit offiziellen VB-Befehlen nur dann, wenn der Bildbereich durch einen Line- oder Circle-Befehl gemalt wird oder aus einem Shape besteht. Damit sind nur wenige geometrische Flächen füllbar (z.B. keine Dreiecke). Hier hilft FloodFill. Deklaration erfolgt im Modul wie beschrieben:

Declare Function FloodFill Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long

Der Aufruf erfolgt wie meist mit dem "handle", der von Windows verwalteten Nummer des Steuerelements, das betroffen ist. Diese steht in der Variablen SteuerelementName.hdc stets zur Verfügung. Dann folgen die Koordinaten eines beliebigen Pixels im Inneren der zu füllenden Fläche. Hierzu vergleiche man das vorige Beispiel, der letzte Parameter verlangt die Farbe der Flächenberandung, an der der Füllvorgang enden soll. Gefüllt wird mit FillColor und in der Art, die FillStyle (8 Möglichkeiten) festlegen.
Aufrufbeispiel: Glatte Füllung einer schwarz berandeten Fläche, die sich auf Picture1 befindet und die Pixelkoordinaten X, Y enthält, mit hellem Rot:

Picture1.FillColor = QBColor(12)
Picture1.FillStyle = 0
Call FloodFill(Form1.Picture1.hdc, X, Y, QBColor(0))
zum Anfang

© R. Hirte * 2001/2004