ZAAWANSOWANEPROGRAMOWANIE
W (PAKIECIE) DELPHIAndrzej Marciniak
Prezentacja multimedialna przygotowana za pomoc¹ systemu Corel® Presentations 11Copyright © 2004 - 2010 by Andrzej Marciniak
DEL-8(1 z 46)
DEL420
P elementy jêzyka Delphi Pascal zwi¹zane z grafik¹(cd.)< typ TColor< komponent Shape (typ TShape)< komponent Image (typ TImage)< komponent Chart (typ TChart)
P formaty zbiorów z rysunkami (mapy bitowe,piktogramy, metazbiory)
P komponenty dotycz¹ce obs³ugi multimediów< komponent Animate (typ TAnimate)< komponent MediaPlayer (typ TMediaPlayer)
P rysowanie wykresów funkcji
Na poprzednim wyk³adzie ...
DEL-8(2 z 46)
P tworzenie komponentów VCL i ActiveX oraz ichwykorzystanie< konstrukcja komponentu VCL< testowanie komponentu VCL< konstrukcja komponentu ActiveX< testowanie komponentu ActiveX
Na tym wyk³adzie ...
DEL-8(3 z 46)
Tworzenie komponentówVCL i ActiveX
Kierowca nie musi znaæ budowy skrzyni biegów– wystarczy, ¿e potrafi j¹ obs³ugiwaæ.
Komponenty „zdejmuj¹” z programisty ciê¿arzajmowania siê szczegó³ami. Wystarczy je u¿ywaæ,a nie zastanawiaæ siê nad tym, jak s¹ zbudowane.
Szczegó³ami zajmujemy siê na etapie projektowanialub modyfikowania komponentów.
DEL-8(4 z 46)
P wielokrotne wykorzystanie tego samego kodu,
P modyfikacja istniej¹cych komponentów (poniewa¿ ka¿dykomponent jest obiektem, wiêc opieraj¹c siê na nim mo¿emyutworzyæ nowy komponent, który bêdzie dziedziczy³ jegow³asnoœci),
P udostêpnianie gotowych komponentów (mo¿liwoœæ nabywaniadodatkowych komponentów od niezale¿nego dostawcy lubkomercyjna dystrybucja w³asnych komponentów w postaciskompilowanej – bez udostêpniania kodu Ÿród³owego).
Tworzenie komponentówVCL i ActiveX
Powody znajomoœci sposobu tworzenia komponentów:
Uwaga: W œrodowisku Delphi komponenty ActiveX tworzy siê z komponentów VCL.
DEL-8(5 z 46)
P po dodaniu komponentu do œrodowiska Delphi (bêdziedalej) jego piktogram jest poszukiwany w zbiorze o takiej samej nazwie, jak nazwa zbioru z modu³em(.PAS) zawieraj¹cym opis komponentu, ale o rozszerzeniu nazwy DCR (skr. ang. Delphi ComponentResource), – zbiór .DCR jest zwyk³ym zbiorem z zasobem (.RES), tyle ¿e o zmienionym rozszerzeniu nazwy,
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
W palecie komponentów tworzony komponent powinien byæreprezentowany za pomoc¹ jakiegoœ piktogramu.
Zasady wyœwietlania piktogramów komponentów:
DEL-8(6 z 46)
P jeœli taki zbiór nie zostanie odnaleziony, to komponentbêdzie reprezentowany w palecie przez piktogramdomyœlny (w zale¿noœci od typu przodka tworzonegokomponentu piktogram ten mo¿e byæ ró¿ny).
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
W palecie komponentów tworzony komponent powinien byæreprezentowany za pomoc¹ jakiegoœ piktogramu.
Zasady wyœwietlania piktogramów komponentów:
DEL-8(7 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
W zbiorze .DCR piktogram jest pamiêtany jako 16- lub 256-kolorowa mapa bitowa o rozmiarze 24×24 piksele(zaleca siê stosowaæ 16-kolorowe mapy bitowe).
Piktogram komponentu mo¿na przygotowaæ za pomoc¹programu Image Editor (program narzêdziowy dostêpnyw œrodowisku Delphi).
W tym celu nale¿y:
P zainicjowaæ polecenie Image Editor w opcji Tools menuœrodowiska Delphi, co spowoduje wyœwietlenie na ekranieg³ównego okienka wspomnianego programu (okienko to ma tak¹ sam¹ nazwê – Image Editor),
DEL-8(8 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
W tym celu nale¿y:Pw menu okienka Image Editor zainicjowaæ polecenie
File6New6Component Resource File (spowoduje tozmianê opcji g³ównego menu okienka),
tu jest to polecenie
DEL-8(9 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
P zainicjowaæ polecenie Resource6New6Bitmap, któreotworzy okienko dialogowe Bitmap Properties,
tu jest to polecenie
W tym celu nale¿y:
DEL-8(10 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
Pw grupie Size okienka Bitmap Properties ustaliæ wysokoœæ i szerokoœæ na 24 piksele (przez wpisanie odpowiednichwartoœci), a w grupie Colors w³¹czyæ parametr ustalaj¹cyliczbê kolorów na 16, po czym wybraæ przycisk OK,
ustaliæ rozmiarna 24×24 piksele
W tym celu nale¿y:
DEL-8(11 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
Pw okienku Untitled1.dcr usytuowaæ kursor myszki nanapisie Bitmap1 i nacisn¹æ podwójnie klawisz myszki, co spowoduje otwarcie okienka do wykonania rysunkupiktogramu (utworzenia mapy bitowej),
„klikn¹æ”podwójnie
W tym celu nale¿y:
DEL-8(12 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
przyk³adowy rysunekpiktogramu komponentu
w opcji Views¹ polecenia
Zoom Ini Zoom Out
DEL-8(13 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
Ppo wykonaniu rysunku w okienku Untitled1.dcr zmieniænazwê z domyœlnej Bitamp1 na np. TStaticTextClock (tak samo bêdzie nazywa³a siê klasa definiuj¹cakomponent),
zmiana nazwy rysunku
W tym celu nale¿y:
DEL-8(14 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
W tym celu nale¿y:
Pzapisaæ zasób w zbiorze STATICTEXTCLOCK przezzainicjowanie polecenia File6Save As i wpisanieodpowiedniej nazwy w podokienku Save Untitled1.dcr As(tytu³ zale¿y od wersji œrodowiska Windows)wyœwietlonego okienka dialogowego (rozszerzenie nazwyDCR zostanie przyjête domyœlnie).
DEL-8(15 z 46)
P w g³ównym menu œrodowiska Delphi zainicjowaæpolecenie Component6New Component,
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
Po zapisaniu na dysku zasobu z piktogramem komponentumo¿na rozpocz¹æ jego tworzenie .
W tym celu nale¿y:
DEL-8(16 z 46)
P w wyœwietlonym okienku New Component okreœliæ< nazwê przodka tworzonej klasy (w podokienku
kombinowanym Ancestor type), którym w naszymprzypadku bêdzie klasa TStaticText (t³umaczy to przyjêt¹ przez nas wczeœniej nazwê komponentu – StaticTextClock),
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
W tym celu nale¿y:
tu wpisaæ nazwê przodka
DEL-8(17 z 46)
< nazwê klasy definiuj¹cej komponent (w podokienku ClassName) – w naszym przypadku TStaticTextClock,
< przyj¹æ (lub zmieniæ) domyœlne ustalenia w innychpodokienkach wejœciowych (podczas wpisywania nazwy komponentu, w podokienku Unit file name jest modyfikowana domyœlna nazwa modu³u z jego definicj¹;domyœln¹ stron¹ palety komponentów jest strona Samples),
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
DEL-8(18 z 46)
tu wpisaæ nazwê klasydefiniuj¹cej komponent
P wybraæ przycisk OK, co spowoduje otwarcieokienka redakcyjnego z modu³em zawieraj¹cymdefinicjê klasy opisuj¹cej komponent,
P zapisaæ modu³ na dysku ( File6Save),
P zainicjowaæ polecenie Component6InstallComponent,
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
W tym celu nale¿y:
Uwaga: Przy pracy w sieci ustaliæ w³asny katalog zapisu.
DEL-8(19 z 46)
P w wyœwietlonym okienku Install Component przejœæ nastronê Into new package i wpisaæ nazwê pakietu w podokienku wejœciowym Package file name(komponenty s¹ przechowywane w pakietach ), po czym wybraæ przycisk OK.
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
tu wpisaæ nazwê pakietu
W tym celu nale¿y:
DEL-8(20 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
Koniec instalacji komponentu zostaniezasygnalizowany przez wyœwietlenie nastêpuj¹cego okienka:
DEL-8(21 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
Utworzony automatyczniemodu³ z definicj¹komponentu ma postaæ
unit StaticTextClock;interfaceuses SysUtils, Classes, Controls, StdCtrls;type TStaticTextClock = class (TStaticText) private { Private declarations } protected { Protected declarations } public { Public declarations } published { Published declarations } end;procedure Register;implementation procedure Register; begin RegisterComponents (’Samples’, [TStaticTextClock]); end;end.
Modu³ ten zawiera, oprócz definicjiklasy okreœlaj¹cej komponent, tak¿eprocedurê Register, której zadaniemjest umieszczenie piktogramukomponentu w palecie (procedura(RegisterComponents , którejwywo³anie wystêpuje w treœciprocedury Register, jestzdefiniowana w module Classesbiblioteki VCL).
DEL-8(22 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
O tym, ¿e komponent zosta³ prawid³owozainstalowany, mo¿na przekonaæ siê wyœwietlaj¹codpowiedni¹ stronê palety komponentów (w podanymprzyk³adzie stronê Samples). Na stronie tej powinienznajdowaæ siê jego piktogram.
tu jest piktogramkomponentu
DEL-8(23 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
Uwaga: W celu usuniêcia komponentu nale¿y zainicjowaæpolecenie Project6Options, w wyœwietlonymokienku dialogowym przejœæ do strony Packages i przy podœwietlonej nazwie zbioru z pakietem (lubjego opisie) na liœcie Design Packages wybraæ natej stronie przycisk Remove. Spowoduje tousuniêcie wskazanego pakietu, a tym samymzawartego w nim komponentu.
podœwietliæ napis
wybraæ ten przycisk
DEL-8(24 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
Zmiana (modyfikacja) zarejestrowanegokomponentu polega zwykle na dodaniu kilku nowychelementów do definiuj¹cej go klasy.
W tym celu nale¿y uruchomiæ programzarz¹dzaj¹cy pakietami przez zainicjowaniepolecenia File6Open i wyszukanie w wyœwietlonejliœcie zbiorów odpowiedniego pakietu (otwarciepakietu automatycznie uruchamia ten program).
DEL-8(25 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
Wczytanie pakietu (w naszym przypadkuMOJEKOMPONENTY.DPK) spowoduje wyœwietlenieg³ównego okienka programu zarz¹dzaj¹cego pakietami z list¹jego modu³ów (w naszym przypadku lista ta bêdzie zawiera³atylko jeden modu³ StaticTextClock).
Po usytuowaniu kursora myszki nanazwie modu³u i podwójnymnaciœniêciu jej klawisza, na ekraniezostanie wyœwietlone okienkoredakcyjne z tekstem Ÿród³owymmodu³u.
tu podwójnie „klikn¹æ”
DEL-8(26 z 46)
Konstrukcja komponentu VCL (przyk³ad: StaticTextClock)
Tworzenie komponentów
Przyk³ad modyfikacji klasy TStaticTextClock (utworzeniekomponentu wyœwietlaj¹cego u do³u formatki aktualn¹ datêi czas) zostanie podany podczas demonstracji ...
Po modyfikacji nale¿y skompilowaæ ca³y pakiet(wykonujemy to przez wybór przycisku Compile w g³ównym okienku programu zarz¹dzaj¹cegopakietami).
Test poprawnoœci konstrukcji komponentu:
– na pustej formatce umieœciæ utworzony komponent (jeœli wymaga on obecnoœci innych komponentów, to te¿ je umieœciæ na formatce), po czym wykonaæ program.
DEL-8(27 z 46)
Konstrukcja i testowanie komponentu(przyk³ad: StaticTextClock)
Tworzenie komponentów
... a terazprezentacja
DEL-8(28 z 46)
P zainicjowaæ polecenie File6New6Other i w wyœwietlonym okienku New Items przejœæ na stronê ActiveX ,
Konstrukcja komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
Komponenty ActiveX (elementy steruj¹ce i formatki) mog¹ byæwykorzystywane w ró¿nych pakietach (m. in. C++ Builder, VisualC++, Visual Basic) i przegl¹darkach internetowych. £atwiej jestzintegrowaæ z programem (aplikacj¹) obiekt realizuj¹cy okreœlonefunkcje ni¿ programowaæ te funkcje od pocz¹tku.
Z komponentu StaticTextClock utworzymy komponentActiveX, który nazwiemy (przez analogiê) StaticTextClockX.
W tym celu wystarczy wykonaæ kilka prostych operacji:
DEL-8(29 z 46)
P wybraæ na niej piktogram ActiveX Control , cospowoduje wyœwietlenie okienka dialogowego kreatorakomponentów ActiveX ,
Konstrukcja komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
wybraæ ten piktogram
W tym celu wystarczy wykonaæ kilka prostych operacji:
DEL-8(30 z 46)
P w podokienku listowym VCL Class Name tego okienkawybraæ (z listy) nazwê klasy definiuj¹cej zwyk³ykomponent, z którego nale¿y utworzyæ komponentActiveX i po akceptacji pozosta³ych ustaleñ domyœlnych(lub ich zmianie) wybraæ przycisk OK, co spowodujeautomatyczne wygenerowanie modu³u z definicj¹ klasy okreœlaj¹cej komponent ActiveX.
Konstrukcja komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
W tym celu wystarczy wykonaæ kilka prostych operacji:
wybraæ klasê definiuj¹c¹zwyk³y komponent
DEL-8(31 z 46)
Konstrukcja komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
W przyk³adzie komponent ActiveX okreœla klasa TStaticTextClockX :
type TStaticTextClockX = class (TActiveXControl, IStaticTextClockX);
W jej nag³ówku obok nazwy przodka ( TActiveXControl) jest podananazwa ³¹cza programowego ( IStaticTextClockX ). £¹cze to jestzdefiniowane w module Project2_TLB , który tak¿e zosta³ utworzonyautomatycznie.
W definicji ³¹cza programowego IStaticTextControlX s¹ zdefiniowanew³asnoœci odpowiadaj¹ce w³asnoœciom komponentu StaticTextClock , ale dostêp do nich odbywa siê wy³¹cznie za pomoc¹ metod (o przedrostkuGet_ oraz Set_ ), których definicje s¹ podane w implementacji ³¹cza, czyli w klasie TStaticTextClockX .
DEL-8(32 z 46)
Konstrukcja komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
Uwaga: Nie nale¿y bezpoœrednio zmieniaæ(modyfikowaæ) ¿adnych tekstówŸród³owych zwi¹zanych z komponentem ActiveX.
Do ingerencji we wszystkie elementy definicjikomponentu ActiveX s³u¿y specjalny edytor, który jestinicjowany za pomoc¹ polecenia View6Type Library.
DEL-8(33 z 46)
P skompilowaæ przez zainicjowanie poleceniaProject6Compile, w wyniku czego otrzymamy zbiórdyskowy .OCX z komponentem,
P zarejestrowaæ w systemie, operacjê któr¹ wykonujemyza pomoc¹ polecenia Run6Register ActiveX Server (do anulowania rejestracji s³u¿y polecenieRun6Unregister ActiveX Server ).
Konstrukcja komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
Automatyczne wygenerowanie modu³u z definicj¹komponentu ActiveX nie koñczy procesu jego tworzenia.
Nale¿y jeszcze ca³y projekt (bibliotekê):
DEL-8(34 z 46)
Konstrukcja komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
polecenie rejestruj¹ce
Pomyœlna rejestracja zakoñczy siêwyœwietleniem nastêpuj¹cego komunikatu:
DEL-8(35 z 46)
Testowanie komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
Za pomoc¹ polecenia Component6Install Componentutworzony komponent ActiveX mo¿na do³¹czyæ dopalety komponentów (na stronie ActiveX).
Sprawdzanie poprawnoœci jego dzia³ania sprowadzi siêwówczas do umieszczania go na formatkach testowychprogramów okienkowych.
Inny sposób polega na wyœwietleniu go w przegl¹darceinternetowej.
DEL-8(36 z 46)
Testowanie komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
Œrodowisko Delphi zawiera gotowe narzêdzia do tworzeniadla przegl¹darek internetowych testowych zbiorów HTML (o rozszerzeniu nazwy HTM) zawieraj¹cych po³¹czenia z obiektami typu ActiveX (tak¿e typu ActiveForm).Odpowiednie polecenia ( Web Deployment Options oraz Web Deploy) znajduj¹ siê w opcji Project g³ównego menuœrodowiska.
Uwaga: Jeœli polecenia te s¹ wy³¹czone, czyli s¹ niedostêpne, oznacza to, ¿e bie¿¹cy projekt nie jest projektem typu ActiveX.
DEL-8(37 z 46)
Testowanie komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
Zainicjowanie poleceniaProject6Web DeploymentOptions spowodujewyœwietlenie na ekranieokienka o takiej samej nazwie.
tu jest to polecenie
DEL-8(38 z 46)
Testowanie komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
OkienkoWeb Deployment Options
DEL-8(39 z 46)
P skorowidz, w którym ma byæ zapisany zbiór .OCX ze sterownikiemActiveX lub formatk¹ typu ActiveForm (w podokienkuwejœciowym Target dir, np. C:\Program Files\Delphi 7\Projects) ,
P lokalizacjê zbioru .OCX wyspecyfikowan¹ w formacie URL (skr. ang. Uniform Resource Locator) i przeznaczon¹ dla serwera(np. http://SerwerXXX/), a w przypadku braku serwera – skorowidztestowy (tak¿e w formacie URL, np. file:///C:\Program Files\Delphi 7 \Projects); informacjê tê nale¿y wpisaæ w podokienku Target URL,
P skorowidz, w którym œrodowisko Delphi ma utworzyæ testowy zbiór HTML z po³¹czeniem do zbioru .OCX (w podokienku wejœciowym HTML dir).
Testowanie komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
Na pierwszej stronie ( Project ) tego okienka nale¿y okreœliæ:
DEL-8(40 z 46)
Testowanie komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
Dla celów testowych na ogó³ nie ma potrzebyzmieniaæ domyœlnych ustaleñ ani w grupie GeneralOptions (na stronie Project), ani na pozosta³ychstronach okienka Web Deployment Options.
Po zamkniêciu okienka Web Deployment Options(przycisk OK) inicjujemy polecenie Project6Build,które spowoduje utworzenie zbioru .OCX zesterownikiem ActiveX (lub formatk¹ ActiveForm).
DEL-8(41 z 46)
Testowanie komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
Ostatnim etapem utworzenia testowej strony dlaprzegl¹darki internetowej jest zainicjowanie poleceniaProject6Web Deploy.
Spowoduje ono umieszczenie zbioru .OCX w skorowidzu ustalonym w podokienku Target dirokienka Web Deployment Options i utworzenie zbioruHTML w skorowidzu okreœlonym w podokienkuHTML dir tego okienka (zbiór ten bêdzie mia³ tak¹sam¹ nazwê jak projekt, ale rozszerzenie nazwy HTM). W zbiorze HTML bêdzie okreœlone po³¹czenie (w formacie URL) ze zbiorem .OCX.
DEL-8(42 z 46)
Testowanie komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
Dla rozwa¿anego projektu zawartoœæ zbioru HTML bêdzie nastêpuj¹ca (zbiór .HTM mo¿na wczytaæ do okienka redakcyjnego œrodowiska Delphi):
<HTML><H1> Delphi 7 ActiveX Test Page </H1><p>You should see your Delphi 7 forms or controls embedded in the form below.<HR><center><P><OBJECT
classid="clsid:FB791945-DF58-4AF3-BF1A-A041BD9DF1A4" codebase="///C:/Program Files/Borland Delphi 7/Projects/StaticTextClockXControl1.ocx#version=1,0,0,0" width=350 height=250 align=center hspace=0 vspace=0
></OBJECT></HTML>
Uwaga: Numer identyfikacyjny (podany w instrukcji classid) mo¿e byæ inny.
DEL-8(43 z 46)
Testowanie komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
DEL-8(44 z 46)
Po wczytaniupodanego zbiorudo przegl¹darkiMS InternetExplorerotrzymamynastêpuj¹cy obraz:
Konstrukcja i testowanie komponentu ActiveX(przyk³ad: StaticTextClockX)
Tworzenie komponentów
...prezentacja
DEL-8(45 z 46)
Top Related