Canvas - Die Zeichenfläche

In einigen Fällen kann es durchaus nützlich sein, sich Daten visuell aufbereitet ausgeben zu lassen. Bisher war dies nur über mehr oder minder große Umwege (Datenexport -> einlesen in ein entsprechendes Programm, z.B. MS Excel -> erstellen eines Diagramms) möglich. Mit der Canvas enthält die Toolbox 3.0 einige Funktionen, die es Ihnen erlauben, einfache Grafiken zur Laufzeit dynamisch zu erzeugen.

Abb. 1 / siehe Beispiel zu Canvas-Funktionen

 

Die Zeichenfläche stellt Ihnen folgende Funktionen zur Verfügung. Diese befinden sich in der TDBCANV.DLL

Name Parameter Rückgabewert Funktion
CanvasShow iW : INTEGER

iH : INTEGER

cCaption : STRING

keiner Öffnet die Zeichenfläche mit der in iW und iH übergebenen Breite (=Width) und Höhe (=Height) in Pixeln.

Die Titelleiste des Zeichenfensters enthält den in cCaption übergebenen Text als Überschrift.

Zur Bestimmung der richtigen Fenstergröße dienen die Funktionen ScreenHeight und -Width (siehe weiter unten).

CanvasShow(800,600, "Meine erste Canvas mit VDP")

CanvasHide keiner keiner Schließt das Zeichenfenster und gibt die belegten Ressourcen wieder frei (nicht Freeze!)
CanvasLine x1 : INTEGER

y1 : INTEGER

x2 : INTEGER

y2 : INTEGER

keiner Zeichnet eine Linie zwischen den beiden Koordinatenpaaren (x1,y1) und (x2,y2). Die Koordinaten werden in Pixeln gerechnet.

CanvasLine(20,20, 150,100);

CanvasLineSize x : INTEGER keiner Setzt die Linienstärke auf x Pixel.
CanvasLineColor r : INTEGER

g : INTEGER

b : INTEGER

keiner Legt die Farbe fest, die beim Zeichnen der nächsten Linie verwendet werden soll. r, g und b müssen jeweils zwischen 0 und 255 liegen. Die Farbe definiert sich aus dem entsprechenden RGB-Wert (z.B.: "0,0,0" ; "255,0,0")

CanvasLineColor(0,0,0)

CanvasBGColor r : INTEGER

g : INTEGER

b : INTEGER

keiner Legt die Hintergrundfarbe fest. Die Parameter stellen den Farb-RGB-Wert dar. (siehe CanvasLineColor)

Vorsicht: Bei Aufruf von CanvasBGColor wird die gesamte Zeichenfläche überschrieben

CanvasBGColor(255,255,255)

CanvasFont cName : STRING

iSize : INTEGER

keiner Wählt die in cName und iSize übergebene Schriftart und -größe aus. Alle darauffolgenden Textausgaben mit CanvasText werden entsprechend dargestellt.

CanvasFont("Arial", 12)

CanvasText x : INTEGER

y : INTEGER

cText : INTEGER

keiner Gibt an der mit (x,y) in Pixeln übergebenen Stelle den in cText gespeicherten Text aus.

CanvasText(120,10, "VDP kann malen!")

CanvasTextColor r : INTEGER

g : INTEGER

b : INTEGER

keiner Legt die Textfarbe im RGB-Format fest.

CanvasTextColor(64,128,128);

CanvasDot x : INTEGER

y : INTEGER

keiner CanvasDot setzt an der mit (x,y) bestimmten Stelle einen "Marker" (= 4x4 Pixel), mit dem z.B. Spitzenwerte hervorgehoben werden können.Die Farbe ist immer Schwarz (RGB = 0,0,0).

CanvasDot(50,50)

CanvasFreeze keiner keiner Macht eine Kopie der derzeit auf der Zeichenfläche sichtbaren Grafik. Beim Schließen der Zeichenfläche bleibt diese Kopie erhalten und kann bei erneutem Öffnen einer Canvas mit CanvasRestore wiederhergestellt werden.
CanvasRestore keiner keiner Eine mit CanvasFreeze erstellte Kopie der Zeichnung kann mit CanvasRestore wiederhergestellt werden. Auch nach dem Schließen und späterem Wiederöffnen der Zeichenfläche ist diese Grafik noch verfügbar. Achtung: Nach Aufruf von CanvasRestore wird die, sich im Speicher befindende, Kopie gelöscht!
CanvasUnFreeze keiner keiner Löscht die mit CanvasFreeze erstellte Zeichnungskopie. Sollten Sie die Kopie nicht mit CanvasRestore anzeigen lassen, müssen Sie den belegten Speicher spätestens am Ende Ihrer Procedure unbedingt mit CanvasUnFreeze freigeben.
CanvasUpdate keiner keiner Macht alle Änderungen auf der Zeichenfläche sichtbar. Alle Zeichenfunktionen der Canvas zeichnen auf eine interne Zeichenfläche. Um diese Änderungen sichtbar zu machen müssen Sie CanvasUpdate verwenden.

