OSZ Handel I
Informatik

D L I B - eigene Klassen
Grafik-Klassen

S. Spolwig
 

 

[ Informatik | Unterrichtsmaterialien | Delphi ]

Anklicken für Spezifikation

Die Klassen TText und TBild wurden aus unterrichtspraktischen Gründen hinzugefügt, obwohl sie systematisch nicht zu den Grafikfiguren gehören. Sie verhalten sich genauso wie die anderen, mit dem Unterschied, dass statt einer Figur ein Font bzw. bmp-Bild auf das Zeichenblatt kopiert wird.

 

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 : Objekt 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 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-Komponente 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 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 )
------------------------------------------------------------------ *)

 

  29. März 2007    ©  Siegfried Spolwig

page_top