1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit..

Post on 06-Apr-2015

119 views 2 download

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.