CanvasText(10,10,"Hallo VDP-Welt!")

CanvasLine(10,22,10 + CanvasStrLen("Hallo VDP-Welt!","Arial", 12), 22)

CanvasUpdate

ScreenHeight keiner INTEGER Gibt die Bildschirmhöhe der aktuellen Grafikauflösung in Pixeln zurück

y := ScreenHeight

ScreenWidth keiner INTEGER Gibt die Bildschirmbreite der aktuellen Grafikauflösung in Pixeln zurück

x := ScreenWidth

CanvasStrLen cText : STRING;

cFont : STRING;

iFontSize : INTEGER;

INTEGER Gibt die Länge des in cText übergebenen Strings, die sich bei der in cFont genannten Schriftart mit der Größe iFontSize ergibt zurück.

VAR nLänge = CanvasStrLen("tdb Software Service GmbH", "Times New Roman", 12)

CanvasSaveAs cFilename : STRING; INTEGER Speichert den Inhalt der Zeichenfläche als Windows-Bitmap (.BMP) in der in cFilename übergebenen Datei ab.

CanvasSaveAs("C:\BILDER\STATISTIK.BMP")

CanvasSaveRectAs

x1 : INTEGER;

y1 : INTEGER;

x2 : INTEGER;

y2 : INTEGER;

cFilename : STRING;

INTEGER Speichert einen bestimmten, rechteckigen Bereich der Zeichenfläche in die Datei cFilename. Die Koordinaten (x1, y1) und (x2, y2) spannen das zu speicherende Rechteck auf. Treten beim Speichern Fehler auf, so gibt CanvasSaveRectAs() -1 zurück, sonst ist das Ergebnis 0.

CanvasSaveRectAs(10,10, 150,200, "C:\BILDER\TEILBILD1.BMP")

CanvasOpenBMP cFilename : String;

iLeft : INTEGER;

iTop : INTEGER;

iRight : INTEGER;

iBottom : INTEGER;

INTEGER Öffnet eine Bitmap-Datei, die Sie mit cFilename bestimmen und stellt diese in dem durch die vier Integer-Werte definierten Rechteck dar. iTop und iLeft enthalten die Koordinaten der linken, oberen Ecke, während Sie mit iBottom und iRight die rechte, untere Ecke angeben. Sind iBottom und iRight gleich 0, so wird die Bitmap in ihrer ursprünglichen Größe dargestellt, die linke, obere Ecke der Bitmap entspricht dann iTop und iLeft.

CanvasOpenBMP("C:\Bilder\Firmenlogo.bmp" ,150,10,0,0 )

CanvasBox x1 : INTEGER;

y1 : INTEGER;

x2 : INTEGER;

y2 : INTEGER;

Filled : INTEGER;

Keiner Mit CanvasBox können Sie ein beliebiges Rechteck zeichnen. (x1,y1) bestimmen die linke, obere Ecke, (x2,y2) die rechte, untere. Filled teilt der Canvas mit, ob das Rechteck ausgefüllt oder als Umriss gezeichnet werden soll. Filled gleich 0 gibt an, dass das Rechteck nur durch Linien umrissen wird. Hat Filled den Wert 1, wird das gesamte Rechteck in der aktuelle Linienfarbe gemalt.

CanvasLineColor(20,100,20)

CanvasBox(10,10,110,30,1)

CanvasUpdate

CanvasEllipse x1 : INTEGER;

y1 : INTEGER;

x2 : INTEGER;

y2 : INTEGER;

Keiner Mit CanvasEllipse können Sie ein beliebige Ellipse zeichnen. (x1,y1) und (x2,y2) bestimmen die beiden Brennpunkte. Sind (x1,y1) und (x2,y2) identisch, dann zeichnet CanvasEllipse einen Kreis. CanvasEllipse zeichnet nur den Umriss einer Ellipse.

CanvasLineColor(20,100,20)

CanvasEllipse(10,10,110,30)

CanvasUpdate