Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit.."—  Präsentation transkript:

1

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

3 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.

4 3 Modellen bestehen aus Classen sind Teil von Classenbibliotheken ( VCL )

5 4 Visual Component Library Hierarchy

6 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

7 6 Die coole IDE Palette

8 7 Manipulation von Komponenten

9 8 Erstellen von Komponenten Mit Experten Manuell

10 9 Mit Experten

11 10

12 11 Manuell unit ExempleEdit; interface uses Windows, Messages, SysUtils, Classes, Controls, StdCtrls; type TExempleEdit = class(TEdit) end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TExempleEdit]); end; end.

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

14 13 Add Methode Implementation ….. TExempleEdit. IsEmpty : boolean; begin Result : = FEmpty; end;

15 14 Add Events Wir fügen eine Messagebehandlung für : OnClick - Ereignis Const WM_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 ;

16 15 Erzeugen /Löschen von Komponenten Standarten Constructoren und Destructoren Es sind : Create Create( Besitzer : TComponent ) Destroy Free

17 16 Beispiel (TExempleEdit) var a : TExempleEdit; begin a := TExempleEdit.Create( self ); a.Parent := Form1; a.Free; end;

18 17 Installieren/Deinstallieren von Komponenten

19 18

20 19

21 20

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

23 22 Object model Interface Funktionalität

24 23 Beispiel : Button X,Y : integer Function getX : integer Function getY :integer Main Interface Procedure getButtonKoord(var k : TKoord); Function IsKoordGleichNull : boolean; ____________________________________ IUnknown.... ____________________________________ IInitialisierung Procedure InitialisiereModel;

25 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.

26 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.

27 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

28 27 Erstellen Man geht,,,

29 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.

30 29

31 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.

32 31 Add Property ( Bild ) z.B.: property Element : integer read FElement; Button X,Y : integer FElement : integer; Property Element : integer read FElement; Function getX : integer Function getY :integer Main Interface Procedure getButtonKoord(var k : TKoord); Funktion IsKoordGleichNull : boolean; Function Get_Element : integer; Procedure Set_Element(var Value); ____________________________________ IUnknown.... ____________________________________ IInitialisierung Procedure InitialisiereModel;

33 32 Add Property to ActiveX Control (Zeigen mit Delphi ) Um eine Property hinzufügen, geht man,

34 33 Add Methode ( Bild ) Button X,Y : integer Function getX : integer Function getY :integer Main Interface Procedure getButtonKoord(var k : TKoord); Function IsKoordGleichNull : boolean; Procedure MyProcedure; ____________________________________ IUnknown.... ____________________________________ IInitialisierung Procedure InitialisiereModel;

35 34 Add Methode to ActiveX Control (Zeigen mit Delphi ) Eine Methode wird analog zu property hinzugefügt.

36 35 Add Event ( Bild ) Button X,Y : integer FOnClick : TEvent; Property OnClick : Tevent... Function getX : integer Function 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.... ____________________________________ IInitialisierung Procedure InitialisiereModel; Client

37 36 TButton TButtonX FEvents Client IEvents : OnCick

38 37 Add Events to ActiveX Control

39 38 Installieren / Deinstallieren Die Felder sind genauso wie bei Delphi Komponenten und zeigen Informationen zu den aufgelisteten ActiveX Controls. Weiter mit ActiveX Controls haben *.OCX Erweiterung. Wenn die Datei gefunden ist und geöffnet, muss jetzt nur auf gedrückt werden und der Package neu kompiliert werden. Jetzt können wir unsere Komponente in der Palette ‘ ActiveX ’ bewundern.

40 39 Bei einem Anwendungsmodell kann a) Funktionalität extern auslagert werden b) zusätliche Modelle extern auslagert werden Classenmodell Application Extern Funktionalität + Ex. Modelle Codeauslagerung

41 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.

42 41 library Exemple; uses Unit1, Unit2 ; Var m : TEdit ; function myFunc : TEdit; stdcall Begin result := m; end; exports myFunc; index 1 name GetControlAdress; begin m := TEdit.Create( self ); end.

43 42

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

45 44 Dynamisch Beim dynamischen Einbinden braucht man zus ä tliche Funktionen ( LoadLibrary,GetProcAddress, FreeLibrary ). z.B var Handle : integer; Func : function : TEdit ; a : TEdit; Handle := LoadLibrary ( ‚ Exemple.DLL ‘ ); @Func := GetProcAddress( Handle, ‘ GetControlAddress ‘ ); @a := Func;// Gebrauch FreeLibrary( Handle );

46 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.


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

Ähnliche Präsentationen


Google-Anzeigen