46
ZAAWANSOWANE PROGRAMOWANIE W (PAKIECIE) DELPHI Andrzej Marciniak Prezentacja multimedialna przygotowana za pomoc¹ systemu Corel® Presentations 11 Copyright © 2004 - 2010 by Andrzej Marciniak DEL-8(1 z 46) DEL420

Andrzej Marciniak - cs.put.poznan.pl · piktogramy, metazbiory) Pkomponenty dotycz¹ce obs³ugi multimediów

  • Upload
    lyhuong

  • View
    223

  • Download
    0

Embed Size (px)

Citation preview

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)

KONIEC

DEL-8(46 z 46)