1 delphi ( komponenten i ) basiert auf einer wahren gegebenheit
TRANSCRIPT
![Page 1: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/1.jpg)
1
Delphi ( Komponenten I )
Basiert auf einer wahren Gegebenheit..
![Page 2: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/3.jpg)
3
Modellen bestehen aus
Classen sind Teil von
Classenbibliotheken ( VCL )
![Page 4: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/4.jpg)
4
Visual Component Library Hierarchy
![Page 5: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/6.jpg)
6
Die coole IDE Palette
![Page 7: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/7.jpg)
7
Manipulation von Komponenten
![Page 8: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/8.jpg)
8
Erstellen von Komponenten
Mit Experten Manuell
![Page 9: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/9.jpg)
9
Mit Experten
![Page 10: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/10.jpg)
10
![Page 11: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/13.jpg)
13
Add Methode
Implementation…..TExempleEdit. IsEmpty : boolean;
beginResult : = FEmpty;
end;
![Page 14: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/17.jpg)
17
Installieren/Deinstallieren von Komponenten
![Page 18: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/18.jpg)
18
![Page 19: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/19.jpg)
19
![Page 20: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/20.jpg)
20
![Page 21: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/22.jpg)
22
Object modelInterface
Funktionalität
![Page 23: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/27.jpg)
27
Erstellen
Man geht <File>, <New> ,<New Item> , <ActiveX>
![Page 28: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/29.jpg)
29
![Page 30: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/33.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/36.jpg)
36
TButton
TButtonX
FEvents
Client IEvents :OnCick
![Page 37: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/37.jpg)
37
Add Events to ActiveX Control
![Page 38: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/38.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/39.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/40.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/41.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/42.jpg)
42
![Page 43: 1 Delphi ( Komponenten I ) Basiert auf einer wahren Gegebenheit](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/43.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/44.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062318/55204d8249795902118d4f47/html5/thumbnails/45.jpg)
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.