unit uGrafik;
(* ******************************************************************** *)
(* *)
(* K L A S S E : TFigur, TZeichenblatt u. a. *)
(* -------------------------------------------------------------------- *)
(* Version : 2.21 *)
(* Autor : (c) 1998-2004, S.Spolwig, OSZ-Handel I, 10997 Berlin *)
(* *)
(* Beschreibung: Die Unit ist eine Bibliothek von Grafikklassen. *)
(* Sie stellt ein TZeichenblatt zur Verfügung, das in *)
(* einer TImage-Komponente liegt und das den Hintergrund *)
(* für die anderen Objekte bildet. *)
(* Dem Objekt muss mit Zeichenblatt.SetLink(..) die Image-*)
(* Komponente übergeben werden. *)
(* Die anderen Klassen/Objekte beziehen sich auf ZEICHEN- *)
(* BLATT. *)
(* X1 und Y1 sind der Bezugspunkt jeweils links (oben), *)
(* beim Kreis der Mittelpunkt. Der Ursprung ist [0,0]. *)
(* Die Farben sind vom Typ TColor in DELPHI. *)
(* Compiler : DELPHI 5.0 / 6.0 *)
(* *)
(* Aenderung : V. 0.9 13-NOV-98 *)
(* 1.0 14-NOV-98 polymorphe Methoden *)
(* 1.01 04-DEC-98 Bug in Textpos; Farben gesetzt in *)
(* Zeigen, sonst falsche werte *)
(* 1.02 14-JAN-99 GetBreite, GetHoehe für Zeichblatt*)
(* 1.03 05-JUL-99 Bug in Text.Zeigen. Richtiger Hin-*)
(* grund *)
(* 2.0 17-JUL-99 SetPos statt constructor Init(), *)
(* TZeichenblatt ist Unterklasse von *)
(* TRechteck *)
(* 2.1 15-JUN-01 TZeichenblatt.SetLink (...) *)
(* Damit entfällt der Zwangsexport *)
(* von ZEICHENBLATT und es kann wie *)
( alle anderen behandelt werden. *)
(* Die Figuren können auf mehreren *)
(* Images dargestellt werden. *)
(* Das zuletzt aufgerufene ist immer *)
(* (leider) systemweit das aktuelle. *)
(* Zeichenblatt.Init() entfällt. *)
(* 2.11 15-NOV-01 Delphi6-Bug Flackern beseitigt *)
(* 2.12 10-OKT-02 TZeichenblatt.SetLink (...) ohne *)
(* 2. Parameter *)
(* 2.13 03-MAR-03 TPunkt - Vorschlag J. Frank *)
(* Rechteck.GetBreite, ..GetHoehe *)
(* 2.2 03-MAR-03 IstMarkiert, Ziehen, *)
(* PosVersetzenNach(..) *)
(* 2.21 15-MAR-04 TBild *)
(* ******************************************************************** *)
INTERFACE
uses graphics, extctrls;
(* ============================ TFIGUR ============================== *)
type
TFigur = class (TObject)
protected
x1, y1, x2, y2 : longint;
Farbe,
Fuellfarbe : Tcolor;
public
procedure SetPos(ax1, ay1, ax2, ay2 : longint); virtual;
function GetXpos : longint; virtual;
function GetYpos : longint; virtual;
procedure SetFarbe (F: TColor); virtual;
function GetFarbe : TColor; virtual;
procedure SetFuellFarbe (F : Tcolor); virtual;
function GetFuellfarbe : TColor; virtual;
procedure Entfernen; virtual;
function IstMarkiert (ax,ay : longint) : boolean;virtual;
procedure Loeschen; virtual;
procedure PosVersetzenUm (dx, dy : longint); virtual;
procedure PosVersetzenNach (neuX, neuY : longint);virtual;
procedure Zeigen; virtual;
procedure Ziehen (ax, ay : longint); virtual;
end;
(* ============================= TLinie ============================= *)
TLinie = class (TFigur)
function IstMarkiert (ax, ay : longint):boolean; override;
procedure Zeigen; override;
end;
(* ============================= TRechteck ========================== *)
TRechteck = class (TFigur)
function GetBreite : longint; virtual;
function GetHoehe : longint; virtual;
procedure Zeigen; override;
end;
(* ============================= TEllipse =========================== *)
TEllipse = class (TFigur)
procedure Zeigen; override;
end;
(* ============================= TKreis ============================= *)
TKreis = class (TFigur)
private
Radius : longint;
public
procedure SetPos (ax, ay : longint); reintroduce;overload;
procedure SetRadius (R : longint); virtual;
function GetRadius : longint; virtual;
function IstMarkiert (ax,ay : longint) : boolean;override;
procedure PosVersetzenNach (neuX, neuY : longint);override;
procedure Zeigen; override;
end;
(* ============================= TPunkt ============================= *)
TPunkt = class (TFigur)
procedure SetPos (ax, ay : longint); reintroduce;overload;
procedure Zeigen; override;
end;
(* ============================= TText ============================== *)
Ttext = class (TFigur)
private
Text : string;
Schriftart : string;
Hoehe : longint;
public
procedure SetPos(ax, ay : longint); reintroduce;overload;
procedure SetText (T : string); virtual;
procedure SetFarbe (F : TColor); override;
procedure SetFont (Art : string; Grad : longint); virtual;
function IstMarkiert (ax, ay : longint):boolean; override;
procedure PosVersetzenNach (neuX, neuY : longint);override;
procedure Zeigen; override;
end;
(* ============================= TBild ============================== *)
TBild = class (TFigur)
protected
Bitmap :TBitmap;
public
constructor Create;
procedure SetPos(ax1, ay1, ax2, ay2 : longint); override;
procedure Zeigen; override;
procedure Loeschen; override;
procedure Entfernen; override;
procedure Laden(dateiname : string); virtual;
function IstMarkiert (ax, ay : longint) : boolean; override;
procedure Ziehen (ax, ay : longint); override;
end;
(* ============================= TZeichenblatt ====================== *)
TZeichenblatt = class (TRechteck)
procedure SetLink (Im : TImage); virtual;
end;
(* -------------------- B e s c h r e i b u n g -------------------------
Oberklassen : TObject, TFigur
Bezugsklassen : TImage, TColor
Methoden (FUER ALLE KLASSEN !!)
--------
SetPos (...)
Auftrag: Objekt mit den Werten in Pixeln fuer die Position versehen.
x1,y1 sind linke obere Ecke, x2, y2 rechte untere.
Bei ELLIPSE liegt die Figur in einem Rechteck mit diesen Werten.
Bei KREIS beziehen sich x,y auf den Mittelpunkt.
Bei TEXT beziehen sich x,y auf das 1. Zeichen.
Bei BILD wird die Ausgabefläche (Bitmap) im Zeichenblatt begrenzt.
vorher : -
nachher: Objekte haben Positionwerte
Set...
Auftrag: Attributwert für jeweiliges Objekt schreiben
vorher : ist vorhanden
nachher: Attributwert ist gesetzt
Get...
Anfrage: Attribut aus dem Objekt lesen
vorher : Objekt ist vorhanden.
nachher: -
IstMarkiert (x,y : longint): boolean;
Anfrage: ob sich die Koordinaten für x und y innerhalb der Fläche der Figur
liegen; bei Linie und Kreis innerhalb eines einschließenden Rechtecks,
bei Text 20X20 pix auf dem 1. Zeichen.
vorher : -
nachher: true, wenn innerhalb.
PosVersetzenNach (neuX, neuY : longint)
Auftrag: die Position neu festlegen.
vorher : Objekt ist vorhanden
nachher: Attributwerte sind gesetzt
PosVersetzenUm (dx, dy : longint)
Auftrag: die Position um dx horizontal, um dy vertikal verschieben
vorher : Objekt ist vorhanden
nachher: Die neue Position ist alte Pos. um dx,dy erhöht oder vermindert
Loeschen
Auftrag: jeweiliges Objekt vom Bildschirm loeschen
vorher : -
nachher: Objekt ist geloescht
Entfernen
Auftrag: jeweiliges Objekt aus dem Speicher loeschen
vorher : ist vorhanden.
nachher: Objekt aus dem Arbeitsspeicher entfernt.
Zeigen
Auftrag: Objekt auf dem Bildschirm darstellen
vorher : ist vorhanden
nachher: -
IstMarkiert
Anfrage: ob Figur im Fokus (LMouse gedrückt) ist.
vorher : Figur ist vorhanden
nachher: true, wenn LMouse in aktiver Fläche liegt
Ziehen (x,y: longint);
Auftrag: Figur auf dem Bildschirm nach x,y mit LMOuse gedrückt verschieben.
Figur bleibt dabei sichtbar.
vorher : ist vorhanden.
nachher: F. hat neue Position und ist angezeigt.
***** zusätzlich in TBild *****************************
Tbild wurde aufgrund praktischer Erwägungen für den Unterricht eingeführt,
obwohl es nicht systemkonform ist. Es verhält sich genau so wie die anderen
Figuren, mit dem Unterschied, dass nicht eine Figur auf das Zeichenblatt
geschrieben, sondern ein bmp.Bild kopiert wird.
Laden(dateiname : string);
Auftrag: bmp-Bild aus Datei laden (rel. / abs. Pfade erlaubt)
vorher : Objekt ist erzeugt und Bild ist vorhanden
nachher:-
**** zusätzlich in TZEICHENBLATT *********************
SetLink (Im : TImage);
Auftrag: Zeichenblatt mit der Image-Komponenten und den anderen Figuren
verbinden und Startwerte eintragen
vorher : Im ist vorhanden
nachher: Position und Groesse sind von Image uebernommen (also gleich gross).
Farbe und und FuellFarbe sind schwarz (keine Farbe)
GetBreite
Anfrage: nach der Breite (in x-Richtung)
vorher : ist mit einer Imagekomponente initialisiert
nachher: Resultat ist die Breite ( = Breite der Imagekomponente )
GetHoehe
Anfrage: nach der Hoehe (in y-Richtung)
vorher : ist mit einer Imagekomponente initialisiert
nachher: Resultat ist die Hoehe ( = Hoehe der Imagekomponente )
------------------------------------------------------------------ *)
|