Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Delphi 6. Vademecum
profesjonalisty. Tom II
Autorzy: Xavier Pacheco, Steve Teixeira
Tumaczenie: Andrzej Grayski
ISBN: 83-7197-745-X
Tytu oryginau: Delphi 6 Developers Guide
Format: B5, stron: 496
oprawa twarda
Zawiera CD-ROM
!
"
#$%
Rozdzia 22. #2#
6Active Server Objects.......................................................................................................... 387
Active Server Pages ...................................................................................................... 387
Kreator obiektw ASO ........................................................................................................ 389
Edytor biblioteki typu ................................................................................................... 391
Obiekt Response............................................................................................................ 394
Pierwsze uruchomienie ................................................................................................. 395
Obiekt Request .............................................................................................................. 395
Rekompilacja obiektw ASO........................................................................................ 396
Ponowne uruchomienie serwera ASP ........................................................................... 397
Obiekty Session, Server i Application................................................................................. 398
Obiekty ASO i bazy danych ................................................................................................ 399
Obiekty ASO a NetCLX...................................................................................................... 402
ledzenie obiektw ASO..................................................................................................... 403
ledzenie obiektw ASP za pomoc MTS.................................................................... 404
Debugging ASO w Windows NT ................................................................................. 405
Debugging ASO w Windows 2000............................................................................... 406
Podsumowanie..................................................................................................................... 407
Dodatek B
2 %;-
2+ %6
Rozdzia 23.
Jedn z nowoci Delphi 6 jest technologia WebSnap, czca wszelkie zalety byskawicznego projektowania aplikacji (RAD) z mechanizmami charakterystycznymi dla aplikacji
serwera WWW. W zwizku z jej wszechstronnoci, przejawiajc si m.in. we wsppracy
z dowolnym niemal rdem bazami danych, grafik, surowymi plikami itp. oraz
w obsudze jzykw skryptowych, programici zyskali wspania moliwo przeniesinia swego dorobku i dowiadcze na platform internetow, co nadaje now jako procesowi tworzenia aplikacji serwerw WWW i programowaniu rozproszonemu w oglnoci.
WebSnap nie jest technologi cakowicie now jest ona wynikiem integracji dwch istniejcych technologii: WebBrokera i . Dziki temu przenoszenie istniejcych
aplikacji na platform WebSnap nie jest zbytnio skomplikowane. Technologia WebSnap
daje wiele uytecznych moliwoci, z ktrych najwaniejsze teraz w skrcie omwimy.
W poprzednich wersjach Delphi aplikacje WebBroker i InternetExpress posiaday pojedynczy modu danych (
). Uycie kilku moduw danych w ramach pojedynczej
aplikacji byo niemoliwe na etapie projektowania i wymagao dynamicznego tworzenia
tyche w kodzie programu. WebSnap eliminuje to ograniczenie, dopuszczajc dowoln
liczb moduw danych w ramach jednej aplikacji; kady z tych moduw reprezentuje
pojedyncz stron WWW. Pozwala to na rwnoleg prac kilku projektantw nad rnymi
fragmentami aplikacji.
WebSnap umoliwia wykorzystanie technik skryptowych w tworzonych aplikacjach, co
znacznie uatwia tworzenie i konfigurowanie aplikacji i dokumentw HTML. Komponentem odpowiedzialnym za obsug skryptw po serwerowej stronie aplikacji jest
(i jego komponenty pochodne).
u
Komponenty wywodzce si z klasy definiuj interfejs pomidzy skryptowymi
mechanizmami serwera i klienta. Stanowi one jedyny rodek udostpniania klientom skryptw serwera, co chroni te skrypty przed przypadkow lub zamierzon modyfikacj i jednoczenie pozwala na ukrycie tych funkcji, ktre nie powinny by wyeksponowane dla
aplikacji-klientw.
Definiujc komponent pochodny do zapewniamy sobie zarzdzanie specyficzn
zawartoci, stanowic materia rdowy na wynikow stron WWW; materia ten dostpny jest take na etapie projektowania aplikacji. Taki komponent moe zawiera dane
oraz wykonywa okrelone akcje; na przykad komponent moe wywietla rekordy ze zbioru danych oraz wykonywa rozmaite czynnoci zwizane z tym zbiorem, jak przewijanie, dodawanie, aktualizacja i usuwanie rekordw.
Integraln czci aplikacji tworzonych z udziaem WebBrokera byy komponentyproducenci stron, ktrych zadaniem byo generowanie zawartoci strony wynikowej (w formacie HTML) na podstawie rnorodnych rde danych (na przykad zbioru danych lub wybranego rekordu). InternetExpress rozszerza t koncepcj o komponent
(w Delphi 6 zastpiony przez
por. rozdzia 21.), a WebSnap idzie
jeszcze dalej, oferujc zestaw nowych komponentw wykorzystujcych zawarto komponentu oraz danych w formacie XSL/XML. Najwaniejszym z tych komponentw jest
, generujcy zawarto strony wynikowej na podstawie
akcji i pola komponentu (lub pochodnego).
Aplikacje WebSnap posiadaj wbudowany mechanizm zarzdzania sesjami, umoliwiajcy
ledzenie akcji danego uytkownika wrd wielu da HTTP. Poniewa HTTP jest protokoem bezstanowym (ang. stateless), aplikacja musi zapewni sobie we wasnym zakresie rodki do utrzymywania informacji o biecym stanie sesji kadego uytkownika; do
rodkw tych nale m.in. cookies, odwoania do URL lub ukryte pola. WebSnap upraszcza
to zadanie, udostpniajc komponent
, sprawujcy kontrol nad wszystkimi
daniami, niezalenie dla kadej sesji; informacja o sesji dostpna jest zarwno dla skryptu
obecnego w serwerze, jak i dla kodu samej aplikacji.
! u "#$
Wzgldy bezpieczestwa aplikacji WebSnap wymagaj logowania kadego uytkownika;
WebSnap automatyzuje proces logowania, dostarczajc w tym celu odpowiednich komponentw-adapterw (
i
) realizujcych
dialog logowania i, w poczeniu z mechanizmami zarzdzania sesjami, wykonujcych
uwierzytelnianie zgodne z wybranym modelem bezpieczestwa aplikacji. Kady uytkownik prbujcy uzyska dostp do nieautoryzowanych stron odsyany jest automatycznie
na stron logowania.
Zarzdzanie adowaniem plikw przez serwer (ang. file uploading) wymaga zazwyczaj
do duej iloci specjalizowanego kodu. WebSnap uwalnia programist od tego problemu,
oferujc odpowiedni komponent-adapter sprawujcy kontrol nad adowanymi plikami
i udostpniajcy zwizane z tym formularze.
Najefektywniejszym i najbardziej pouczajcym sposobem poznania moliwoci oferowanych przez technologi WebSnap bdzie z pewnoci samodzielne stworzenie przykadowej aplikacji.
u
Pasek narzdziowy Internet
Okno to zawiera opcje okrelajce charakter tworzonej aplikacji WebSnap. Opcje w sekcji
Server Type okrelaj typ serwera, ktry bdzie uruchamiany przez aplikacj; ich znaczenie jest nastpujce:
n ISAPI/NSAPI Dynamic Link Library wybranie tej opcji spowoduje utworzenie
! u "#$
Aby nasza przykadowa aplikacja bya jak najbardziej pouczajca, wybierzemy wariant
Web App Debugger executable.
Web App Debugger uruchamiany jest za pomoc polecenia
.
Aby mg on funkcjonowa prawidowo, konieczne jest zarejestrowanie aplikacji
!
", znajdujcej si w podkatalogu Bin zainstalowanego Delphi 6
naley po prostu uruchomi jednokrotnie t aplikacj np. z poziomu wiersza polece.
Web App Debugger spenia rol serwera dla testowanej aplikacji, symuluje wic
niejako rzeczywiste warunki jej pracy. Projekt stworzony w wyniku wybrania opcji
Web App Debugger executable kreatora z rysunku 23.2 zawiera formularz i sieciowy
modu danych (ang. Web module). Formularz peni rol rodowiska dla serwera COM,
ktry zostaje automatycznie zarejestrowany przy pierwszym uruchomieniu aplikacji
i staje si osigalny za porednictwem przegldarki WWW. Poniewa testowana
aplikacja jest wykonywalnym moduem .EXE, mona j zaadowa w zwyky sposb
do IDE i ustawi punkty przerwa (ang. breakpoints) w interesujcych miejscach kodu.
Aby uruchomi testowan aplikacj za porednictwem przegldarki WWW, naley
uruchomi Web App Debugger i klikn hipercze zatytuowane Default URL;
spowoduje to uruchomienie programu udostpniajcego list zarejestrowanych
w systemie zewntrzprocesowych serwerw COM, z ktrej mona wybra aplikacj
do uruchomienia. Za pomoc opcji View Details moemy pozna systemowe
szczegy wskazanej aplikacji, a take usun j z rejestru, jeeli nie bdzie duej
potrzebna. Nie naley wyrejestrowywa aplikacji !
" jeeli dokonamy
jej wyrejestrowania przez pomyk, trzeba bdzie zarejestrowa j ponownie, przez
uruchomienie jej z wiersza polece.
u
! u "#$
%
To stwierdzenie jest mocno uproszczone:
"$ jest tak naprawd kolekcj, posiada bowiem licznik
elementw $%
i ich tablic $ &'; dla uproszczenia mona jednak przyj, i istotnie mamy
do czynienia z tablic uproszczenie to nie dotyczy oczywicie kodu rdowego aplikacji! przyp. tum.
&
u
! u "#$
'
Domylny kod HTML, wygenerowany dla moduu ()
, przedstawiamy na wydruku
23.1. Oprcz regularnych instrukcji HTML zawiera on take elementy JavaScriptu.
Skrypt strony generowanej przez sieciowy modu danych
!"
#
"$
%
&
'
#
(($
%
)
&
'
*
!" $
%
+ !",-.+!"
*
!
. $
%
!
. ,-.!
*
*
/
/
+0+
+0+
1
" $
((
0
2
# $2
3'4$$
(
u
%
$"
$
%
0$
5
(62762(
'
#
$'$
5
(
+(
5
$,-.
5
(+(
5
$
5
((
5
$
55
*
*
$
-)
$
.8'
9:;+5+
<8!8-+- +)
1
=>
)9#.8'
=>
?">
1
@
1A
&
B
1
?=
1 ?
=>
Zwr uwag, i Delphi rozpoznaje skadni pliku HTML, wyrniajc elementy charakterystyczne dla jzyka skryptowego (szczegy zwizane z wyrnianiem skadni przez
edytor kodu konfigurowalne s z poziomu opcji edytora Tool/Editor Options na
stronie Color). Moliwe jest take uycie wasnego edytora stron HTML, na przykad
HomeSite, i zintegrowanie go z IDE integracji takiej dokonuje si za porednictwem
karty Internet opcji rodowiskowych (Tools/Environment Options). W oknie Internet File
Types zaznacz pozycj HTML i kliknij przycisk Edit, a nastpnie w polu Edit Action (okna
Edit Type) wpisz (lub wybierz z listy) odpowiedni akcj zarejestrowan w systemie dla
plikw HTML2. W wyniku kliknicia zakadki HTML Result pojawi si kod strony wynikowej w czystym HTML-u, natomiast kliknicie zakadki Preview udostpnia ostateczn, graficzn posta strony.
Podobnie jak dla innych typw plikw, dla plikw *.HTM i *.HTML sterowanie dostpnymi akcjami
odbywa si z poziomu okna Typy plikw opcji folderw; naley wrd zarejestrowanych typw plikw
odnale kategori HTML Document przyp. tum.
! u "#$
)
Nastpnie kliknij zakadk HTML, przejd w poblie koca pliku i po znaczniku /0
wstaw nastpujc sekcj kodu:
%
Dodamy teraz do aplikacji nastpn stron ilustrujc funkcjonowanie menu nawigacyjnego.
Przejd do paska menu gwnego IDE i z paska narzdziowego Internet (por. rysunek 23.1)
wybierz drugi przycisk (New WebSnap Page Module). Spowoduje to uruchomienie kreatora New WebSnap Page Module pozostaw standardow zawarto wszystkich jego
pl z wyjtkiem pola Name, w ktre powiniene wpisa nazw . Spowoduje to
utworzenie nowego moduu danych, zawierajcego pojedynczy komponent
.
u
Kod HTML tego moduu jest identyczny z tym, ktry widziae przed chwil (dla pierwszej
strony). Zapisz modu pod nazw wmSimple.
Dodaj teraz jaki przykadowy tekst przy kocu moduu na przykad taki:
! u "#$
cznika do siebie samej). Nic oczywicie nie stoi na przeszkodzie, by to proste w gruncie
rzeczy menu przystosowa do bardziej specyficznych wymogw konkretnej aplikacji.
Gdy przyjrzysz si uwanie ekranowi komputera w momencie przeczania stron,
zobaczysz migoczcy w tle formularz gwny aplikacji. Jest to spowodowane
traktowaniem aplikacji przez Web App Debugger: przy kadym nowym daniu
uruchamia on aplikacj zawierajc serwer COM, przekazuje jej danie, odbiera
odpowied i zamyka aplikacj.
Generowan stron WWW mona uczyni dostpn jedynie dla zalogowanych uytkownikw naley w tym celu zaznaczy opcj Login Required w oknie kreatora New
WebSnap Page Module. Utwrz now stron, nadaj jej nazw LoggedIn i zaznacz wspomnian opcj. Zapisz wygenerowany modu pod nazw wmLoggedIn. Nastpnie dodaj
fragment tekstu powitalnego dla zalogowanego uytkownika:
Pomidzy kodem pascalowym stron Simple i LoggedIn istnieje niewielka rnica w kodzie rejestracyjnym, znajdujcym si w sekcji 1 moduu:
?
)-C",
)-C", )D ".
)D ". < ! :E
):< F1"
E!
-C"
GE
(($E
8& E
<$
$2
?
)-C",
)-C", )D ".
)D ". < 9
E
):< =YR2WDNKUJGF]YR.QIKP4GSWKTGF_?E
(($E
8& E
<$$2
Uatwia to pniejsz zmian opcji strony bezporednio w kodzie, bez potrzeby uruchamiania kreatora.
u
&
Logowanie uytkownika przeprowadzane bdzie za pomoc kolejnej strony. W przeciwiestwie do dotychczas utworzonych Simple i LoggedIn nie powinna ona pojawia si w menu nawigacyjnym, a wic nie powinna by publikowana; naley w zwizku
z tym usun zaznaczenie opcji Published w oknie kreatora New WebSnap Page Module.
Naley oczywicie pozostawi niezaznaczon opcj Login Required nie mona przecie wymaga wczeniejszego zalogowania w celu logowania si!
Nazwij now stron Login i wybierz TAdapterPageProducer jako klas jej komponentu-producenta. Zachowaj j pod nazw wmLogin. Nastpnie umie w jej module danych
komponent
(ze strony
palety komponentw).
Komponent
jest specjalizowanym komponentem generujcym kod
HTML wynikowej strony WWW na podstawie zawartoci komponentu (lub pochodnego). W naszym przykadzie komponentem rdowym bdzie komponent
4
zawierajcy wszystko, co potrzeba do pobrania nazwy i hasa uytkownika,
bez potrzeby pisania jakiegokolwiek kodu.
Aby jednak logowanie w ogle miao jaki sens, naley wpierw zdefiniowa uytkownikw i ich hasa. W tym celu przejd do moduu Home i kliknij dwukrotnie komponent
WebUserList; w wywietlonym oknie (rys. 23.9) masz moliwo dodawania i usuwania
zdefiniowanych uytkownikw, za pomoc klawiszy (odpowiednio Ins i Del). W wersji
znajdujcej si na zaczonym CD-ROM-ie aplikacja rozpoznaje dwch uytkownikw:
56 i 17 ich hasa s tosame z nazwami.
Definiowanie
uytkownikw
za pomoc
komponentu
WebUserList
Przejd teraz do komponentu *
i ustaw jego waciwo
na
(to nazwa strony logowania). Nastpnie przejd do moduu wmLogin i kliknij
dwukrotnie komponent
. Spowoduje to otwarcie edytora Web Surface
Designer, przedstawionego na rysunku 23.10.
Wybierz pozycj AdapterPageProducer w lewym grnym oknie i kliknij przycisk New
Item. Wybierz AdapterForm i kliknij OK. Nastpnie wybierz (w lewym grnym oknie)
pozycj AdapterForm1 i ponownie kliknij przycisk New Item i wybierz pozycj AdapterErrorList; powtrz t czynno dwukrotnie, dodajc pozycje AdapterFieldGroup i AdapterCommandGroup. Nastpnie ustaw waciwo Adapter komponentu -
,
na
,.
Wybierz nastpnie pozycj AdapterFieldGroup1 i dodaj do niej dwie pozycje podrzdne
typu AdapterDisplayField; ustaw ich waciwoci FieldName na (odpowiednio) UserName
i Password, za tytuy (waciwo %
) na Uytkownik i Haso.
! u "#$
Web Surface Designer
u
! u "#$
%
I"
H
1 ,
.
I"2
I"I"<"
0
9
I"F1 ,
G
H
I"I"F0G2
2
I"
H
!
=<.
I"2
I"
I"I"<"
0
9
I"F!
=<G
H
I"I"F0G2
2
9
I"F!
=<G
H
((2
22
2
&
u
! u "#$
'
Kada ze stron aplikacji posiada swj odrbny plik HTML, ktry moe by atwo
edytowany bez potrzeby adowania aplikacji do IDE Delphi. Oznacza to moliwo
atwej modyfikacji aplikacji bez koniecznoci jej rekompilowania czy uruchamiania
serwera. W dalszym cigu rozdziau poznasz inne moliwoci przechowywania stron
HTML i uzyskiwania ich zawartoci.
(
u
?
?
>
"@=1
=
!=L
)
2
.<" '
((
:
.
H
:
.
< :
.
'$2
:
.
)
9
.<" 'E
.3
D3
E
9
I"F.3
D3
G$2
:
.
)
9
.<" 'E
) ,
E
9
I"F1 ,
G$2
:
.
)
9
.<" 'E
!
=<E
9
I"F!
=<G$2
:
.
. 2
2
!= )
2
2
2
Jak atwo zauway, plik .INI tworzony jest w katalogu, w ktrym znajduje si modu
wykonywalny aplikacji.
! u "#$
)
Oprcz obrazkw identyfikowanych przez URL, WebSnap potrafi take obsugiwa grafik przechowywan w strumieniu (stream). Wybierz drugie z pl
(komponentu ) i za pomoc inspektora obiektw wygeneruj szkielet procedury obsugi zdarzenia 9-. Umie jaki obrazek w tym samym katalogu, w ktrym znajduje si projekt aplikacji (wersja na zaczonym CD-ROM-ie wykorzystuje obrazek
athena.jpg) i uzupenij nastpujco wspomnian procedur zdarzeniow:
"
: :.
/K:9 H
8>2
H
9
2
3
D
H
9
2
3
:H
9 2
3
81 H
L$2
D
H
(
N>(2
:
H
.
9 < (>(E
8- $2
2
u
Wywietlanie obrazka
identyfikowanego
przez URL
! u "#$
Dla odmiany otwrz okno Object TreeView (za pomoc kombinacji klawiszy Shift+Alt+
F11). Kliknij prawym przyciskiem myszy pozycj Actions komponentu
,
i z menu kontekstowego wybierz opcj Add All Actions; w podobny sposb wybierz
opcj Add All Fields z menu kontekstowego pozycji Fields. Przejd nastpnie do komponentu , i za pomoc edytora pl dodaj do moduu danych wszystkie jego pola
(Add All Fields).
Poniewa WebSnap operuje na zbiorach danych w trybie bezstanowym, konieczne jest
istnienie klucza gwnego dla zbioru danych, by nawigacja wrd jego rekordw i modyfikacja jego danych w ogle byy moliwe. WebSnap oferuje atwe rozwizanie tego problemu: w oknie Object TreeView wybierz pozycj Fields (podporzdkowan komponentowi
,) i dla pola ;:
ustaw opcj !<6 we waciwoci
.
Dodaj do aplikacji now stron, zakwalifikuj j jako wymagajc logowania, nadaj jej
nazw BioLife i zapisz pod nazw wmBiolife. Poniewa jej modu rdowy bdzie si
odwoywa do moduu (8
!, umie nazw tego ostatniego na licie uses.
Przejd do okna Object TreeView i z menu kontekstowego pozycji WebPageItems wybierz
polecenie New Component, po czym dodaj komponent
. W analogiczny sposb
dodaj do pozycji
, komponenty
i -; ustaw waciwo tych komponentw na ,. Za pomoc menu kontekstowego komponentu -, dodaj wszystkie jego kolumny (Add All Columns).
Przejd do moduu 8
! i z menu kontekstowego pozycji Actions (podporzdkowanej komponentowi ,) wybierz polecenie Add All Actions; w ten sam
sposb wybierz polecenie Add All Fields dla pozycji Fields.
Powr do moduu 8
! i kliknij dwukrotnie komponent
; powiniene zobaczy okno edytora Web Surface Designer z uwidocznion zawartoci rekordw
tabeli (rys. 23.13); jeeli rekordy si nie uka, prawdopodobnie zbir nie zosta otwarty
zmie wwczas na waciwo komponentu ,.
Poniewa pole :
spycha na prawo nastpne pola, przejd do komponentu 4
-, (w oknie Object TreeView) i usu pozycj %
:
.
Web Surface Designer nie wywietla zawartoci pl graficznych, bd one jednak widoczne na stronie wynikowej o czym mona si przekona, gdy skompiluje si i uruchomi
ponownie aplikacj. Zauwa, e znowu wszystko odbyo si bez napisania jakiegokolwiek
kodu pascalowego.
Oczywicie obsuga baz danych nie byaby w peni uyteczna, gdyby sprowadzaa si
jedynie do przegldania danych; WebSnap umoliwia wic dodawanie, przegldanie,
edytowanie i usuwanie poszczeglnych rekordw tabeli.
u
Zawarto tabeli
BioLife wywietlana
w oknie Web
Surface Designera
uruchomionego
przez komponent
TDataSetAdapter
W oknie Web Surface Designera przejd do pozycji AdapterGrid i dodaj pozycj podrzdn AdapterCommandColumn; za pomoc polecenia %
jej menu kontekstowego dodaj cztery pozycje %2
(, %2
(, %8
( 2
( i %:(2
(, posugujc si oknem przedstawionym na rysunku 23.14 (zaznaczajc drug i kolejne opcje,
trzymaj nacinity klawisz Ctrl).
Dodawanie polece
do komponentu
AdapterCommandColumn
Po zamkniciu okna Add Commands przejd do inspektora obiektw i zmie standardowe tytuy (%
) utworzonych przyciskw na (odpowiednio) Usu rekord, Edytuj
rekord, Przegldaj rekord i Wstaw rekord. Wymu pionowe uoenie przyciskw przez
ustawienie na , waciwoci 6%
komponentu %
%
,3. Gdy
przewiniesz w poziomie zawarto dolnego okna Web Surface Designera, zobaczysz ostatni kolumn tabeli zawierajc dodane przed chwil przyciski (rys. 23.15).
Waciwo ta okrela, w ilu kolumnach maj by wywietlane wygenerowane obiekty przyp. tum.
! u "#$
Przyciski polece
TAdapterActionButton
w oknie Web
Surface Designera
Same przyciski jednak nie wystarcz aby moliwe byo przegldanie, edycja i dodanie
rekordu, potrzebna jest dodatkowa strona wywietlajca formatk rekordu, czyli czytelny
ukad jego zawartoci. Dodaj wic do projektu kolejn stron o nazwie EditBioLife i zapisz j pod nazw wdmBioLife. Umie na niej komponent
, dodaj
do niego podporzdkowan pozycj
, do tego ostatniego dodaj komponenty
, -
i %
-
. Za pomoc menu kontekstowych dodaj wszystkie pola (Add All Fields) komponentu -
i wszystkie
polecenia (Add All Commands) komponentu %
-
. W oknie Web Surface
Designera powinna pojawi si zawarto konkretnego rekordu, jak na rysunku 23.16.
Musisz jeszcze dokona powizania przyciskw widocznych w ostatniej kolumnie tabeli (na
stronie 8
!) ze stron EditBioLife. Zaznacz przyciski CmdEditRow, CmdBrowseRow
i CmdNewRow (trzymajc nacinity klawisz Ctrl) i za pomoc inspektora obiektw przypisz ich waciwoci : warto 8
!.
Kiedy zadasz przegldania rekordu, wywietlona zostanie strona EditBioLife prezentujca dane rekordu w paskim ukadzie tekstowym; kiedy zadasz edycji lub wstawienia
rekordu, wywietlona zostanie ta sama strona, jednak dane rekordu widoczne bd w edytowalnych polach; pole zwizane z grafik pozwala nawet na zmian obrazka w rekordzie
przez wskazanie odpowiedniego pliku.
Ponownie wszystko odbyo si bez pisania jakiegokolwiek kodu.
Pole edycyjne zwizane z polem :
rekordu jest zwyk kontrolk edycyjn,
w zwizku z czym edytowany tekst jest w duej czci niewidoczny. Mona zmieni
ten stan rzeczy przez odpowiednie ustawienie waciwoci
,
62
( i 6
# komponentu :
.
u
Zawarto rekordu
tabeli w oknie Web
Surface Designera
! u "#$
%
Przedstawione dotychczas przykady ilustrujce m.in. zarzdzanie informacjami o uytkownikach i ich preferencjach, nadzorowanie sesji uytkownikw, wywietlanie i manipulowanie danymi itp. s do intuicyjne i stanowi wymowne wiadectwo moliwoci
technologii WebSnap. WebSnap potrafi jednak jeszcze wicej, dajc uytkownikom
jeszcze wiksz kontrol nad tworzonymi aplikacjami.
&
-*.
Tworzenie aplikacji WebSnap wie si zazwyczaj z operowaniem wieloma plikami i zasobami jak pliki HTML, skrypty serwera, moduy pascalowe, zbiory danych i komponenty sterownikw, grafika, itp.; wszystko to musi oczywicie by w logiczny sposb
powizane ze sob, by aplikacja moga funkcjonowa poprawnie. Najczciej czynnikiem
koordynujcym s same strony HTML, w ktre wbudowuje si powizane zasoby;
WebSnap umoliwia wprawdzie przechowywanie stron HTML niezalenie od skompilowanego moduu wynikowego, jednak musz one znajdowa si w tym samym katalogu, w ktrym jest w modu wynikowy. Nie zawsze jest to moliwe i nie zawsze wygodne podana byaby moliwo przechowywania stron HTML np. w zasobach czy bazach danych.
Na tak okazj WebSnap oferuje komponent
, umoliwiajcy pobieranie stron HTML z dowolnego rda, ktre moe by reprezentowane w formie strumienia danych (stream). rdem takim mgby by na przykad zasb binarny, skonsolidowany z moduem wynikowym. Zaprezentujemy to rozwizanie umiecimy we
wspomnianym zasobie kopi strony wmLogin.html, nazwan embed.html i uzupenion
stosownym tekstem wyjaniajcym, z ktr stron mamy faktycznie do czynienia.
Najprostszym rodkiem implementowania zasobw s w Delphi pliki *.RC. Umieszczone
w projekcie, podlegaj automatycznej kompilacji i konsolidacji z wynikowym moduem
wykonywalnym. Plik .RC reprezentujcy zasb-stron HTML w naszym przykadzie ma
nastpujc zawarto:
O
,D!
/P
=
?"
DL&&&,D!
,D!
DL&,D!
Po skompilowaniu aplikacji strona EMBED.HTML zostanie doczona do moduu wykonywalnego jako zasb 8).
Dodaj do naszej aplikacji kolejn stron, nazwij j Embedded i zapisz pod nazw wmEmbedded. Przejd do strony Home, wybierz komponent
i korzystajc
z inspektora obiektw stwrz nastpujc procedur obsugi zdarzenia :
"
,!.
9 3
.
9 9 H
8>2
<H
<2
.
'H
9
2
3
." 9 H
9 2
3
81 E
, H
L$2
">Q
=
=
?1
>Q
1
?1
+1 +
()DDL&&&(E
<.
'$$
0
." 9
H
-" 9 < :E
(DL&&&,D!(E
(,D!($2
,
H
"2
=
?R
??
2
2
&
u
/
Jednym z najtrudniejszych zada w aplikacjach internetowych jest obsuga przesyania
pliku od klienta do serwera, polegajca na pieczoowitej kontroli kadego nadchodzcego bajtu. WebSnap znacznie upraszcza to zadanie, powierzajc wikszo jego skomplikowanych szczegw komponentowi-adapterowi, a uytkownikowi pozostaje jedynie
umieszczenie wspomnianego pliku w strumieniu.
Stwrz now stron o nazwie Upload i zapisz j pod nazw wmUpload. Umie w jej module danych komponent i dodaj do niego jedno pole , ktre
bdzie suy do wybierania przez klienta plikw do zaadowania. Dodaj take pojedyncz akcj i nazwij j *
.
Dodaj do komponentu komponent
, a do tego ostatniego trzy komponenty:
, -
i %
-
. Pocz dwa pierwsze z komponentem , (przez waciwo ), natomiast %
-
pocz z -
(przez waciwo 6%
). Nastpnie dodaj
wszystkie pola komponentu -
, i wszystkie akcje komponentu 4
%
-
. Zmie tytu przycisku na Zaaduj plik. Rysunek 23.17 przedstawia
obraz strony w edytorze Web Surface Designer.
Wygld strony
dokonujcej
zaadowania pliku
Konieczne jest ponadto dodanie kodu w dwch miejscach moduu. Pierwszym jest procedura obsugi zdarzenia 9* komponentu ," przedstawia j wydruk 23.5.
! u "#$
'
Obsuga zdarzenia OnFileUpload
"
.
.
.
9 H
8>2
.
H
.
!
$2
3
H
2
<" &
H
2
.
H
2
.9H
.
9 2
?R ">
=
.
<"
0
('
1
="
?R 1
($2
4
2
2
H
0
.
<"
S
1
>
TE
@
=
?? ?
>
"
>
< 44 .
4.
.
F:G.
'$E
(>($
0$
< 44 .
4.
.
F:G.
'$E
(>($
0$
(D"
?
1 M
=
UK
UK($2
<" &
H
4 .
KD "',:$$
5
(UK.
(2
. &
<" &
$2
.
'
H
<" &
5
(N(
5
4 .
'.
.
F:G.
'$2
.9
H
.
9 < .
E
<
9 &)
$2
.9<. .
.
F:G9 E
0$2
=
">
R
=
.9. 2
2
2
2
2
Poniszy kod dokonuje sprawdzenia, czy wybrano jaki plik i czy plik ten ma rozszerzenie .jpg albo .jpeg, po czym sprawdza, czy katalog docelowy istnieje, czy te naley go
utworzy (funkcja
). Nastpnie tworzony jest strumie plikowy i do
tego strumienia kopiowane s kolejno zawartoci wyspecyfikowanych plikw. Faktyczne
dziaania zwizane z adowaniem plikw nie s widoczne na wydruku, skrywaj si bowiem wewntrz klasy * .
Drugim zdarzeniem wymagajcym oprogramowania jest zdarzenie 9 akcji *
4
komponentu ,:
"
4"9 H
8>2
H
9
$2
- 2
2
(
u
+
#
#
!
W niniejszym rozdziale wikszo pracy zwizanej z wywietlaniem stron HTML wykonywana bya przez komponent
i komponenty jemu podporzdkowane. Zestaw tych ostatnich nie jest bynajmniej zamknity WebSnap umoliwia
tworzenie wasnych, na potrzeby tworzonych aplikacji. Kady komponent przeznaczony
do wsppracy pod nadzorem komponentu
musi wywodzi si
z klasy
%
%
i implementowa interfejs
%
. Stanowi to dobr
okazj do stworzenia klasy bazowej speniajcej te wymagania (patrz wydruk. 23.6).
Klasa bazowa dla komponentw pracujcych pod nadzorem TAdapterPageProducer
BL)9<
)<
<E
:)<$
%
:)<
*
"
<8
H
)<8
2
!"H
!"$H
2
"
K,D!H
2
3
"2
2
2
J
J
"
BL)9<<8
H
)<8
2
!"H
!"$H
2
3
:H
:!")<2
9" !"E
:!")<E
:$
-"
H
:!".
K,D!E
$
-"
H
K,D!2
2
! u "#$
)
Klasa .8
%
implementuje tylko jedn metod interfejsu %
.
Metoda ta sprawdza, czy komponent nadrzdny jest zgodny z klas 6
-
; jeli tak,
to traktowany jest zgodnie z reguami tej klasy, w przeciwnym razie metoda pobiera sw
warto z metody -). Ta ostatnia jest abstrakcyjna, a wic kady komponent pochodny musi j implementowa. Na zaczonym CD-ROM-ie znajduje si definicja dwch
klas, ktre dostarczaj komponentowi
zawarto strony HTML
w postaci (odpowiednio) pliku i listy acuchw. Definicj drugiej z nich przedstawiamy
na wydruku 23.7.
Komponent dostarczajcy zawarto strony HTML w postaci listy acuchw
B,D!<
BL)9<$
3
.,D!H
9
2
"
9,D!
I"H
9
$2
"
K,D!H
2
3
2
"
"
< 81 H
<$2
3
2
"
& 2
3
2
"
,D!H
9
.,D!
1
9,D!2
2
J
J
"
B,D!< < 81 H
<$2
2
.,D!
H
9
!
< 2
2
"
B,D!< & 2
.,D!. 2
2
2
"
B,D!< K,D!H
2
-"
H
.,D!42
2
"
B,D!< 9,D!
I"H
9
$2
.,D!
I"$2
2
Klasa .)%
posiada waciwo HTML, przechowujc list acuchow. Zawarto tej listy udostpniana jest (przez metod -)) komponentowi
w postaci acucha, stanowicego konkatenacj acuchw skadowych poprzedzielanych znakami nowego wiersza (=,>=,?). W ten sposb mona przekaza kad zawarto,
u
ktra da si skonwertowa do postaci acucha obrazek, plik itp. Aby jednak nowo
zdefiniowany komponent mg by zauwaony przez Web Surface Designer, musi zosta
zarejestrowany przez procedur 2
%
, umieszczon wewntrz procedury
2 , jak w module WebSnapComps.pas na zaczonym CD-ROM-ie:
"
-
2
-
)<F B).
E
B,D!< GE
B, $2
2
Po zarejestrowaniu i zainstalowaniu, nowe komponenty staj si dostpne w oknie dialogowym opcji New Component (w edytorze Web Surface Designer rys. 23.18).
Zestaw nowych
komponentw
do wyboru w oknie
dialogowym opcji
New Component