Programmierkurs: Delphi: Komponentenentwicklung

VorfahrtypBearbeiten

Zunächst einmal sollten Sie sich im Klaren sein, was für einen Vorfahrtypen man wählt. Für graphische Komponenten ist für eine ganz neue Komponente TGraphicControl eine gute Wahl. Sollte es ein erweitertes Edit sein, muss man natürlich TEdit als Vorfahrtyp wählen, es sei denn, man möchte alles neu schreiben.

Neue KomponenteBearbeiten

Eine neue Komponente wird über Komponente / Neue Komponente ... erstellt. In diesem Dialog geben wir ein, was Delphi von uns wissen will. Wir wissen nun, welchen Vorfahrtypen wir nehmen, hier TGraphicControl, und nennen unsere neue Klasse zum Beispiel TMyShape. Diese soll am Ende dem TShape ähneln.

ZeichnenBearbeiten

Zum Zeichnen benutzen wir Canvas. Das kann überall gemacht werden. Gut ist es jedoch, es in der Methode Paint zu machen, die TGraphicControl mitbringt. Diese überschreiben wir. Es sieht nun so aus:

TMyShape = class(TGraphicControl)
  private
    { Private-Deklarationen }
  
  protected
    procedure Paint; override; // Hier eintragen
  
  public
    { Public-Deklarationen }
  
  published
    { Published-Deklarationen }
end;

{ ... }

procedure TMyShape.Paint; override;
begin
  { ... }
end;

Da wir uns in TMyShape befinden, müssen wir Canvas nicht mit TMyShape.Canvas ansprechen, sondern dürfen auch Canvas schreiben. Normalerweise schreibt ja auch niemand Form1.Edit1.Text sondern Edit1.Text. Wir stellen uns vor, wir wären in einer with-do-Konstruktion. Wie wir mit Canvas zeichnen, wurde im letzten Kapitel erklärt.

KoordinatenBearbeiten

Bei den Koordinaten darf man auf gar keinen Fall Left und Top für die linke obere Ecke verwenden, sondern 0. Die Koordinaten beziehen sich nicht auf die auf dem Formular, sondern auf die innerhalb der Komponente. Damit kann man überflüssige Unklarheiten vermeiden. Die Breite und Höhe bekommen wir mit Width und Height geliefert.

EreignisseBearbeiten

Ereignisse müssen wir einfach nur importieren. Wir schreiben also in den Published-Teil:

published
  property OnClick;
  property OnMouseMove;
  ...

Denn alle wichtigen Ereignisse werden von TGraphicControl geliefert.

PropertiesBearbeiten

Properties sollen meistens im Objektinspektor erscheinen. Dafür wird diese Schreibweise verwendet:

published
  property MyProperty: Datentyp read AMyProperty write FmyProperty;

AMyProperty wird im Private-Teil mit demselben Datentypen deklariert. FMyProperty ist eine Prozedur aus dem Private-Teil und könnte folgendermaßen aussehen:

procedure TMyShape.FMyProperty(A: Datentyp);
begin
  AMyProperty := A;
  Paint;
end;

Damit wird wieder das Paint-Ereignis aufgerufen. Innerhalb der Komponente hat man immer AMyProperty zu verwenden, nie MyProperty!

Komponente installierenBearbeiten

Hier geht es relativ einfach, da die Komponente nur aus einer Unit besteht: Man ruft Komponente / Komponente installieren ... auf, gibt die Unit an, klickt im Dialog auf "Compilieren" und anschließend auf "Installieren" und wartet auf eine Erfolgsmeldung. Dafür darf aber die automatisch erzeugte Register-Prozedur nicht gelöscht werden!


  Erstellung einer grafischen Oberfläche weitere Themen Inhaltsverzeichnis Multimediafunktionen