Building components 01/de

From Lazarus wiki
Revision as of 22:40, 4 November 2009 by Pluto (talk | contribs)
Jump to navigationJump to search

01) Einleitung

In diesem Tutorial geht es darum eine Komplett eigene Komponente zu erstellen und sie in Lazarus zu Intrigieren. Ihr werdet sehen, dass es gar nicht so schwer ist. Zu nächst die Frage was ist eine Komponente eigentlich ? Eine Komponente ist eine einfache Klasse die meistens von einer vorherigen Klasse abgeleitet wird. Diese Klasse heißt auch „Abstracte Bases Klasse“, weil sie stellt ein Standard Verhalten das für alle Komponenten gilt Verfügung. Die meisten GUI'S(Engl. Graphical User Interface), haben sogar mehrere Bases Klasse, je nach Aufgabe. Es gibt in einer GUI verschiedene Bereiche z.b. eine Sichtbare Komponente wie Beispielsweise das TMemo, oder aber auch zunächst Unsichtbare Komponenten wie ein Dialog, oder die Timer Komponenten. Lazarus unterscheidet im Prinzip grob gesehen zwei Bereiche: Eine Komponente die vom Toolkit wie z.b. GTK2 zuvergfügung gestellt wird, diese Komponenten sind dann von TWinControl abgeleitet oder aber auch Eigene Komponenten wie z.b. das Panel oder die OI-Komponente. Diese sind dann direkt von TCustomControl abgeleitet. TCustomControl spielt in diesem Kapitel ein große Rolle. Denn wir wollen eine komplett eigene Komponente entwickeln.


02) Ziel dieses Kapitels

Die Komponente wird nur eine einfache Aufgabe erfüllen, aber sie zeigt wie in Lazarus üblicherweise vorgegangen wird. Das Ziel ist es ein Eigenes Panel zu entwickeln, was im Gegensatz zum Standard Panel von Lazarus nicht nur eine Farbe hat sondern ein Farbverlauf anzeigt auf den ein Text da gestellt werden kann. Wir werden Standard Methoden und Eigenschaften von TCustomControl verwenden, außerdem werde ich Zeigen, wie diese Komponente in Lazarus Intrigiert werden kann und wie ein eigenes Icon zugewiesen werden kann. Auf einer Extra Seite gebe ich einige Tipps wie die Entwicklung beschleunigt werden kann. Es gibt eine ganze reihe Praktischer aber oft versteckter Funktionen im Code Editor(SynEdit) von Lazarus. Meine Lazarus Version lautet Version: 0.9.29 Beta, SVN-Revison: 22080M I386-linux-gtk2(beta)

03) Voraussetzungen

Da gibt es folgende: 1.Eine Funktionsfähige Lazarus-Umgebung, die jeder zeit neu erstellt werden kann. Um das zu Test: Im Menü unter Werkzeuge\Lazarus Kompilieren. Wenn das Fehler frei durchgeführt wird, kann davon ausgegangen werden, dass es keine Probleme gibt. 2.Elementare Kenntnisse in die Syntax von Object Pascal, außerdem sollte die Umgebung von Lazarus vertraut sein. Z.b. wie Kompiliere ich Programme und so weiter. 3.Erfahrung um Umgang mit der OOP sind unbedingt erforderlich

Alle drei Punkte sind nicht Teile dieses Tutorials !!! Wenn trotzdem damit angefangen wird, kann es sehr schnell zu Problemen und zu Frust führen.

04) Sonstige Hinweise

Auf eigene Verantwortung kann das Tutorial durchgearbeitet werden. Für Schäden in welcher Form auch immer bin ich nicht verantwortlich / haftbar !

05) Einige Hinweise und Tricks im Umgang mit Klassen

Hier habe ich einige Hinweise und Tricks und Tipps zusammen getragen die den Umgang mit Klassen vereinfachen soll und die Entwicklung erheblich beschleunigen sollen. Das geht meistens so das lästige Tipp Arbeit abgenommen wird.


