Autor Beitrag
Chris Maslowski
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 109



BeitragVerfasst: Di 29.03.05 15:01 
Schreiben von eigenen Komponenten :)

Da ich bisher fast nur fragen gestellt habe will ich mal ein Tutorial machen
Das ist mein erstes Tutorial überhaupt, postet bitte Fehler :?

Als erstes hatte ich vor ein Tutorial für den Einstieg zu schreiben, aber davon gab es schon genug. Ich hab das Tutorial ein bisschen gegliedert. Das Tutorial soll dir aber nur eine Einführung zum eigenen schreiben von Komponenten geben. Hier sind die Themenblöcke:
  1. Einführung
  2. Wie entwickelt man eine eigene Komponente?
  3. Beispiel: Neues Label
  4. Neue Komponente zur Palette hinzufügen und testen
  5. Hilfedateien und Symbole für die Komponente und Eigenschaftseditoren
Ich hoffe diese Gliederung erscheint nicht zu groß, aber so viel ist es doch nicht. Also fangen wir an: :wink:

1. Einführung
Es gibt viele Programmierer die keine eigenen Komponenten schreiben können. Denn wer Komponenten selber schreibt muss sich über alles Mögliche den Kopf zerbrechen damit der Anwender(Programmierer) das nachher nicht machen muss. Es gibt meistens sowieso keinen Grund eigenen Komponenten zu schreiben, denn Delphi stellt schon von Grund auf eine große Auswahl und Erweiterungen gibt es auch zu genüge im Internet(meist kostenlos). Jede Komponente soll eigentlich folgende Anforderungen erfüllen:
1 Unabhängigkeit – Die Komponente sollte nicht bestimmtes voraussetzen um funktionsfähig zu sein (z.B.: eine bestimmte Position)
2 Stabilität – Die Komponente muss die Zuweisung von fehlerhaften Werten verkraften z.B.: das zuweisen von falschen Eigenschaften(Propertys)
3 Kapselung – Von einer Komponente sollte nur das sichtbar sein was wirklich gebraut wird

Zum Vergleich zum normalen Programmieren wird es jetzt um einiges schwieriger, weil man normalerweise mit solchen Problemen gar nicht in Kontakt kommt. Damals als Delphi herauskam war das was ganz neues mit dem Objekt-Inspektor und dem Drag&Drop Verfahren. Doch das ist beim Komponenten erstellen gar nicht zu gebrauchen.

2. Wie entwickelt man eine eigene Komponente?
Ich denke ich habe jetzt genug um den heißen Brei herum geredet. Lassen wir endlich Taten folgen! Hier die nötigen Schritte kurz aufgelistet!
-Erzeugen einer eigenen Unit für die Komponente
-Ableiten der neuen Komponente von einer alten Komponente(z.B.: TAnimate oder TLabel)
-Erweitern dieser neuen Komponente z.B.: Propertys, Eigenschaften etc.
-Schreiben einer Registrierungsfunktion(falls nötig)
Das sind die eigentlich wichtigen Schritte die Komponente kann noch komfortabler ausgestattet werden:
-Erstellen eines eigenen Symbols für diese Komponente
-Erstellen einer Hilfe Datei für diese Komponente
Das war es eigentlich nun wollen wir uns einem Beispiel widmen!!!

3. Beispiel: Neues Label
Wir wollen nun eine eigene Komponente schreiben. Das Beispiel ist nicht sehr schwer. Wir wollen einen Nachfolger des TLabel erstellen. Die Neuerung soll sein, dass die Standartschriftart anders sein soll. Also geht’s (endlich) los!
Erstell als erstes eine neue Unit indem du im Menü auf Datei/Neu klickst. Dort gehst du auf Komponente. Wer noch Delphi 1 benutz dort müsstest du eigentlich auf Datei/Neue Komponente klicken. Ich werde im weiteren Verlauf davon ausgehen, dass du Delphi 7 benutzt. Stelle alles nach deinen Wünschen ein. Als Vorfahren Typ solltest du TLabel nehmen. Wir taufen unsere Komponente eine TNewLabel. Am beste mit dem ’T’ Das ist Tradition! Danach wird ein Quelltext erstellt, der sollte ungefähr so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
Unit Animate1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls;

type
  TAnimate1 = class(TAnimate)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TAnimate1]);
end;

end.


Auf die Procedure Register kommen wir später noch zu sprechen. Jetzt erweitern wir den Quelltext, der den Unterschied zwischen TLabel und TNewLabel schaffen soll:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:

