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

1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

Embed Size (px)

Citation preview

Page 1: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

1

Delphi ( Komponenten I )

Basiert auf einer wahren Gegebenheit..

Page 2: 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.

Page 3: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

3

Modellen bestehen aus

Classen sind Teil von

Classenbibliotheken ( VCL )

Page 4: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

4

Visual Component Library Hierarchy

Page 5: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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

Page 6: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

6

Die coole IDE Palette

Page 7: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

7

Manipulation von Komponenten

Page 8: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

8

Erstellen von Komponenten

Mit Experten Manuell

Page 9: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

9

Mit Experten

Page 10: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

10

Page 11: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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.

Page 12: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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;

Page 13: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

13

Add Methode

Implementation…..TExempleEdit. IsEmpty : boolean;

beginResult : = FEmpty;

end;

Page 14: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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 ;

Page 15: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

15

Erzeugen /Löschen von Komponenten

Standarten Constructoren und Destructoren

Es sind : Create

Create( Besitzer : TComponent )

Destroy

  Free

Page 16: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

16

Beispiel (TExempleEdit)

var

a : TExempleEdit; begin

a := TExempleEdit.Create( self );a.Parent := Form1; a.Free;

end;

Page 17: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

17

Installieren/Deinstallieren von Komponenten

Page 18: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

18

Page 19: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

19

Page 20: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

20

Page 21: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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 )

Page 22: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

22

Object modelInterface

Funktionalität

Page 23: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

23

Beispiel :

ButtonX,Y : integer

Function getX : integerFunction getY :integer

Main Interface

Procedure getButtonKoord(var k : TKoord);Function IsKoordGleichNull : boolean;____________________________________IUnknown........____________________________________IInitialisierungProcedure InitialisiereModel;

Page 24: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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.

Page 25: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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.

Page 26: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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

Page 27: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

27

Erstellen

Man geht <File>, <New> ,<New Item> , <ActiveX>

Page 28: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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.

Page 29: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

29

Page 30: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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.

Page 31: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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;

Page 32: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

32

Add Property to ActiveX Control (Zeigen mit Delphi )

Um eine Property hinzufügen , geht man <Edit> , < Add to Interface >

Page 33: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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;

Page 34: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

34

Add Methode to ActiveX Control (Zeigen mit Delphi )

Eine Methode wird analog zu property hinzugefügt.

Page 35: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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

Page 36: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

36

TButton

TButtonX

FEvents

Client IEvents :OnCick

Page 37: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

37

Add Events to ActiveX Control

Page 38: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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.

Page 39: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

39

Bei einem Anwendungsmodell kanna) Funktionalität extern auslagert werden b) zusätliche Modelle extern auslagert werden

Classenmodell

ApplicationExtern

Funktionalität+

Ex. Modelle

Codeauslagerung

Page 40: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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.

Page 41: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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.

Page 42: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

42

Page 43: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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‘ ;

Page 44: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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 );

Page 45: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit

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.