01) Klassen Schneller Erzeugen

Um eine Klasse schneller zu erzeugen und um nicht immer die gleichen Sachen schreiben zu müssen gibt es die Code-Schablonen. Genutzt werden können sie mit STRG+J. Davor ein Wort eingeben, für Klassen z.b. classC und dann STRG+J und es wird ein Standard Header von einer Klasse erzeugt.


02) Typische Fehler vermeiden

Wenn eine Eigenschaft nicht im OI auftaucht liegt es meistens daran das sie nicht Installisiert wurde. Das tritt meistens im Zusammenhang mit Klassen auf. Beispielweise bei einer TstringList. Es empfiehlt sich auch in bei jeder Eigenschaft das Schlüsselwort Default zu nutzen. z.b. so property Test:String read fTest write fTest default „Hallo“;

Das ist allerdings nur für die RTTI relevant, trozdem sollten alle Variablen im Create mit Relevanten Werten belegt werden.


03) Methoden schneller erzeugen

Um Methoden schneller erzeugen gibt es die Funktion Quelltext vervollständigen. Über eine Tastenkombination kann sie aufgerufen werden, bei mir ist das STRG+UMSCHALT+C


04) Die Übersicht in Großen Units mit vielen Klassen und Datentypen behalten

Wer eine Unit hat mit sehr vielen Klassen und Datentypen verliert schnell die Übersicht, um das zu vermeiden gibt es in Lazarus die Funktion: Code-Explorer sie Analysiert den Code und erstellt ein Baum, um das Navigieren zu erleichtern. 05) Lösungen zu Problemen finden Da Lazarus komplett OpenSoruce ist, gibt es für sehr viele Probleme bereits Lösungen, um in Erfahrung zu bringen, wie z.b. ein OI-Editor geschrieben wird kann so vorgegangen werden: Wenn in der Komponenten-Leiste der Eintrag RTTI auftaucht kann dort der OI aufs From platziert werden. Jetzt einfach im Source-Code Editor einfach die Rechte Maustaste drücken und den ersten Menü-Eintrag auswählen: Zur Deklaration springen. Jetzt könnt ihr euch z.b. die uses Klausel anschauen. Einige Namen dürfte sofort auffallen. Eine andere Möglichkeit ist die Funktion In Dateien Suchen.

06) Los geht's

Wir erstellen uns eine neue Unit. Die Unit sollte so aussehen <delphi> unit Unit1;

{$mode objfpc}{$H+}

interface

uses

 Classes, SysUtils; 

implementation

end. </delphi> jetzt werden wir diese Unit erweitert. <delphi> unit Unit1;

{$mode objfpc}{$H+}

interface

uses

 Classes, SysUtils, Controls, Graphics; 

type

 TMyPanel = class(TCustomControl)
 private
 protected
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   procedure Paint; override;
 published
 end; // TMyPanel 

implementation

end. </delphi>

Zunächst habe ich zwei Units hinzugefügt. In der Unit Controls Steckt die Klasse TCustomControl , die wir verwenden wollen, in der Unit Graphics sind einige Sinnvolle Konstanten definiert, wie z.b. clRed oder aber auch die System Farben. Jetzt habe ich eine erste Klasse erstellt, die direkt von TCustomControl abgeleitet ist. Ich habe der Klasse den Namen TMyPanel gegeben. Das T ist nur Geschmackssache. Es hat sich in der Benutzer Gemeinde eingebürgert, vor komplexeren eigene Datentypen wie Klassen oder Record z.b. ein T zu schreiben. Meiner Meinung nach basiert das auf Historischen Gründen. Früher gab es für DOS ein GUI mit den Namen, TVsion. Dieses gibt es sogar noch heute und ist sogar in FPC enthalten. In dieser Klasse werden einige Standard Methoden überschrieben wie z.b. Create und Destroy. An dieser stelle eine kleine Übersicht über weitere Nützliche Methoden