public
    { Public-Deklarationen }  
     constructor Create(AOwner: TComponent); override;
published
...

... und zwischen Implentation und der Register Routine fügen wir folgenden Quelltext ein:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
constructor TNewLabel.Create(AOwner: TComponent);
begin
    inherited Create(Aowner); //die alten Eigenschaften von TLabel übernehmen
    color := clRed;            //Hintergrundfarbe Rot
    Font.Name := ‘Arial’; //Schriftart Arial. Auf jeden Fall in Anführungszeichen
    Font.Style := [fsbold]; //Schriftart: Fett
    Font.Size := 16;           //Schriftgröße 16

Das erste was hier die Routine constructor tut ist die alten Eigenschaften von TLabel aufrufen, dann werden nur noch einige Eigenschaften verändert. Die größte Arbeit wird einem abgenommen, da alles vom üblichen TLabel übernommen wird, nur die die untenstehenden Eigenschaften. Es lässt sich natürlich noch später durch den Objekt-Inspektor die Eigenschaften ändern. Wir haben nur die Standard Eigenschaften geändert.

4. Neue Komponente zur Palette hinzufügen und testen
Jetzt haben wir eine neue Komponente entwickelt, doch wenn wir unsere Unit testen bekommen wir nur ein normales Formular zu Gesicht. Damit wir sie auch testen können speichern wir sie erst ein Mal ab. Am besten mit dem Namen TNLabel.PAS . Dann schließen wir das Projekt und legen eine neue Form an. Dann gehst du im Menü auf Komponente/Komponente installieren. Wir lassen sie in ein bereits vorhandenes Package installieren. Schließlich klickst du auf den Button Durchsuchen und suchst die Datei TNLabel.PAS heraus(oder halt wie du sie genannt hast). Nach einem Klick auf OK siehst du im Hintergrund ein Fenster wo der Inhalt des aktuellen Package drin steht. Normalerweise sollte jetzt eine neue Sparte auf der Komponentenpalette erstellt worden sein. Du erinnerst dich, am Anfang konnte man es sich aussuchen, wo die Komponente auf der Palette hin soll. Jetzt klatschen wir einfach die neu erschaffene Komponente einfach aufs Formular und Tataa. Fertig!

5. Hilfedateien und Symbole für die neue Komponente erstellen
Zum Schluss will ich euch noch zeigen wie man für die Komponente eine eigene Hilfedatei oder ein eigenes Symbol editiert. Das ist eigentlich nicht weiter schwierig. Delphi bringt ja einen eigenen Bildeditor mit. Dort erstellt man einfach ein Icon. Dieses sollte 24x24 Pixel groß sein. Das Icon hat nachher die Endung DCR. Das Bild muss in dem selbem Ordner abgespeichert werden wie die Komponenten Unit. Die Datei muss dabei denselben Namen haben wie die Unit, die Grafik selber denselben wie der Komponentename.
Wenn wir beispielsweise eine Komponente haben die TNewLabel heißt die wir in der Datei TNLabel.PAS gespeichert haben so müsste die Datei wo wir die Grafik speichern TNLabel.DCR heißen. Das Symbol sollte dann TNewLabel heißen.

Hilfedateien kann man auch erstellen, doch hier gilt auch. Die sind eher optional, also nicht unbedingt Pflicht für eine gute Komponente. Für eine Hilfe Datei schreibt ihr einfach einen Text in Word oder anderen aktuellen Textverarbeitungen und speichert dieses Dokument im RTF-Format. Bitte nicht im üblichen DOC-Format. Dieses RTF Format kann dan von Delphi erst Richtig übersetzt werden. Dies tut die Datei HCW.exe, die zum Lieferumfang von Delphi gehört. Mit dem ebenfalls zum Lieferumfang gehörenden Programm KWGEN kann ein Eintrag im Schlüsselwortverzeichnis erstellt werden. Ließ dir das alles am besten in der Online-Hilfe durch!

Das war mein Tutorial. Du kannst bis jetzt leider nur Komponenten ableiten, aber ich hoffe ein weiteres Tutorial wird folgen. Dieses Tutorial soll dir viel mehr einen Anreiz geben dich mehr mit diesem Thema beschäftigen. Ich hoffe auch alles war sehr verständlich. Bitte postet eure Anregungen dann weiß ich für das nächste Mal bescheid!!!

Chris

Moderiert von user profile iconTino: Ein paar Formatierungen eingefügt.