1 delphi ( komponenten i ) basiert auf einer wahren gegebenheit
TRANSCRIPT
1
Delphi ( Komponenten I )
Basiert auf einer wahren Gegebenheit..
2
Allgemein OOP Konzept besteht darin , ein
Modell zu einer gegeben Situation zu erstellen und es zur Realisierung von einem bestimmten Funktionalität zu nutzen.
3
Modellen bestehen aus
Classen sind Teil von
Classenbibliotheken ( VCL )
4
Visual Component Library Hierarchy
5
TComponent// TComponent ist eine der witzigsten Classen für uns.
• RTTI• Standarte Konstruktoren / Destruktoren• Message Dispathing• Arbeit mit Streams• Regiestrierung in IDE Delphi bei der
Komponentpalette
6
Die coole IDE Palette
7
Manipulation von Komponenten
8
Erstellen von Komponenten
Mit Experten Manuell
9
Mit Experten
10
11
Manuellunit ExempleEdit;interfaceuses Windows, Messages, SysUtils, Classes, Controls, StdCtrls;type TExempleEdit = class(TEdit) end;procedure Register;implementationprocedure Register;begin RegisterComponents('Samples', [TExempleEdit]);end;end.
12
Add Property
Type TExempleEdit = class(TEdit)
protected FEmpty : boolean;
FOnClick : TEvent;
function IsEmpty : boolean; published property Empty :boolean read IsEmpty ;
property OnClick : TEvent read FOnClick write FOnClick;
end;
13
Add Methode
Implementation…..TExempleEdit. IsEmpty : boolean;
beginResult : = FEmpty;
end;
14
Add EventsWir fügen eine Messagebehandlung für : OnClick - EreignisConstWM_BUTTONCLICK = WM_APP + 100;Type TNotifyEvent = procedure of object;
TExempleEdit = class(TEdit)protected FOnClick : TNotifyEvent; FEmpty : boolean; function IsEmpty : boolean; procedure Dispath(var Message : TMessage); procedure WMButtonClick(var Message : TMessage); message
WM_BUTTONCLICK procedure Click;
published property OnClick : TNotifyEvent read FOnClick write FOnClick; property Empty :boolean read IsEmpty ; end;
Procedure Form1.Button1Click ;
15
Erzeugen /Löschen von Komponenten
Standarten Constructoren und Destructoren
Es sind : Create
Create( Besitzer : TComponent )
Destroy
Free
16
Beispiel (TExempleEdit)
var
a : TExempleEdit; begin
a := TExempleEdit.Create( self );a.Parent := Form1; a.Free;
end;
17
Installieren/Deinstallieren von Komponenten
18
19
20
21
Common Object Model ( COM )
Es ist sinnvoll , Modellen wie Classen
einmal programmiert gehabt zu haben und sie bis auf Weiteres zu nutzen.
( V.I. Lenin )
22
Object modelInterface
Funktionalität
23
Beispiel :
ButtonX,Y : integer
Function getX : integerFunction getY :integer
Main Interface
Procedure getButtonKoord(var k : TKoord);Function IsKoordGleichNull : boolean;____________________________________IUnknown........____________________________________IInitialisierungProcedure InitialisiereModel;
24
Allgemeine Informationen zu Modellen
• Ein Model hat immer einen Interface , der auch aus weiteren Interfaces bestehen kann . Es gibt z.B standarte Interfaces wie IUnknown , die in jedem Interface enthalten sein sollen.
• Ein Interface besteht nur aus Methoden , die mit Hilfe von Objekten des Modells implementiert werden.
• Man sammelt Modellen nicht in Bibliotheken , sondern jedes Interface und jede Modelclasse kriegt einen einzigartiges ID ( GUID , CLSID ).
• Modellen in Programmen tretten oft als Server auf und Programmen als Clients.
25
ActiveX ( allgemein )
• ActiveX basiert auf COM Standart von Microsoft.
Im Unterschied zu COM kriegt man bei ActiveX Komponenten die standarten Interfaces schon implementiert und man muss sich nur um den wichtigen Teil kümmern.
• ActiveX Komponenten laufen wie alle COMs unter mehreren Sprachen ( Visual Basic, Visual C++ , Java , Delphi .. ) und Plattformen.
• ActiveX Komponenten können in HTML eingebunden werden.
26
VCL to ActiveX
ActiveX ist ein Standart und man kann nur eine von TWinControl abgeleitete VCL Komponente ( z.B. TEdit ) in ihn umwandeln.
ActiveX Komponenten kann man nur als DLL nutzen , es wird gleich bei der Erstellung eine DLL angelegt mit dem Komponenten drin.
VCL
ActiveX Hülle
27
Erstellen
Man geht <File>, <New> ,<New Item> , <ActiveX>
28
• Name der Basisclasse• Name der zu erzeugenden Classe• Unitsname• Gibt an , auf welche Art und Weise wird die Komponente
als Server zu ihr geschickte Nachrichten bearbeiten. • Ob der ActiveX Control licensiert werden soll• Ob die Versionsinformationen eingebunden werden müssen • Ob ein Infofenster erscheinen soll , wenn man die Komponente anklickt.
29
30
Die Interface Methoden greifen auf die eingebetten Objekte mittels Instancen :
FDelphiControl : TEdit; // VCL Control Instance
FEvents : ItestEditXEvents; // Beschreibt den Events Interface für Clients , die die Komponente nacher nutzen .
Da werden die deffinierten Events gespeichert.
31
Add Property ( Bild )
z.B.: property Element : integer read FElement;
ButtonX,Y : integerFElement : integer; Property Element : integer read FElement;Function getX : integerFunction getY :integer
Main Interface
Procedure getButtonKoord(var k : TKoord);Funktion IsKoordGleichNull : boolean;
Function Get_Element : integer;Procedure Set_Element(var Value);____________________________________IUnknown........____________________________________IInitialisierungProcedure InitialisiereModel;
32
Add Property to ActiveX Control (Zeigen mit Delphi )
Um eine Property hinzufügen , geht man <Edit> , < Add to Interface >
33
Add Methode ( Bild )
ButtonX,Y : integer
Function getX : integerFunction getY :integer
Main Interface
Procedure getButtonKoord(var k : TKoord);Function IsKoordGleichNull : boolean;
Procedure MyProcedure;____________________________________IUnknown........____________________________________IInitialisierungProcedure InitialisiereModel;
34
Add Methode to ActiveX Control (Zeigen mit Delphi )
Eine Methode wird analog zu property hinzugefügt.
35
Add Event ( Bild )
ButtonX,Y : integerFOnClick : TEvent;
Property OnClick : Tevent ... Function getX : integerFunction getY :integer
Main Interface
Procedure getButtonKoord(var k : TKoord);Function IsKoordGleichNull : boolean;Function Get_Color : integer;Procedure Set_Color(var Value);____________________________________FEvents
Procedure OnClick;____________________________________IUnknown........____________________________________IInitialisierungProcedure InitialisiereModel;
Client
36
TButton
TButtonX
FEvents
Client IEvents :OnCick
37
Add Events to ActiveX Control
38
Installieren / Deinstallieren
Die Felder sind genauso wie bei Delphi Komponenten und zeigen Informationen zu den aufgelisteten ActiveX Controls .
Weiter mit <Add>
ActiveX Controls haben *.OCX Erweiterung.
Wenn die Datei gefunden ist und geöffnet , muss jetzt nur auf <Install>
gedrückt werden und derPackage neu kompiliert werden.
Jetzt können wir unsere Komponente in
der Palette ‘ ActiveX ’ bewundern.
39
Bei einem Anwendungsmodell kanna) Funktionalität extern auslagert werden b) zusätliche Modelle extern auslagert werden
Classenmodell
ApplicationExtern
Funktionalität+
Ex. Modelle
Codeauslagerung
40
Dynamic Link Library
• DLL stellt eine Möglichkeit dar , extern Funktionalität und Modellen ( z.B. : ActiveX Komponenten )
auszulagern , um sie zur Laufzeit zu nutzen.• Delphi-Programme können DLLs aufrufen, die mit
anderen Programmiersprachen geschrieben wurden. Windows-Anwendungen, die in anderen Sprachen geschrieben wurden, können auch unter Delphi programmierte DLLs aufrufen. Außerdem können mehrere Programme eine DLL gleichzeitig nutzen.
• DLLs werden separat compiliert und sind ausführbar.
41
library Exemple; uses Unit1 , Unit2 ;
Var m : TEdit ;
function myFunc : TEdit; stdcallBegin
result := m; end; exports myFunc; index 1 name GetControlAdress;begin
m := TEdit.Create( self );end.
42
43
Einbindungsmöglichkeiten
Ein DLL kann man dynamisch ( wenn es braucht ) und statisch ( beim Start des Programms ) laden.
Statisch
z.B.:
Var k : TEdit;
@k := GetControlAddress ; external ‚ Exemple.dll‘ ;
44
Dynamisch
Beim dynamischen Einbinden braucht man zusätliche Funktionen ( LoadLibrary ,GetProcAddress , FreeLibrary ).
z.Bvar
Handle : integer;Func : function : TEdit ; a : TEdit;
Handle := LoadLibrary ( ‚ Exemple.DLL‘ ); @Func := GetProcAddress( Handle ,‘ GetControlAddress ‘ );@a := Func; // Gebrauch FreeLibrary( Handle );
45
Exeptions , Laufzeitfehler bei DLLs
Exeptions und Laufzeitfehler in DLLs werden letzendlich in die Anwendung geleitet und wenn da keine Exeptionsbehandlung implementiert ist , oooo mein Gott …. die böse Nachricht kriegt das Betrebssystem und da könnte es passieren , dass es nicht mehr leben woll.