Delphi __ Kompendium __ Roz13.pdf
(
1951 KB
)
Pobierz
Delphi :: Kompendium :: Roz...
Delphi :: Kompendium :: Rozdział 13 - 4programmers.net http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_13
Logowanie | Rejestracja | Forum | Pomoc | Reklama | Szukaj
Strona główna :: Delphi :: Kompendium
Rozdział 13
Edytuj Historia
Delphi
Artykuły
Kompendium
Gotowce
FAQ
.NET
Turbo Pascal
FAQ
PHP
FAQ
Java
FAQ
C/C++
Artykuły
FAQ
C#
Wprowadzenie
Assembler
FAQ
(X)HTML
CSS
JavaScript
Z pogranicza
Algorytmy
WIĘCEJ
»
COM i ActiveX
W tym rozdziale zajmiemy się dość specyficznym aspektem programowania, stworzonym przez firmę Microsoft
i nadal z nią kojarzonym ? projektowaniem kontrolek COM i ActiveX. Dowiesz się, do czego służą kontrolki
ActiveX, jak je tworzyć i jak ich używać.
Spis treści
1 Czym jest COM?
1.1 Kontrolka w rozumieniu COM
1.2 Odrobinę historii
2 Tworzenie obiektów COM
3 Metody i właściwości
3.1 Dodawanie metod
3.1.1 Parametry nowej metody
3.1.2 Wartość zwrotna funkcji
3.2 Dodawanie właściwości
4 Kod źródłowy kontrolki
5 Budowa i rejestracja kontrolki
6 Wykorzystanie obiektu COM
7 Interfejsy
7.1 GUID
8 ActiveX
9 Import kontrolek ActiveX
9.1 Wykorzystanie kontrolki TVText
10 Tworzenie kontrolek ActiveX
11 Przykład: wyświetlanie napisów do filmu
11.1 Tworzenie interfejsu COM
11.2 Tworzenie kontrolki ActiveX
11.2.1 Strona wizualna
11.2.2 Kod źródłowy kontrolki
11.3 Budowa i rejestracja
12 ActiveX w Internecie
12.1 Względy bezpieczeństwa
12.2 Przykładowa kontrolka
12.2.1 Tworzenie kontrolki ActiveX
12.2.2 Publikowanie kontrolki
13 Podsumowanie
Delphi
C/C++
Turbo Pascal
Assembler
PHP
Programy
Dokumentacja
Kursy
Komponenty
WIĘCEJ
»
Czym jest COM?
Rozwinięciem angielskiego skrótu COM jest nazwa
Component Object Model
(obiektowy
model komponentów). Jest to specyfikacja firmy Microsoft, która w założeniu dotyczy
tworzenia obiektów wielokrotnego użytku, niezależnie od języka programowania.
Aby zrozumieć ActiveX, musisz poznać COM ? postaram się zwięźle Ci to wytłumaczyć. Otóż firma Microsoft
stworzyła model obiektów, które wykorzystywane mogą być w każdym środowisku programistycznym Win32.
Wynikiem powstania obiektu COM jest kontrolka ? plik z rozszerzeniem .ocx. Kontrolka taka może być
wykorzystana zarówno w Delphi, jak i Visual C++, C++ Builder czy Visual Basic.
Na razie obiekty COM są jedynie obiektami działającymi w różnych środowiskach Windows ? niemożliwe jest
wykorzystanie ich poza tym systemem.
Kontrolka w rozumieniu COM
W tym rozdziale będę używał słowa ?kontrolka? w znaczeniu obiektu COM. Do tej pory to słowo kojarzyło Ci się
zapewne z komponentem Delphi. Można powiedzieć, że obiekty COM są takim uniwersalnym komponentem,
podobnym do biblioteki DLL. Raz utworzona kontrolka może być wykorzystywana wiele razy, przez wielu
programistów oraz w różnych środowiskach programowania. Jeżeli ktoś już napisał kontrolkę spełniającą daną
funkcję, to po co wyważać otwarte drzwi i tworzyć jeszcze raz to samo? Przykładem może być przeglądarka
WWW. Napisanie programu analizującego kod HTML jest niezwykle czasochłonnym i żmudnym zadaniem.
Niekiedy jednak w naszym programie konieczne staje się wyświetlenie jakiegoś dokumentu w formie strony
WWW. Dzięki technologii COM i ActiveX (o ActiveX powiemy nieco później) możemy zaimportować
udostępnione przez twórców przeglądarki obiekty COM i wykorzystać je w programie jako dodatkowy
komponent.
Odrobinę historii
COM jest technologią stosunkowo nową, bo powstałą kilka lat temu. Wprowadzenie jej miało na celu
stworzenie jednolitego standardu komunikacji, tak aby np. (by jeszcze raz posłużyć się powyższym
przykładem) programiści mogli korzystać z możliwości przeglądania stron WWW w swoich aplikacjach. Firma
Microsoft wyszła naprzeciw temu zadaniu i utworzyła moduł obiektów (COM), który umożliwia udostępnianie
innym aplikacjom swoich metod.
W przypadku Delphi zaimportowana kontrolka COM staje się jakby komponentem, umieszczonym na palecie
komponentów. Wówczas w dość prosty sposób można skorzystać z zalet takiego obiektu, wywołując zawarte w
nim metody.
1 z 19
2009-03-14 15:44
Delphi :: Kompendium :: Rozdział 13 - 4programmers.net http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_13
Tworzenie obiektów COM
RSS
|
Forum
|
Pastebin
|
Regulamin
|
Pomoc
|
Usuń
cookies
|
Prawa autorskie
|
Kontakt
|
Reklama
1. Z menu
File
wybierz
New/New/Other
. Pojawi się Repozytorium. Zaznacz zakładkę
ActiveX
(rysunek 13.1).
Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 3.2581 sek. (zapytań SQL:
12)
Rysunek 13.1. Zakładka ActiveX Repozytoriumv
2. Zaznacz w tym oknie ikonę
ActiveX Library
i naciśnij OK. W tym momencie zostanie utworzony pusty
projekt.
3. Z menu
File
wybierz polecenie
Save
. Wskaż miejsce, gdzie Delphi ma zapisać plik.
Utworzyliśmy właśnie pusty projekt, ale na razie do niczego nam to nie służy. Utworzenie właściwego obiektu
COM też jest proste ? polega na wybraniu ikony COM Object.
Ponownie wybierz polecenie
File/New/Other
, a w zakładce
ActiveX
tym razem wybierz pozycję COM Object.
Delphi wyświetli okno kreatora obiektów COM, widoczne na rysunku 13.2.
Rysunek 13.2. Kreator obiektów COM
W polu
Class Name
(nazwa kontrolki) wpisz
XorCode
. Pole
Description
służy do wstawienia krótkiego opisu
obiektu. Możesz wpisać np.
Kodowanie metodą XOR
. Klikając przycisk OK, zamknij okno.
Obiekt COM został utworzony. Z menu
File
wybierz
Save All
i wpisz nazwę modułu.
Na pierwszym planie znajduje się okno edytora biblioteki typu (rysunek 13.3). Za pomocą tego edytora
sterujemy obiektem COM. Wszystkie zmiany dokonane w tym edytorze znajdą odzwierciedlenie w module, lecz
tym zajmiemy się nieco później.
2 z 19
2009-03-14 15:44
Delphi :: Kompendium :: Rozdział 13 - 4programmers.net http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_13
Rysunek 13.3. Okno edytora biblioteki typu
Metody i właściwości
Tak, jak zwykły komponent posiada różne metody i właściwości, za pomocą których możemy ?sterować? ich
zachowaniem, tak metody są obecne również w kontrolce COM.
Dodawanie metod
Dodawanie metod oraz właściwości jest czynnością w miarę prostą. Zadanie opiera się na umiejętnym
wykorzystaniu edytora (rysunek 13.4). W gałęzi po lewej znajduje się pozycja
IXorCode
? kliknij ją prawym
klawiszem myszy i z menu wybierz
New/Method
.
Rysunek 13.4. Dodawanie nowej metody
Po wybraniu pozycji
Method
będziesz musiał podać nazwę naszej metody ? wpisz słowo
Code
, co spowoduje
pojawienie się nowej gałęzi. Operowanie na nowej metodzie odbywa się poprzez zakładki, które pojawią się po
prawej stronie (rysunek 13.5).
Rysunek 13.5. Zakładki służące do zmiany opcji metody
3 z 19
2009-03-14 15:44
Delphi :: Kompendium :: Rozdział 13 - 4programmers.net http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_13
Parametry nowej metody
Ustalenia parametrów naszej funkcji oraz typu wartości przez nią zwracanej można dokonać w zakładce
Parameters
. Nasza kontrolka będzie służyła do kodowania tekstu metodą XOR (metodę tę opiszę nieco później)
? a zatem będzie nam potrzebna tylko jedna metoda, która nie posiada parametrów. Warto jednak wiedzieć, jak
się tworzy parametry.
Parametry zaznaczonej metody prezentowane są w zakładce
Parameters
w ramce
Parameters
(rysunek 13.6).
Rysunek 13.6. Ustawianie parametru dla metody
W pierwszej kolumnie należy wpisać nazwę parametru, a w kolejnej jego typ; natomiast w trzeciej możemy
określić, czy parametr ma być wejściowy czy też wyjściowy. Klikając przycisk
Add
, możemy dodać kolejny
parametr.
Wartość zwrotna funkcji
W naszym przykładzie nie interesują nas żadne parametry funkcji, gdyż domyślnie nie są nam potrzebne.
Jedyna ważna kwestia to wartość zwrotna funkcji, którą możemy ustawić za pomocą listy rozwijalnej
Return
Type
. Rozwiń ową listę i wybierz
lpstr
, co oznacza wartość typu
PChar
.
Zapisz projekt, aby zmiany dokonane w edytorze zostały odzwierciedlone w kodzie.
System Windows był pisany w języku C, stąd na liście rozwijalnej nie można dostrzec
żadnych typów charakterystycznych dla Object Pascala. W języku C nie ma takiego typu jak
PChar
? można korzystać jedynie z
lpstr
.
Dodawanie właściwości
W naszej przykładowej kontrolce skorzystamy przy pisaniu procedury kodującej z dwóch zmiennych
(właściwości) ? kodowanego łańcucha oraz hasła. Musimy mieć więc dwie właściwości.
Kliknij prawym przyciskiem myszy pozycję
IXorCode
i (podobnie jak w przypadku tworzenia właściwości)
wybierz właściwość
New/Properties
. Stwórz w ten sposób dwie właściwości ?
lpString
oraz
lpPassword
. Nie
przejmuj się, że zostały stworzone tym samym po dwie gałęzie dla każdej właściwości. Domyślnie zakłada się
bowiem, że jedna z nich potrzebna jest do zapisywania danych do właściwości, a druga do ich odczytu. My
jednak potrzebujemy właściwości ?tylko do zapisu?, więc jedną możemy bez obaw usunąć. Po zaznaczeniu
konkretnej pozycji na zakładce
Attributes
znajdzie się pole
Invoke Kind
, a w nim wartość
Property Put
albo
Property Get
. Możesz usunąć klucze, w których jest
Property Get
, klikając prawym przyciskiem myszy element,
który chcesz skasować, a następnie wybierając polecenie
Delete
.
Kolejnym krokiem jest ustawienie odpowiednich wartości.
Zaznacz pozycję
lpString
.
2.
Odszukaj pozycję
Return Type
i z listy wybierz
void
.
4.
Następnie ustaw parametr ? nadaj mu typ
LPSTR
.
To samo zrób z kluczem
lpPassword
.
Dzięki temu w kontrolce mamy dwie właściwości, które służyć będą tylko do zapisu. Napisałem ?właściwości?,
ale w rzeczywistości w kodzie programu widnieją dwie procedury:
procedure
TXorCode.
Set_lpString
(
Value:
PChar
)
;
begin
end
;
procedure
TXorCode.
Set_lpPassword
(
Value:
PChar
)
;
begin
end
;
Cóż, taka jest zasada tworzenia kontrolek COM. Użytkownik wykorzystujący ową kontrolkę, chcąc nadać
właściwości nową wartość, w rzeczywistości wywołuje np. procedurę
Set_lpPassword
, przekazując wartość w
parametrze
Value
.
Kod źródłowy kontrolki
Zmian dokonujemy za pośrednictwem edytora, który w tle generuje kod źródłowy dla kontrolki. Oprócz
standardowego kodu źródłowego kontrolki Delphi tworzy także plik z tzw. interfejsami. Plik taki można łatwo
rozpoznać po końcówce _TLB, dodanej do nazwy pliku. Zajrzyj do katalogu, w którym zapisałeś projekt ? na
4 z 19
2009-03-14 15:44
1.
3.
Kliknij zakładkę
Parameters
.
Delphi :: Kompendium :: Rozdział 13 - 4programmers.net http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_13
pewno znajduje się tam plik
XorCode_TLB.pas
lub inny (jeżeli nadałeś inną nazwę). W listingu 13.1
zaprezentowałem kod tego pliku.
Listing 13.1. Kod źródłowy biblioteki
unit
XorCode_TLB;
// ************************************************************************ //
// WARNING
// -------
// The types declared in this file were generated from data read from a
// Type Library. If this type library is explicitly or indirectly (via
// another type library referring to this type library) re-imported, or the
// 'Refresh' command of the Type Library Editor activated while editing the
// Type Library, the contents of this file will be regenerated and all
// manual modifications will be lost.
// ************************************************************************ //
// PASTLWTR : 1.2
// File generated on 03-02-04 15:22:45 from Type Library described below.
// ************************************************************************ //
// Type Lib: C:\Moje dokumenty\Pliki textowe\delphi_kompendium_programisty\listingi\13\XorCode
\XorCode.tlb (1)
// LIBID: {356B1880-384C-11D7-A2DC-00E04CE92EC6}
// LCID: 0
// Helpfile:
// HelpString: XorCode Library
// DepndLst:
// (1) v2.0 stdole, (C:\WINDOWS\SYSTEM\STDOLE2.TLB)
// ************************************************************************ //
{$TYPEDADDRESS OFF}
// Unit must be compiled without type-checked pointers.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface
uses
Windows, ActiveX, Classes, Graphics, StdVCL, Variants;
// *********************************************************************//
// GUIDS declared in the TypeLibrary. Following prefixes are used:
// Type Libraries : LIBID_xxxx
// CoClasses : CLASS_xxxx
// DISPInterfaces : DIID_xxxx
// Non-DISP interfaces: IID_xxxx
// *********************************************************************//
const
// TypeLibrary Major and minor versions
XorCodeMajorVersion =
1
;
XorCodeMinorVersion =
0
;
LIBID_XorCode: TGUID =
'{356B1880-384C-11D7-A2DC-00E04CE92EC6}'
;
IID_IXorCode: TGUID =
'{356B1881-384C-11D7-A2DC-00E04CE92EC6}'
;
CLASS_XorCode: TGUID =
'{356B1883-384C-11D7-A2DC-00E04CE92EC6}'
;
type
// *********************************************************************//
// Forward declaration of types defined in TypeLibrary
// *********************************************************************//
IXorCode =
interface
;
// *********************************************************************//
// Declaration of CoClasses defined in Type Library
// (NOTE: Here we map each CoClass to its Default Interface)
// *********************************************************************//
XorCode = IXorCode;
// *********************************************************************//
// Interface: IXorCode
// Flags: (256) OleAutomation
// GUID: {356B1881-384C-11D7-A2DC-00E04CE92EC6}
// *********************************************************************//
IXorCode =
interface
(
IUnknown
)
[
'{356B1881-384C-11D7-A2DC-00E04CE92EC6}'
]
function
Code:
PChar
;
stdcall
;
procedure
Set_lpString
(
Value:
PChar
)
;
stdcall
;
procedure
Set_lpPassword
(
Value:
PChar
)
;
stdcall
;
end
;
// *********************************************************************//
// The Class CoXorCode provides a Create and CreateRemote method to
// create instances of the default interface IXorCode exposed by
// the CoClass XorCode. The functions are intended to be used by
// clients wishing to automate the CoClass objects exposed by the
// server of this typelibrary.
// *********************************************************************//
CoXorCode =
class
class
function
Create: IXorCode;
class
function
CreateRemote
(
const
MachineName:
string
)
: IXorCode;
end
;
implementation
uses
ComObj;
class
function
CoXorCode.
Create
: IXorCode;
begin
Result
:= CreateComObject
(
CLASS_XorCode
)
as
IXorCode;
end
;
class
function
CoXorCode.
CreateRemote
(
const
MachineName:
string
)
: IXorCode;
begin
Result
:= CreateRemoteComObject
(
MachineName, CLASS_XorCode
)
as
IXorCode;
5 z 19
2009-03-14 15:44
Plik z chomika:
Wiewioor
Inne pliki z tego folderu:
Delphi __ Kompendium __ Roz1.pdf
(1299 KB)
Delphi __ Kompendium __ Roz10.pdf
(777 KB)
Delphi __ Kompendium __ Roz11.pdf
(1764 KB)
Delphi __ Kompendium __ Roz12.pdf
(834 KB)
Delphi __ Kompendium __ Roz13.pdf
(1951 KB)
Inne foldery tego chomika:
■ePub
A.B Strugaccy
Ann Rice - Śpiąca królewna
Ćwiek Jakub
Ebooki-EPUB-PL-MegaPack
Zgłoś jeśli
naruszono regulamin