+ All Categories
Home > Documents > 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit..

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

Date post: 06-Apr-2015
Category:
Upload: caecilie-leinenbach
View: 119 times
Download: 2 times
Share this document with a friend
45
1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit..
Transcript
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.


Recommended