Delphi TCanvas Informatik-AG. TCanvas Viele der sichtbaren in Delphi vorhanden Objekte besitzen die Eigenschaft Canvas. Übersetzt heißt Canvas Leinwand.

Slides:



Advertisements
Ähnliche Präsentationen
Steigung m berechnen Man kann die Steigung auch berechnen,
Advertisements

Tipps & Tricks zu benutzerdefinierten Animationspfaden
Vom graphischen Differenzieren
Sortieren I - Bubblesort -
Mathematik 9. Jahrgang: Zentrische Streckung
8. Jahrgang: Abbildungen DIE ACHSENSPIEGELUNG
verweis-sensitive Grafiken
Professional XNA Game Programming
Zeichnen für Anfänger -für das Zeichnen benutzten wir das Programm „Autosketch“ Dafür gehen wir in das Startmenü, dann auf Programm und danach auf Autosketch.
Java2D Richard Göbel.
Sortierverfahren Richard Göbel.
Ein Beispiel in Java.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
2D-Visualisierung von Daten
Java-Kurs Grafik Julian Drerup.
Programmieren mit JAVA Teil V. Grafikausgabe mit JAVA, das AWT Java wurde von Anfang an mit dem Anspruch entwickelt, ein vielseitiges, aber einfach zu.
Zusammenfassung Vorwoche
So animieren Sie Kreisdiagramme mit der Eingangs-Animation „Rad“
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
1 Animation (Doublepuffering) Vorlesung: Datenverarbeitung Grundlagen 3 Fachbereich II - Mathematik Rolf Heitzenröder.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Heute: Scherenzange zeichnen
FH-Hof Java2D - Grundlagen Richard Göbel. FH-Hof Java2D - Funktionen Java2D unterstützt: das Zeichnen von Grafiken die Darstellung von Texten die Darstellung.
Delphi Eine objektorientierte Programmiersprache © Beushausen 2000.
Wie macht man ein Sudoku? Transformations-Methode:
Kakuro Regeln und Strategien
Kundenspezifische Anpassungen - Ändern von Objekten
Histogramm/empirische Verteilung Verteilungen
Ich möchte gerne mehrere Bilder auf ein Folie
Grafikprogrammierung
Java ohne Kara. Java ohne Kara Ab jetzt: Java ohne Kara Ziel: Erfahrungen sammeln mit ersten Java Programmen.
Hyperlinks und Anker Links notieren
Textfelder, Grafiken,... Verschieden Übungen Schreibe als Untertitel:
Auf Wunsch einer einzelnen Dame
Hi Zusammen! Ich möchte eine Graphik in PP erstellen, die wie ein Tacho funktioniert. Das heisst, das Tacho ist gegeben, aber der Pfeil soll sich durch.
Einführung in das Programm
Moin. Ich benutze PPT 2002 und möchte drei Bilder nacheinander 1
Chaos und Fraktale M. Bostelmann Michael Bostelmann.
Powerpoint 2010 Start Funker Panorama: Zuschauer auf der Elbbrücke beim Weinfest 2011 in Meißen.
Die folgenden Seiten enthalten eine Anleitung wie man
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
1 Bildschirmpräsentation Möglichkeiten, die Präsentation einer Präsentation vorzubereiten und durchzuführen.
Hallo, ich würde gerne wissen, wie ich einen graphen, den ich mit
1 Hallo! Wir müssen für die Schule eine Präsentation machen, mit einer 4x4er Tabelle. In jedes Feld kommt eine Frage und wenn diese gelöst wird, soll sich.
Die folgenden Seiten enthalten einige Vorschläge wie man die gegenwärtige Position im Vortrag markieren kann. Auf dem Master wird die Leiste mit den Punkten.
100 kg Wie wird’s gemacht?! Klick.
Auf den Kopf einer beliebigen „Person“ klicken.
Hallo Ich möchte einen Text einer Folie nicht einfach nur einfliegen lassen, sondern genau diesen Text, der schon an einer bestimmten Stelle steht, vergrößern.
Hallo Ich habe eine Linie mit den Auto-Forms gezeichnet. Diese Linie soll sich um ihren linken Äußeren Punkt drehen, um etwa 40 Grad. Das Problem ist nur.
Hallo zusammen, es folgt ein Wunsch für kreative Freaks: Ich möchte gern das Ergebnis einer Aufgabenstellung mit einem Scheinwerfereffekt hervorheben.
wenn ich auf eine bestimmte Stelle auf einer Folie klicke
Einführung in das Programm
Grundlagen von Objekt-Pascal Erstellt von J. Rudolf überarbeitet von H.Brehm.
Soziogramm und Soziogramm Designer
Das ABC der Statistik DIE SÄULENDIAGRAMME 1
Erste Schritte in DELPHI
Delphi Informatik-AG.
Hier eine mögliche Antwort:
Textfelder, Grafiken,... Schreibe als Untertitel:
Mehrfachausführungen Schleifen in VB 2010 ee. Programmidee: Der Anwender gibt eine Zahl ein, und das Programm gibt die Mehrfachen dieser Zahl aus (das.
Vom graphischen Differenzieren
Zeichnen Mit den Officeprogrammen kann man sehr viele einfache Grafiken direkt im Programm erstellen. Es handelt sich um ein Zeichenprogramm Malprogramme.
Schaltfläche-Star 1 Schaltfläche Star. Schaltfläche-Star 2 Beispiel Star Erstellen eines grünen Rechtecks: Hintergrund auf Größe 200x50 Pixel minimieren,
A&D Persa K TB Herzlich Willkommen zum Flash 4 - Seminar.
MAYA K. Canvas-Projekt. In HTML- body: Canvas tag öffnen seamntsiches HTML) Canvas bekommt eine id (1mal verwenden, mit # angesprochen) Höhe und breite.
Objektorientierte Programmierung (OOP)
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Lineare Optimierung Nakkiye Günay, Jennifer Kalywas & Corina Unger Jetzt erkläre ich euch die einzelnen Schritte und gebe Tipps!
 Präsentation transkript:

Delphi TCanvas Informatik-AG

TCanvas Viele der sichtbaren in Delphi vorhanden Objekte besitzen die Eigenschaft Canvas. Übersetzt heißt Canvas Leinwand. Es handelt sich also um eine Fläche auf der man malen kann. Wie sieht nun so ein Canvas aus? Stellen wir und den Canvas als ein Feld vor, in der jedes Element des Feldes eine Farbe enthält. Der Punkt (0,0) des Feldes ist die obere linke Ecke des Canvas. Breite und Hoehe ergeben sich immer aus der Größe des Objektes den der Canvas repräsentiert. Über die Eigenschaft Pixels lassen sich die einzelnen Farben des Canvas setzten und auslesen: Farbe := Canvas.Pixels[0,0]; Canvas.Pixels[10,10] := clRed; 0,0

Mit diesem Wissen und der passenden Komponente sind wir schon mitten im ersten kleinen Testprogramm. Aufgabe: Lege ein neues Projekt an. Im Event OnPaint des Formulars setzen wir einige Punkte im Formular auf Rot. procedure TForm1.FormPaint(Sender: TObject); begin canvas.Pixels[10,10] := clRed; canvas.Pixels[20,10] := clRed; canvas.Pixels[15,20] := clRed; canvas.Pixels[33,33] := clRed; end;

Wie wäre es jetzt mit einer Linie? Tip: Die Breite des Formulars erhält man über die Eigenschaft ClientWidth und die Höhe über ClientHight. procedure TForm1.FormPaint(Sender: TObject); var x, y : integer; begin y := Clienthight div 2; // die Mitte berechnen for x := 0 to Clientwidth do // über die gesamte Breite begin canvas.Pixels[x,y] := clRed; end; Tip: Die Eigenschaften Width und Hight des Formulars geben die Größe incl. des Rahmens und Titels an!

Das Zeichnen einer Linie scheint eine nützliche Funktion zu sein, die man sicher öfter brauchen kann. Der erste Einsatzfall für eine Procedure. Was sollte diese Procedure machen? Wir wollen den Start- und Endpunkt angeben, die Höhe der Linie und die Farbe in der gezeichnet wird. Procedure TForm1.HLinie(x1, x2, y: integer; farbe: TColor); var x: integer; begin for x := x1 to x2 do canvas.pixels[x,y] := farbe; end; Wir müssen dem Compiler noch über das Vorhandensein der neuen Procedure in Kenntnis setzten. Das geschieht im Kopf des Quelltextes TForm1 = class(TForm) procedure FormPaint(Sender: TObject); private { Private-Deklarationen } procedure HLinie(x1,x2,y: integer; farbe: TColor); public { Public-Deklarationen } end;

Aufgabe: Mit Hilfe der neuen Procedure sollen in einem Fenster Linien gezeichnet werden. Das Ergebnis könnte so aussehnen. var y: integer; begin for y := 1 to 20 do begin HLinie(0, ClientWidth, y*10, clRed) end;

Nun scheint es doch mühsam nur über das Setzen einzelner Pixel komplexere Dinge zu zeichnen (übrigens eine beliebte Aufgabe ist es die Procedure so zu erweitern das sie auch schräge Linien zeichnen kann!). Ein TCanvas hat aus diesem Grund 3 weitere Eigenschaften und eine Reihe von Functionen. 1.Pen Der Stift zeichnet alle dünnen Linien. 2.Brush Der Pinsel legt die Eigenschaft von Füllungen fest. 3.Font Zu guter letzt kann über die Eigenschaft Font das Aussehen von Schrift vorgegeben werden.

Als nächste kleine Übungsaufgabe wollen wir ein einfaches Malprogramm schreiben. Im Programm soll man eine Farbe und die Strickdicke wählen und dann im Formular bei gedrückter Maustaste malen. Das Ergebnis soll dann so aussehen……….

Tips: Die Auswahlbox für Farbe findet man im Reiter Zusätzlich Pen.Color und Pen.Width geben die Farbe und die Breite der Striche an Mit MoveTo(x,y) läßt sich der Stift auf eine bestimmte Position setzten LineTo(x,y) zeichnet von letzen Punkt aus eine Linie mit den vorher eingestellten Werten. Seht euch mal die Mouse-Events des Formulars an. Viel Spaß………

TCanvas Pen Color: Gibt die Farbe für den Pen in TColor an Width: Gibt die Breite an, in der der Rahmen oder eine Linie gezogen wird (Mindestwert=1) Style: Erlaubt es, Linien gestrichelt zu zeichnen. Im Allgemeinen sollte dieser Wert auf der Standarteinstellung psSolid belassen werden. Nur in dem Fall, dass man eine Figur ohne Rahmen zeichnen will, sollte man psClear benutzen, da es nichts nutzt, Width auf 0 zu setzen Mode: TPenMode erlaubt eine Menge Einstellungen, wie denn der Pen nun genau gezeichnet werden soll. Hierbei gilt das gleiche wie bei CopyMode von TCanvas: Die Standarteinstellung der Eigenschaft (pmCopy) sollte in 99% aller Fälle beibehalten werden. Nur für spezielle grafische Effekte sollte man umschalten. Brush Color: Diese Eigenschaft (natürlich wieder vom Typ TColor) regelt die Füllfarbe für den Hintergrund Style: Mit Hilfe dieser Eigenschaft kann man auch den Hintergrund nicht komplett füllen lassen, sondern ein Muster verwenden. Die Standarteinstellung ist bsSolid, bei der der komplette Hintergrund gefüllt wird. Wird bsClear verwendet, wird der Hintergrund Transparent gezeichnet, ein häufig praktischer Effekt. Die anderen Füllmuster sind von wenig wichtiger Bedeutung. Das 1. Problem ist die mangelnde Anzahl an Muster, die sich aber durch das verwenden einer Bitmap (s.u.) lösen lässt. Andererseits hat man keinen direkten Einfluss auf die Hintergrundfarbe, da die 2. Farbe, die verwendet wird, immer transparent ist. Um einen Hintergrund mit 2 Farben zu verwenden, muss man also vorher füllend mit der anderen Farbe zeichnen Bitmap: Diese Eigenschaft macht es möglich, nicht nur mit einer Farbe oder einem Vorgegebenen Muster zu füllen, sondern auch eigene Füllungen zu verwenden. Dabei sind aber einige Einschränkungen vorhanden, da das Bild genau 8*8 Pixel groß sein muss. Abschließend muss noch die Eigenschaft Handle erwähnt werden, die häufig für die GDI-Funktionen der API benötigt wird und das Handle des Brush zurückgibt Font Hier wird die verwendete Schriftart für die Ausgabe von Text verwendet. Font ist vom gebräuchlichen Typ TFont. Die hier eingegeben Werte wirken sich nur auf wenige Canvas-Methoden aus (TextExtent, TextHeight, TextOut, TextRect, TextWidth).

TCanvas Flächenmethoden Chord Zeichnet eine Ellipse, die durch eine Gerade getrennt ist. Die 8 Parameter sind jeweils vom Typ Integer und geben Koordinaten an. Die ersten 4 sind jeweils zu Paaren die Eckpunkte des die Ellipse umschließenden Rechteckes (also der 1. Wert der x-Wert der ersten Eckpunktes, der 2. Wert der y-Wert des ersten Eckpunktes...). Die Größe der Ellipse ist durch dieses Rechteck beschränkt. Die Parameter 5-8 geben die Linie an, die die Ellipse trennt. Der fünfte und sechste Parameter sind x- und y-Wert des einen Punktes, der siebte und achte des anderen Punktes. Ellipse Zeichnet, wie der Name schon sagt, eine Ellipse. Die Ellipse ist durch ein Rechteck beschränkt und füllt dieses Rechteck möglichst voll aus. Das Rechteck selber ist durch 4 Parameter gegeben, die 2 gegenüberliegende Eckpunkte des Rechtecks angeben. FillRect Füllt ein Reckeck mit der Farbe, die in Brush angegeben ist. Ein Rand wird nicht gezeichnet. Das Rechteck ist durch 4 Koordinaten angegeben, die wie üblich 2 gegenüberliegende Eckpunkte des Rechtecks darstellen. Zu beachten ist, dass die beiden Begrenzungslinien (die in der Brush-Farbe gezeichnet werden), die an den ersten Punkt angrenzen, mitgezeichnet werden, die an den zweiten Punkten angrenzen, werden jedoch nicht mitgezeichnet. Bei dieser Methode gibt es nur einen Parameter vom Typ TRect, der ein Recheck darstellt. Will man trotzdem mit 4 einzelnen Koordinaten arbeiten, sollte man die Funktion Rect verwenden, die 4 Koordinaten in ein TRect umwandelt. FrameRect Zeichnet nur den Rahmen eines Rechtecks mit der Farbe aus dem Brush (!!!). Der Rahmen ist immer genau einen Pixel breit. Die innere Fläche des Rechtecks wird transparent gezeichnet. Der das Rechteck angebende Parameter ist wieder vom Typ TRect. Pie Zeichnet ein Kuchenstück, also den Teil einer Ellipse. Die Ellipse ist durch ein Rechteck angegeben (erste 4 Parameter). Vom Mittelpunkt der Ellipse trennen 2 Linien (Endpunkte sind die Parameter 5-8) die Ellipse. Der Bereich der im Uhrzeigersinn zwischen dem ersten und dem 2. Punkt liegt, wird nun gezeichnet. Der Rand sind die Linien, die vom Mittelpunkt der Ellipse ausgehen, und der Rand der Ellipse. Arc Zeichnet, ähnlich wie Pie, den Ausschnitt einer Ellipse, aber keine Fläche, sondern nur einen Ausschnitt des Randes der Ellipse. Die Parameter sind die gleichen wie bei Pie. Polygon Diese Procedure zeichnet ein Polygon. Der einzige Parameter ist ein (beliebig) großes Array von Typ TPoint. Alle Punkte werden nacheinander miteinander verbunden, die Linien mit dem Pen gezeichnet und der Raum dazwischen mit dem Brush gefüllt. Rectangle Zeichnet ein Rechteck. Die Begrenzungslinien, wie üblich, mit Pen und die Fläche mit dem Brush. Als Parameter die 4 Integerwerte, die die Eckpunkte des Rechtecks angeben. In neueren Delphiversionen kann man die 4 Integerwerte auch durch ein TRect ersetzen. RoundRect Zeichnet, genau wie Rectangle, ein Rechteck. Der einzige Unterschied ist, dass die Ecken leicht abgerundet sind. Anmerkung: Hier ist häufig von Ellipsen die Rede. Sollte ein Kreis gezeichnet werden, muss das umgebende Rechteck nur ein Quadrat sein.

TCanvas Methoden, um Bitmaps aufzutragen oder herauszukopieren BrushCopy Zeichnet einen Teil (3. Parameter: TRect) eines Bitmap (2. Parameter: TBitmap) auf die Zeichenfläche. Der Bereich, in den gezeichnet werden soll, ist durch den ersten Parameter (TRect) gegeben. Dabei wird gegebenenfalls die Grafik verzerrt, was aber nicht immer schön aussieht und daher vermieden werden sollte. Eine Farbe (4. Parameter: TColor) des Bitmaps wird nicht mitgezeichnet, sondern diese Pixel werden mit der Brush-Farbe des Ziels gezeichnet. Dies kann verwendet werden, um transparent zu zeichnen oder andere Effekte zu erzielen. BrushCopy ist sehr langsam (Draw und StretchDraw sind ca. 200 mal so schnell) und sollte daher nicht zum normalen zeichnen verwendet werden. CopyRect Zeichnet in einem Bereich (1. Parameter: TRect) auf dem aktuellen Canvas einen Bereich (3. Parameter: TRect) von einem anderen Canvas (2. Parameter: TCanvas). Mit Hilfe von Einstellungen bei CopyMode lässt sich eine direkte Änderung des Bildes realisieren. Wenn beide Rechtecke nicht gleich groß sind, wird der Bereich gestretcht ausgegeben, was nicht unbedingt gut aussieht. Draw Zeichnet eine Grafik (3. Parameter: TGraphic) an eine Stelle (1. und 2. Parameter: Integer) des aktuellen Canvas. Da alle wichtigen Grafiktypen (wie TBitmap oder TJPEGImage) von TGraphic abgeleitet sind, lässt sich praktisch jede Grafik auf den Canvas zeichnen. Dabei wird die Graphik in voller Größe (wenn sie nicht Größer als die Zeichenfläche ist) ausgegeben und kann nicht größenverändert werden. StretchDraw Zeichnet ebenfalls eine Graphik (2. Parameter: TGraphic) auf die Zeichenfläche. Aber der komplette Bereich, in dem gezeichnet wird, ist durch den ersten Parameter (TRect) angegeben, so dass das Bild gestretcht wird, falls es nicht die exakte Größe des Rechtecks hat. DrawFocusRect Zeichnet einen Rahmen (wie er bei fokkusierten Komponenten üblich ist) um das Rechteck, das mit dem Parameter (TRect) gegeben ist. Dabei wird eine Form des Zeichnens mit XOR verwendet, der Rahmen verschindet also bei erneutem aufrufen. Ist eigentlich nur bei der Programmierung von Komponenten von Bedeutung.

TCanvas Textmethoden TextWidth Benötigt als Parameter einen String. Es wird mit dieser Funktion nichts gezeichnet, sondern ermittelt, wie viele Pixel der Übergebene Text bei den aktuellen Fonteinstellungen breit ist. Dieser Wert wird als Integer zurückgegeben. Diese wird benötigt, um evtl. andere Objekte neben dem Text anzuordnen. TextHeight Ähnlich wie TextWidth, nur wird die Höhe des Textes zurückgegeben. TextExtent TextHeight und TextWidth in einem. Aus dem String-Parameter wird die Höhe und Breite bei den aktuellen Font-Einstellungen ermittelt und in einem Typ TSize (Mit den Integerwerten cx und cy) zurückgegeben. Ist etwas schneller, als TextHeight und TextWidth für den gleichen Text aufzurufen. TextOut Gibt einen Text (3. Parameter: String) an einer Position (1. und 2. Parameter: Integer) aus. Der Hintergrund wird dabei in der Brush-Farbe gezeichnet. TextRect Gibt einen Text (4. Parameter: String) an einer Position (2. und 3. Parameter: Integer) aus. Jeglicher Text, der nicht innerhalb eines angegebenen Rechtecks (1. Parameter: TRect) liegt, wird nicht dargestellt. Die Hintergrundfarbe des Rechtecks wird mit dem Brush gezeichnet. Im Allgemeinen sollte die Position des Textes mit der linken, oberen Ecke des Rechtecks übereinstimmen. Vor allen Dingen praktisch, falls der Text eine bestimmte Größe nicht überschreiten darf (ich stelle mir einem Button vor, bei dem die Caption über den Rahmen geht).

TCanvas Andere Methoden FloodFill Füllt einen Bereich mit der im Brush angegebenen Farbe. Die ersten beiden Parameter (jeweils Integer) geben den ersten Punkt an, von dem ausgehend gefüllt wird. Der 4. Parameter erlaubt 2 Einstellungen: Ob solange gefüllt wird, bis die im dritten Parameter (Typ: TColor) angegebene Farbe erreicht wird, diese also eine Grenze der Füllung bildet. Dafür muss der Parameter den Wert fsBorder haben. Soll solange gefüllt werden, bis die Farbe wechselt, muss im dritten Parameter die Farbe an der entsprechenden Position angegeben werden und im vierten Parameter der Wert fsSurface. Dies entspricht dann dem Farbfüller von Paint. MoveTo Setzt die aktuelle Stiftposition auf den angegeben Punkt (2 Parameter: Integer). Dies ist wichtig für LineTo. Die Stiftposition lässt sich auch mit einer Zuweisung an PenPos (Typ: TPoint) regeln, und mit PenPos lässt sich die Position auslesen. LineTo Zeichnet von der aktuellen Stiftposition (siehe MoveTo) eine Linie an die durch die beiden Integerparameter angegebene Position. Der letzte Pixel (also die bei LineTo angegebene Position) wird nicht (!!!!) mitgezeichnet. Dies ist aber auch nicht immer notwendig, da LineTo die Stiftposition auf dieses Pixel setz und man so direkt von dort eine neue Linie zeichnen kann. PolyLine Zeichnet mehrere Linien. Der Endpunkt der ersten Linie ist der Anfangspunkt der zweiten Linie etc. Die einzelnen Punkte werden an PolyLine durch ein Array of TPoint übergeben. Wichtig bei dieser Methode: die Stiftposition wird nicht benutzt oder verändert. Mit PolyLine lässt sich außerdem ein Polygon zeichnen, wenn man der ersten und letzten Punkt als identisch angibt. Beinhaltet das Array nur einen Punkt, wird nichts gezeichnet, beinhaltet es 2 Punkte, wird eine Linie gezeichnet.